import { Collection, CollectionProxy, CollectionState, Item, ItemAdaptee, UseCollectionOptions, } from 'onekijs-framework'; import React, { FC, ReactNode } from 'react'; import { ListItemHandler, ListItemProps, ListNotFoundProps, StandardListProps, VirtualListProps, } from '../list/typings'; export type ArrayTreeProps = TreeItem> = TreeConfig & { adapter?: TreeItemAdapter; dataSource?: string | T[]; fetchOnce?: boolean; selected?: T[]; }; export type ControllerTreeProps< T = any, I extends TreeItem = TreeItem, S extends TreeState = TreeState, C extends TreeController = TreeController, > = TreeConfig & { controller: CollectionProxy; }; export type TreeConfig = TreeItem> = { className?: string; height?: string | number; treeItemClassName?: string | ((item: I) => string); TreeItemComponent?: React.FC>; TreeItemContentComponent?: React.FC>; TreeIconComponent?: React.FC>; TreeTogglerComponent?: React.FC>; NotFoundComponent?: FC | null; onActivate?: TreeItemHandler; onDeactivate?: TreeItemHandler; onHighlight?: TreeItemHandler; onUnhighlight?: TreeItemHandler; onSelect?: TreeItemHandler; onUnselect?: TreeItemHandler; virtual?: boolean; gap?: number; paddingLeft?: number; paddingRight?: number; animate?: boolean; keyboardNavigable?: boolean; listRef?: React.RefObject; }; export type TreeController< T = any, I extends TreeItem = TreeItem, S extends TreeState = TreeState, > = Collection & { collapse: TreeItemHandler; collapsing: TreeItemHandler; collapsed: TreeItemHandler; expand: TreeItemHandler; expanding: TreeItemHandler; expanded: TreeItemHandler; }; export type TreeItem = Item & { activable?: boolean; children?: string[]; collapsing?: boolean; expanded?: boolean; filterExpanded?: boolean; expanding?: boolean; icon?: ReactNode; level: number; parent?: string; selectable?: boolean; type?: 'folder' | 'leaf'; }; export type TreeItemAdaptee = ItemAdaptee & { children?: T[]; icon?: ReactNode; selectable?: boolean; selected?: boolean; type?: 'folder' | 'leaf'; expanded?: boolean; }; export type TreeItemAdapter = (data: T) => TreeItemAdaptee; export type TreeItemHandler = TreeItem> = ListItemHandler; export type TreeItemContext = TreeItem> = { className?: string; onCollapse: TreeItemHandler; onExpand: TreeItemHandler; }; export type TreeItemProps = TreeItem> = ListItemProps; export type TreeItemToggleProps = TreeItem> = Pick< TreeItemProps, 'item' | 'index' > & Pick, 'onCollapse' | 'onExpand'>; export type TreeListProps = TreeItem> = StandardListProps; export type TreeProps< T = any, I extends TreeItem = TreeItem, S extends TreeState = TreeState, C extends TreeController = TreeController, > = TreeConfig & { adapter?: TreeItemAdapter; controller?: CollectionProxy; dataSource?: string | T[]; fetchOnce?: boolean; selected?: T[]; }; export type TreeState = TreeItem> = CollectionState & { active?: string[]; adapter?: TreeItemAdapter; dataSource?: T[] | string; collapsing?: string[]; expanded?: string[]; expanding?: string[]; filterExpanded?: string[]; selected?: string[]; }; export type UseTreeOptions = TreeItem> = UseCollectionOptions & { active?: T[]; adapter?: TreeItemAdapter; dataSource?: T[] | string; selected?: T[]; }; export type VirtualTreeListProps = TreeItem> = VirtualListProps;