123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- import * as React from 'react';
- import type { NodeDragEventHandler, NodeDragEventParams, NodeMouseEventHandler, NodeMouseEventParams } from './contextTypes';
- import type { DropIndicatorProps } from './DropIndicator';
- import type { BasicDataNode, DataNode, Direction, EventDataNode, FieldNames, FlattenNode, IconType, Key, KeyEntities, SafeKey, ScrollTo, TreeNodeProps } from './interface';
- import { type NodeListRef } from './NodeList';
- export interface CheckInfo<TreeDataType extends BasicDataNode = DataNode> {
- event: 'check';
- node: EventDataNode<TreeDataType>;
- checked: boolean;
- nativeEvent: MouseEvent;
- checkedNodes: TreeDataType[];
- checkedNodesPositions?: {
- node: TreeDataType;
- pos: string;
- }[];
- halfCheckedKeys?: Key[];
- }
- export interface AllowDropOptions<TreeDataType extends BasicDataNode = DataNode> {
- dragNode: TreeDataType;
- dropNode: TreeDataType;
- dropPosition: -1 | 0 | 1;
- }
- export type AllowDrop<TreeDataType extends BasicDataNode = DataNode> = (options: AllowDropOptions<TreeDataType>) => boolean;
- export type DraggableFn = (node: DataNode) => boolean;
- export type DraggableConfig = {
- icon?: React.ReactNode | false;
- nodeDraggable?: DraggableFn;
- };
- export type ExpandAction = false | 'click' | 'doubleClick';
- export interface TreeProps<TreeDataType extends BasicDataNode = DataNode> {
- prefixCls: string;
- className?: string;
- style?: React.CSSProperties;
- focusable?: boolean;
- activeKey?: Key | null;
- tabIndex?: number;
- children?: React.ReactNode;
- treeData?: TreeDataType[];
- fieldNames?: FieldNames;
- showLine?: boolean;
- showIcon?: boolean;
- icon?: IconType;
- selectable?: boolean;
- expandAction?: ExpandAction;
- disabled?: boolean;
- multiple?: boolean;
- checkable?: boolean | React.ReactNode;
- checkStrictly?: boolean;
- draggable?: DraggableFn | boolean | DraggableConfig;
- defaultExpandParent?: boolean;
- autoExpandParent?: boolean;
- defaultExpandAll?: boolean;
- defaultExpandedKeys?: Key[];
- expandedKeys?: Key[];
- defaultCheckedKeys?: Key[];
- checkedKeys?: Key[] | {
- checked: Key[];
- halfChecked: Key[];
- };
- defaultSelectedKeys?: Key[];
- selectedKeys?: Key[];
- allowDrop?: AllowDrop<TreeDataType>;
- titleRender?: (node: TreeDataType) => React.ReactNode;
- dropIndicatorRender?: (props: DropIndicatorProps) => React.ReactNode;
- onFocus?: React.FocusEventHandler<HTMLDivElement>;
- onBlur?: React.FocusEventHandler<HTMLDivElement>;
- onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
- onContextMenu?: React.MouseEventHandler<HTMLDivElement>;
- onClick?: NodeMouseEventHandler<TreeDataType>;
- onDoubleClick?: NodeMouseEventHandler<TreeDataType>;
- onScroll?: React.UIEventHandler<HTMLElement>;
- onExpand?: (expandedKeys: Key[], info: {
- node: EventDataNode<TreeDataType>;
- expanded: boolean;
- nativeEvent: MouseEvent;
- }) => void;
- onCheck?: (checked: {
- checked: Key[];
- halfChecked: Key[];
- } | Key[], info: CheckInfo<TreeDataType>) => void;
- onSelect?: (selectedKeys: Key[], info: {
- event: 'select';
- selected: boolean;
- node: EventDataNode<TreeDataType>;
- selectedNodes: TreeDataType[];
- nativeEvent: MouseEvent;
- }) => void;
- onLoad?: (loadedKeys: Key[], info: {
- event: 'load';
- node: EventDataNode<TreeDataType>;
- }) => void;
- loadData?: (treeNode: EventDataNode<TreeDataType>) => Promise<any>;
- loadedKeys?: Key[];
- onMouseEnter?: (info: NodeMouseEventParams<TreeDataType>) => void;
- onMouseLeave?: (info: NodeMouseEventParams<TreeDataType>) => void;
- onRightClick?: (info: {
- event: React.MouseEvent;
- node: EventDataNode<TreeDataType>;
- }) => void;
- onDragStart?: (info: NodeDragEventParams<TreeDataType>) => void;
- onDragEnter?: (info: NodeDragEventParams<TreeDataType> & {
- expandedKeys: Key[];
- }) => void;
- onDragOver?: (info: NodeDragEventParams<TreeDataType>) => void;
- onDragLeave?: (info: NodeDragEventParams<TreeDataType>) => void;
- onDragEnd?: (info: NodeDragEventParams<TreeDataType>) => void;
- onDrop?: (info: NodeDragEventParams<TreeDataType> & {
- dragNode: EventDataNode<TreeDataType>;
- dragNodesKeys: Key[];
- dropPosition: number;
- dropToGap: boolean;
- }) => void;
- /**
- * Used for `rc-tree-select` only.
- * Do not use in your production code directly since this will be refactor.
- */
- onActiveChange?: (key: Key) => void;
- filterTreeNode?: (treeNode: EventDataNode<TreeDataType>) => boolean;
- motion?: any;
- switcherIcon?: IconType;
- height?: number;
- itemHeight?: number;
- scrollWidth?: number;
- itemScrollOffset?: number;
- virtual?: boolean;
- direction?: Direction;
- rootClassName?: string;
- rootStyle?: React.CSSProperties;
- }
- interface TreeState<TreeDataType extends BasicDataNode = DataNode> {
- keyEntities: KeyEntities<TreeDataType>;
- indent: number | null;
- selectedKeys: Key[];
- checkedKeys: Key[];
- halfCheckedKeys: Key[];
- loadedKeys: Key[];
- loadingKeys: Key[];
- expandedKeys: Key[];
- draggingNodeKey: Key;
- dragChildrenKeys: Key[];
- dropPosition: -1 | 0 | 1 | null;
- dropLevelOffset: number | null;
- dropContainerKey: Key | null;
- dropTargetKey: Key | null;
- dropTargetPos: string | null;
- dropAllowed: boolean;
- dragOverNodeKey: Key | null;
- treeData: TreeDataType[];
- flattenNodes: FlattenNode<TreeDataType>[];
- focused: boolean;
- activeKey: Key | null;
- listChanging: boolean;
- prevProps: TreeProps;
- fieldNames: FieldNames;
- }
- declare class Tree<TreeDataType extends DataNode | BasicDataNode = DataNode> extends React.Component<TreeProps<TreeDataType>, TreeState<TreeDataType>> {
- static defaultProps: {
- prefixCls: string;
- showLine: boolean;
- showIcon: boolean;
- selectable: boolean;
- multiple: boolean;
- checkable: boolean;
- disabled: boolean;
- checkStrictly: boolean;
- draggable: boolean;
- defaultExpandParent: boolean;
- autoExpandParent: boolean;
- defaultExpandAll: boolean;
- defaultExpandedKeys: any[];
- defaultCheckedKeys: any[];
- defaultSelectedKeys: any[];
- dropIndicatorRender: React.FC<Readonly<DropIndicatorProps>>;
- allowDrop: () => boolean;
- expandAction: boolean;
- };
- static TreeNode: React.FC<Readonly<TreeNodeProps<DataNode>>>;
- destroyed: boolean;
- delayedDragEnterLogic: Record<SafeKey, number>;
- loadingRetryTimes: Record<SafeKey, number>;
- state: TreeState<TreeDataType>;
- dragStartMousePosition: any;
- dragNodeProps: TreeNodeProps<TreeDataType>;
- currentMouseOverDroppableNodeKey: any;
- listRef: React.RefObject<NodeListRef>;
- componentDidMount(): void;
- componentDidUpdate(): void;
- onUpdated(): void;
- componentWillUnmount(): void;
- static getDerivedStateFromProps(props: TreeProps, prevState: TreeState): Partial<TreeState<DataNode>>;
- onNodeDragStart: NodeDragEventHandler<TreeDataType, HTMLDivElement>;
- /**
- * [Legacy] Select handler is smaller than node,
- * so that this will trigger when drag enter node or select handler.
- * This is a little tricky if customize css without padding.
- * Better for use mouse move event to refresh drag state.
- * But let's just keep it to avoid event trigger logic change.
- */
- onNodeDragEnter: (event: React.DragEvent<HTMLDivElement>, nodeProps: TreeNodeProps<TreeDataType>) => void;
- onNodeDragOver: (event: React.DragEvent<HTMLDivElement>, nodeProps: TreeNodeProps<TreeDataType>) => void;
- onNodeDragLeave: NodeDragEventHandler<TreeDataType>;
- onWindowDragEnd: (event: any) => void;
- onNodeDragEnd: NodeDragEventHandler<TreeDataType>;
- onNodeDrop: (event: React.DragEvent<HTMLDivElement>, _: TreeNodeProps<TreeDataType>, outsideTree?: boolean) => void;
- resetDragState(): void;
- cleanDragState: () => void;
- triggerExpandActionExpand: NodeMouseEventHandler;
- onNodeClick: NodeMouseEventHandler<TreeDataType>;
- onNodeDoubleClick: NodeMouseEventHandler<TreeDataType>;
- onNodeSelect: NodeMouseEventHandler<TreeDataType>;
- onNodeCheck: (e: React.MouseEvent<HTMLSpanElement>, treeNode: EventDataNode<TreeDataType>, checked: boolean) => void;
- onNodeLoad: (treeNode: EventDataNode<TreeDataType>) => Promise<void>;
- onNodeMouseEnter: NodeMouseEventHandler<TreeDataType>;
- onNodeMouseLeave: NodeMouseEventHandler<TreeDataType>;
- onNodeContextMenu: NodeMouseEventHandler<TreeDataType>;
- onFocus: React.FocusEventHandler<HTMLDivElement>;
- onBlur: React.FocusEventHandler<HTMLDivElement>;
- getTreeNodeRequiredProps: () => {
- expandedKeys: React.Key[];
- selectedKeys: React.Key[];
- loadedKeys: React.Key[];
- loadingKeys: React.Key[];
- checkedKeys: React.Key[];
- halfCheckedKeys: React.Key[];
- dragOverNodeKey: React.Key;
- dropPosition: 0 | 1 | -1;
- keyEntities: KeyEntities<TreeDataType>;
- };
- /** Set uncontrolled `expandedKeys`. This will also auto update `flattenNodes`. */
- setExpandedKeys: (expandedKeys: Key[]) => void;
- onNodeExpand: (e: React.MouseEvent<HTMLDivElement>, treeNode: EventDataNode<TreeDataType>) => void;
- onListChangeStart: () => void;
- onListChangeEnd: () => void;
- onActiveChange: (newActiveKey: Key | null) => void;
- getActiveItem: () => FlattenNode<TreeDataType>;
- offsetActiveKey: (offset: number) => void;
- onKeyDown: React.KeyboardEventHandler<HTMLDivElement>;
- /**
- * Only update the value which is not in props
- */
- setUncontrolledState: (state: Partial<TreeState<TreeDataType>>, atomic?: boolean, forceState?: Partial<TreeState<TreeDataType>> | null) => void;
- scrollTo: ScrollTo;
- render(): React.JSX.Element;
- }
- export default Tree;
|