import React, { type ReactNode } from 'react'; import type { CommonProps, DaDataSuggestion } from './core-types'; import { HttpCache } from './http-cache'; export type BaseProps = CommonProps; export interface BaseState { /** * Текущая строка в поле ввода */ query: string; displaySuggestions: boolean; /** * Оригинальная строка в поле поиска, требуется для хранения значения в момент переключения подсказок стрелками */ inputQuery: string; /** * Находится ли сейчас фокус в поле ввода */ isFocused: boolean; /** * Массив с текущими подсказками */ suggestions: Array>; /** * Индекс текущей выбранной подсказки */ suggestionIndex: number; } export declare abstract class BaseSuggestions = Record> extends React.PureComponent & OwnProps, BaseState> { /** * URL для загрузки подсказок, переопределяется в конкретном компоненте */ protected loadSuggestionsUrl: string; protected dontPerformBlurHandler: boolean; protected _uid?: string; protected didMount: boolean; /** * HTML-input */ private textInput?; constructor(props: BaseProps & OwnProps); componentDidMount(): void; componentDidUpdate(prevProps: Readonly & OwnProps>): void; componentWillUnmount(): void; get uid(): string; get httpCache(): HttpCache | null; protected getSuggestionsUrl: () => string; protected setupDebounce: (delay: number | undefined) => void; /** * Функция, которая вернет данные для отправки для получения подсказок */ protected abstract getLoadSuggestionsData(): RequestPayload; protected fetchSuggestions: () => void; private handleInputFocus; private handleInputBlur; private handleInputChange; private handleInputKeyDown; private handleInputKeyPress; private handleKeyboard; private performFetchSuggestions; private onSuggestionClick; private selectSuggestion; private setCursorToEnd; protected getHighlightWords: () => string[]; /** * Функция, которая вернет уникальный key для списка React * @param suggestion */ protected getSuggestionKey: (suggestion: DaDataSuggestion) => string; focus: () => void; setInputValue: (value?: string) => void; protected abstract renderOption(suggestion: DaDataSuggestion): ReactNode; render(): ReactNode; }