import type { TreeListData } from '../Tree'; import type { TreeAutocompleteProps } from '../TreeAutocomplete'; export type TreeAsyncAutocompleteValue = Omit & { /** * Заголовок элемента дерева */ label: string; /** * Подзаголовок элемента дерева */ note?: string; /** * Дочерние узлы дерева */ children?: TreeAsyncAutocompleteValue[]; }; export type FetchOptionsResult = { /** * Элементы дерева */ options: TreeAsyncAutocompleteValue[]; meta?: { isAllDataLoaded: boolean; }; }; export type TreeAsyncAutocompleteProps = Omit & { /** * Выбранное значения */ value?: TreeAsyncAutocompleteValue | null; /** * Функция, которая запускается при выборе item */ onChange?: (newValue?: TreeAsyncAutocompleteValue | null) => void; /** * Функция для асинхронной загрузки опций на основе поискового запроса * При возникновении ошибки запроса данных, компонент сам ее обработает. * Для обработки ошибок вручную используйте параметр `onDataLoadError` * * @param search - Строка поиска, введенная пользователем. На основе этой * строки функция должна вернуть подходящие опции. * @param signal - Объект `AbortSignal`, который позволяет отменить запрос, * если пользователь изменил поисковый запрос или закрыл компонент. * * @returns Promise Промис, который разрешается объектом с массивом узлов дерева и метаданными. * * @example ```typescript * const fetchOptions = async (search: string, signal?: AbortSignal) => { * const response = await fetch(`/api/nodes/search?query=${search}`, { * signal * }); * const data = await response.json(); * * return { * nodes: data.items, * meta: { * isAllDataLoaded: data.isAllDataLoaded, * } * }; * }; * * * ``` */ fetchOptions: (search: string, signal?: AbortSignal) => Promise; /** * Задержка для fetchOptions */ fetchDelayMs?: number; /** * Функция для обработки ошибок загрузки данных */ onDataLoadError?: (error: Error) => void; /** * Минимальное количество символов для выполнения запроса */ minSymbolsToFetch?: number; /** * Функция определения необходимости показа подсказки пользователю */ onShowUserHint?: (options: TreeAsyncAutocompleteValue[]) => boolean; };