@arco-design/web-react
Version:
Arco Design React UI Library.
351 lines (350 loc) • 10.5 kB
TypeScript
import { CSSProperties, ReactNode, ReactElement, DragEvent, PropsWithChildren } from 'react';
import TreeNode from './node';
import { AvailableVirtualListProps } from '../_class/VirtualList';
import { TreeNodeProps } from '.';
export declare type NodeInstance = ReactElement<PropsWithChildren<NodeProps>, typeof TreeNode>;
export declare type FakeNodeInstance = {
key: string;
props: TreeNodeProps;
};
export declare type SHOW_ALL = 'all';
export declare type SHOW_PARENT = 'parent';
export declare type SHOW_CHILD = 'child';
export declare type ActionOnClick = 'select' | 'check' | 'expand';
export interface TreeState {
treeData?: TreeProps['treeData'];
nodeList?: NodeProps[];
shouldUpdate?: boolean;
selectedKeys?: string[];
checkedKeys?: string[];
expandedKeys?: string[];
loadedKeys?: string[];
loadingKeys?: string[];
halfCheckedKeys?: string[];
currentExpandKeys?: string[];
}
export declare type FieldNamesType = {
key?: string;
title?: string;
disabled?: string;
children?: string;
isLeaf?: string;
disableCheckbox?: string;
checkable?: string;
};
export declare type TreeDataType = NodeProps & {
key?: string;
_index?: number;
children?: TreeDataType[];
[key: string]: any;
};
export declare type AllowDrop = (options: {
dropNode: NodeInstance;
dragNode: NodeInstance | null;
dropPosition: number;
}) => boolean;
/**
* @title Tree
*/
export interface TreeProps {
style?: CSSProperties;
className?: string | string[];
height?: number;
/**
* @zh 不同尺寸
* @en To set size
*/
size?: 'mini' | 'small' | 'default' | 'large';
/**
* @zh 是否节点占据一行
* @en Whether to occupy the remaining horizontal space
*/
blockNode?: boolean;
/**
* @zh 是否自动展开父节点
* @en Whether to automatically expand the parent node
* @defaultValue true
*/
autoExpandParent?: boolean;
/**
* @zh 是否支持多选
* @en Whether to support multiple selection
*/
multiple?: boolean;
/**
* @zh 是否在节点前添加选框
* @en Whether to add a checkbox before the node
*/
checkable?: boolean;
/**
* @zh 是否可拖拽
* @en Whether the node can be dragged
*/
draggable?: boolean;
/**
* @zh 是否开启展开收起的节点动画。
* @en
* @defaultValue true
*/
animation?: boolean;
/**
* @zh 是否允许拖拽时放置在该节点。 (`dragNode` in `2.23.0`)
* @en Whether to allow dropping on node. (`dragNode` in `2.23.0`)
* @defaultValue () => true
* @version 2.7.0
*/
allowDrop?: AllowDrop;
/**
* @zh 是否可以选择
* @en Whether can be selected
* @defaultValue true
*/
selectable?: boolean;
/**
* @zh 是否取消父子节点关联
* @en Whether to cancel the parent-child association
*/
checkStrictly?: boolean;
/**
* @zh
* 定制回填方式 <br/> all: 返回所有选中的节点 <br/> parent: 父子节点都选中时只返回父节点 <br/> child: 只返回子节点
* @en
* Customize the return value <br/> all: Return all selected nodes <br/> parent:
* Only return the parent node when both parent and child nodes are selected <br/> child: Return only child nodes
* @defaultValue all
*/
checkedStrategy?: SHOW_ALL | SHOW_PARENT | SHOW_CHILD;
/**
* @zh 默认选中的树节点
* @en The key of node selected by default
*/
defaultSelectedKeys?: string[];
/**
* @zh 选中的树节点。(受控)
* @en The key of the selected node(controlled)
*/
selectedKeys?: string[];
/**
* @zh 默认选中复选框的树节点
* @en The key of node checked by default
*/
defaultCheckedKeys?: string[];
/**
* @zh 选中复选框的树节点。(受控)
* @en The key of the checked node(controlled)
*/
checkedKeys?: string[];
/**
* @zh 半选状态的节点.仅在 checkable 且 checkStrictly 时生效
* @en the keys of half checked
* @version 2.27.0
*/
halfCheckedKeys?: string[];
/**
* @zh 默认展开的节点。
* @en The key of node expanded by default
*/
defaultExpandedKeys?: string[];
/**
* @zh 展开的节点,(受控)。
* @en The key of the expanded node (controlled)
*/
expandedKeys?: string[];
/**
* @zh 可以通过传入`treeData`,生成对应的树结构
* @en The tree structure can be generated by passing in `treeData`
*/
treeData?: TreeDataType[];
/**
* @zh 指定 key,title,isLeaf,disabled,children 对应的字段
* @en Custom field name for key, title, isLeaf, disabled and children
* @version 2.11.0
*/
fieldNames?: FieldNamesType;
/**
* @zh 定制节点图标
* @en Customize node icon
* @defaultValue FieldNamesType
* @version 2.9.0
*/
icons?: ((nodeProps: NodeProps) => {
dragIcon?: ReactNode;
switcherIcon?: ReactNode;
loadingIcon?: ReactNode;
}) | {
dragIcon?: ReactNode;
switcherIcon?: ReactNode;
loadingIcon?: ReactNode;
};
/**
* @zh 传递虚拟列表属性,传入此参数以开启虚拟滚动
* @en Pass the virtual-list properties, pass in this parameter to turn on virtual scrolling
* @version 2.11.0
*/
virtualListProps?: AvailableVirtualListProps;
/**
* @zh 渲染额外节点
* @en Render additional node
*/
renderExtra?: (props: NodeProps) => ReactNode;
/**
* @zh 自定义 title 的渲染
* @en Customize title rendering
*/
renderTitle?: (props: NodeProps) => ReactNode;
/**
* @zh 是否展示连接线
* @en Whether to display the connection line
*/
showLine?: boolean;
/**
* @zh 点击节点时对应的操作,可以是选中,复选选中,展开/收起
* @en The action when click node
* @version select
*/
actionOnClick?: ActionOnClick | ActionOnClick[];
/**
* @zh 异步加载数据的回调,返回一个 `Promise`。
* @en Callback when loaded data asynchronously, returning a `Promise`.
*/
loadMore?: (node: NodeInstance) => Promise<void>;
/**
* @zh 点击树节点的回调
* @en Callback when selected node
*/
onSelect?: (selectedKeys: string[], extra: {
selected: boolean;
selectedNodes: NodeInstance[];
node: NodeInstance;
e: Event;
}) => void;
/**
* @zh 点击树节点复选框的回调
* @en Callback when checked node
*/
onCheck?: (checkedKeys: string[], extra: {
node: NodeInstance;
checkedNodes: NodeInstance[];
checked: boolean;
halfCheckedKeys: string[];
halfCheckedNodes: NodeInstance[];
e: Event;
}) => void;
/**
* @zh 点击展开/关闭的回调
* @en Callback when expanded or collapsed node
*/
onExpand?: (expandedKeys: string[], exra?: {
expanded: boolean;
node: NodeInstance;
expandedNodes: NodeInstance[];
}) => void;
/**
* @zh 节点开始拖拽的回调
* @en Callback when the node starts dragging
*/
onDragStart?: (e: DragEvent<HTMLSpanElement>, node: NodeInstance) => void;
/**
* @zh 节点结束拖拽的回调
* @en Callback when the node ends drag
*/
onDragEnd?: (e: DragEvent<HTMLSpanElement>, node: NodeInstance) => void;
/**
* @zh 节点被拖拽至可释放目标上时的回调
* @en Callback when the node is dragged onto a valid target
*/
onDragOver?: (e: DragEvent<HTMLSpanElement>, node: NodeInstance) => void;
/**
* @zh 节点离开可释放目标上时的回调
* @en Callback when the node leaves a valid target
*/
onDragLeave?: (e: DragEvent<HTMLSpanElement>, node: NodeInstance) => void;
/**
* @zh 节点在可释放目标上释放时的回调
* @en Callback when the node is dropped on the valid target
*/
onDrop?: (info: {
e: DragEvent<HTMLSpanElement>;
dragNode: NodeInstance | null;
dropNode: NodeInstance | null;
dropPosition: number;
}) => void;
filterNode?: (node: NodeProps) => boolean;
children?: ReactNode;
onMouseDown?: (e: any) => void;
__ArcoAdapterMode__?: boolean;
}
/**
* @title Tree.Node
*/
export interface NodeProps {
style?: CSSProperties;
className?: string | string[];
blockNode?: boolean;
/**
* @zh 该节点显示的标题
* @en Title for node
*/
title?: string | ReactNode;
/**
* @zh 是否允许选中
* @en Whether it can be selected
* @defaultValue true
*/
selectable?: boolean;
/**
* @zh 是否禁用节点
* @en Whether to disable node
*/
disabled?: boolean;
/**
* @zh 是否禁用复选框
* @en Whether to disable check
*/
disableCheckbox?: boolean;
/**
* @zh 该节点个性化显示的图标
* @en Custom icon
*/
icon?: ReactNode;
/**
* @zh 是否显示多选框
* @en Whether to show checkbox
*/
checkable?: boolean;
/**
* @zh 是否是叶子节点。动态加载时有效
* @en Is it a leaf node. Effective when loading dynamically
*/
isLeaf?: boolean;
/**
* @zh 定制节点图标,优先级高于 Tree。同时设置 Tree 上的 icons 属性时候,将会进行合并。
* @en Customize node icons, it have higher priority than Tree. When the icons property on the Tree is set at the same time, will be merged.
*/
icons?: TreeProps['icons'];
/**
* @zh 当前节点是否可拖拽
* @en Whether the current node can be dragged
*/
draggable?: boolean;
showLine?: boolean;
checked?: boolean;
selected?: boolean;
parentKey?: string;
pathParentKeys?: string[];
indeterminated?: boolean;
_key?: string;
_level?: number;
_lineless?: boolean[];
visible?: boolean;
selectedKeys?: string[];
checkedKeys?: string[];
expandedKeys?: string[];
loading?: boolean;
loaded?: boolean;
autoExpandParent?: boolean;
expanded?: boolean;
childrenData?: NodeProps[];
dataRef?: TreeDataType;
loadMore?: (node: NodeProps) => void;
}