UNPKG

@douyinfe/semi-ui

Version:

A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.

136 lines (135 loc) 5.13 kB
import React, { ReactNode, MouseEvent } from 'react'; import { BasicTreeProps, BasicExpandedOtherProps, BasicRenderFullLabelProps, BasicSearchRenderProps, BasicTreeInnerData, BasicKeyEntities, BasicKeyEntity, BasicTreeNodeProps, BasicFlattenNode, BasicTreeNodeData, BasicOnDragProps, KeyMapProps } from '@douyinfe/semi-foundation/lib/es/tree/foundation'; export type Value = string | number | TreeNodeData | Array<TreeNodeData | number | string>; export interface DragTreeNode extends TreeNodeData { expanded: boolean; /** * The positional relationship of the current node in the entire * treeData, such as the 0th node of the 2nd node of the 1st node * of the 0th layer: '0-1-2-0' */ pos: string; } export interface DragProps { event: MouseEvent; node: DragTreeNode; } export interface OnDragProps extends BasicOnDragProps { event: MouseEvent; node: DragTreeNode; dragNode: DragTreeNode; } export interface DragEnterProps extends DragProps { expandedKeys?: string[]; } export interface ExpandedOtherProps extends BasicExpandedOtherProps { node: TreeNodeData; } export interface RenderFullLabelProps extends BasicRenderFullLabelProps { onClick: (e: MouseEvent) => void; onContextMenu: (e: MouseEvent) => void; onDoubleClick: (e: MouseEvent) => void; onExpand: (e: MouseEvent) => void; data: TreeNodeData; style: React.CSSProperties; onCheck: (e: MouseEvent) => void; expandIcon: ReactNode; } export interface SearchRenderProps extends BasicSearchRenderProps { prefix: ReactNode; } export interface TreeProps extends BasicTreeProps { children?: ReactNode; defaultValue?: Value; emptyContent?: ReactNode; filterTreeNode?: boolean | ((inputValue: string, treeNodeString: string, data?: TreeNodeData) => boolean); searchRender?: ((searchRenderProps: SearchRenderProps) => ReactNode) | false; searchStyle?: React.CSSProperties; style?: React.CSSProperties; treeData?: TreeNodeData[]; value?: Value; icon?: ReactNode | ((props: TreeNodeProps) => ReactNode); keyMaps?: KeyMapProps; loadData?: (treeNode?: TreeNodeData) => Promise<void>; onChange?: (value?: Value) => void; onDoubleClick?: (e: MouseEvent, node: TreeNodeData) => void; onDragEnd?: (dragProps: DragProps) => void; onDragLeave?: (dragProps: DragProps) => void; onDragOver?: (dragProps: DragProps) => void; onDragStart?: (dragProps: DragProps) => void; onDragEnter?: (dragEnterProps: DragEnterProps) => void; onDrop?: (onDragProps: OnDragProps) => void; onExpand?: (expandedKeys: string[], expandedOtherProps: ExpandedOtherProps) => void; onLoad?: (loadedKeys?: Set<string>, treeNode?: TreeNodeData) => void; onContextMenu?: (e: MouseEvent, node: TreeNodeData) => void; onSelect?: (selectedKey: string, selected: boolean, selectedNode: TreeNodeData) => void; renderDraggingNode?: (nodeInstance: HTMLElement, node: TreeNodeData) => HTMLElement; renderFullLabel?: (renderFullLabelProps: RenderFullLabelProps) => ReactNode; renderLabel?: (label?: ReactNode, treeNode?: TreeNodeData, searchWord?: string) => ReactNode; autoMergeValue?: boolean; expandIcon?: ReactNode; } export interface OptionProps { index: number; style: React.CSSProperties; data: KeyEntity; } export interface KeyEntities extends BasicKeyEntities { [key: string]: KeyEntity; } export interface KeyEntity extends BasicKeyEntity { children?: KeyEntities; data?: TreeNodeData; parent?: undefined | KeyEntity; } export interface TreeState extends BasicTreeInnerData { keyEntities: KeyEntities; treeData: TreeNodeData[]; flattenNodes: FlattenNode[]; prevProps: null | TreeProps; cachedFlattenNodes: FlattenNode[] | undefined; } export interface TreeNodeProps extends BasicTreeNodeProps { children?: TreeNodeData[]; icon?: ReactNode; isEnd?: boolean[]; expandIcon?: ReactNode | ((props: { onClick: (e: MouseEvent) => void; className: string; expanded: boolean; }) => ReactNode); } export interface TreeNodeState { [x: string]: any; } export interface TreeNodeData extends BasicTreeNodeData { label?: ReactNode; icon?: ReactNode; children?: TreeNodeData[]; } export interface FlattenNode extends BasicFlattenNode { children?: FlattenNode[]; data?: BasicTreeNodeData; label?: ReactNode; parent?: null | FlattenNode; isEnd?: boolean[]; } export interface NodeListProps { [x: string]: any; flattenNodes: FlattenNode[]; motionKeys: Set<string>; motionType: string; flattenList: FlattenNode[] | undefined; searchTargetIsDeep?: boolean; renderTreeNode: (treeNode: FlattenNode, ind?: number, style?: React.CSSProperties) => ReactNode; } export type TransitionNodes<T> = Array<T | Array<T>>; export interface NodeListState { transitionNodes: TransitionNodes<FlattenNode>; cachedMotionKeys?: Set<string>; cachedData?: FlattenNode[]; } export interface ScrollData { key: string; align?: 'center' | 'start' | 'end' | 'smart' | 'auto'; }