UNPKG

react-dadata

Version:

React-компонент для подсказок адресов, организаций и банков с помощью сервиса DaData.ru

74 lines (73 loc) 3.05 kB
import React, { type ReactNode } from 'react'; import type { CommonProps, DaDataSuggestion } from './core-types'; import { HttpCache } from './http-cache'; export type BaseProps<SuggestionType> = CommonProps<SuggestionType>; export interface BaseState<SuggestionType> { /** * Текущая строка в поле ввода */ query: string; displaySuggestions: boolean; /** * Оригинальная строка в поле поиска, требуется для хранения значения в момент переключения подсказок стрелками */ inputQuery: string; /** * Находится ли сейчас фокус в поле ввода */ isFocused: boolean; /** * Массив с текущими подсказками */ suggestions: Array<DaDataSuggestion<SuggestionType>>; /** * Индекс текущей выбранной подсказки */ suggestionIndex: number; } export declare abstract class BaseSuggestions<SuggestionType, OwnProps, RequestPayload extends Record<string, unknown> = Record<string, unknown>> extends React.PureComponent<BaseProps<SuggestionType> & OwnProps, BaseState<SuggestionType>> { /** * URL для загрузки подсказок, переопределяется в конкретном компоненте */ protected loadSuggestionsUrl: string; protected dontPerformBlurHandler: boolean; protected _uid?: string; protected didMount: boolean; /** * HTML-input */ private textInput?; constructor(props: BaseProps<SuggestionType> & OwnProps); componentDidMount(): void; componentDidUpdate(prevProps: Readonly<BaseProps<SuggestionType> & 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<SuggestionType>) => string; focus: () => void; setInputValue: (value?: string) => void; protected abstract renderOption(suggestion: DaDataSuggestion<SuggestionType>): ReactNode; render(): ReactNode; }