import { ReactElement, ReactNode } from 'react'; import { IdCollectionPredicate, ModelData, TreeFilter, AdditionalDefault } from 'bloko/common/tree/types'; import TreeSelectorDummy, { TreeSelectorDummyProps } from 'bloko/blocks/treeSelector/Dummy'; import { LabelComponentType, IconComponentType } from 'bloko/blocks/treeSelector/Dummy/types'; export { TreeSelectorDummy }; export interface TreeSelectorProps { /** Дерево элементов. */ data: ModelData[]; /** Разрешает выбор только одного элемента. */ singleChoice?: boolean; /** Разрешает выбор только элементов без потомков. */ leavesOnly?: boolean; /** Компонент для вывода метки у элемента дерева */ LabelComponent?: LabelComponentType; /** Компонент для вывода иконки у элемента дерева */ IconComponent?: IconComponentType; /** Запрещённые ID. */ disabled?: string[]; /** Изначально выбранные ID. */ initialSelected?: string[]; /** Изначально открытые ID. */ initialExpanded?: string[]; /** Строка-фильтр для дерева, остаются только элементы с вхождением указанной строки. */ contentFilterQuery?: string; /** Способ фильтрации дерева при поиске */ treeFilter?: TreeFilter; /** Обработчик изменения состояния раскрытия элементов * В аргументах получает список id раскрытых элементов `{Array} expanded` */ onExpand?: (expanded: string[]) => void; /** Обработчик изменения набора выбранных ID. * В аргументах получает `{String} id`, `{Boolean} isSelected`, `{Array} allSelected`. */ onChange?: (id: string, isSelected: boolean, allSelected: string[]) => void; /** Обработчик изменения строки contentFilterQuery * В аргументах получает список подходящих под запрос id */ onChangeFilterQuery?: (ids: string[], query: string) => void; /** Показывать ли список выбранных */ showSelectedList?: boolean; /** Свойства обертки дерева */ wrapperTreeProps?: JSX.IntrinsicElements['div']; /** ID моделей которые предлагаются для выбора, если в поиске ничего не найдено */ suggestedNotFound?: string[]; /** Функция возвращает true для элементов, которые можно выбрать. При использовании * вместе с параметром leavesOnly применяется только к элементам без потомков. */ checkSelectable?: IdCollectionPredicate; } interface TreeSelectorComponent { (props: TreeSelectorProps): JSX.Element; } /** * Компонент для работы с древовидной структурой данных. * Получает дерево в виде JSON и изначально выбранные и открытые элементы, * далее управляет ими сам. Если нужно ручное управление `selected`, * см. компонент TreeSelectorDummy. */ declare const TreeSelector: TreeSelectorComponent; export declare const isValidTreeSelectorElement: (child: ReactNode) => child is ReactElement, string | import("react").JSXElementConstructor>; export declare const isValidTreeSelector: (child: ReactNode) => child is ReactElement | TreeSelectorProps, string | import("react").JSXElementConstructor>; export default TreeSelector;