react-dadata
Version:
React-компонент для подсказок адресов, организаций и банков с помощью сервиса DaData.ru
74 lines (73 loc) • 3.05 kB
TypeScript
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;
}