import type { ExtractPropTypes, PropType } from 'vue'; import type { EventHandler } from '../_util/EventInterface'; import PropTypes from '../_util/vue-types'; import type { NodeDragEventParams, NodeMouseEventHandler, NodeMouseEventParams, } from './contextTypes'; import type { DataNode, Key, FlattenNode, DataEntity, EventDataNode, Direction, FieldNames, } from './interface'; export interface CheckInfo { event: 'check'; node: EventDataNode; checked: boolean; nativeEvent: MouseEvent; checkedNodes: DataNode[]; checkedNodesPositions?: { node: DataNode; pos: string }[]; halfCheckedKeys?: Key[]; } export const treeNodeProps = { eventKey: [String, Number], // Pass by parent `cloneElement` prefixCls: String, // By parent expanded: { type: Boolean, default: undefined }, selected: { type: Boolean, default: undefined }, checked: { type: Boolean, default: undefined }, loaded: { type: Boolean, default: undefined }, loading: { type: Boolean, default: undefined }, halfChecked: { type: Boolean, default: undefined }, title: PropTypes.any, dragOver: { type: Boolean, default: undefined }, dragOverGapTop: { type: Boolean, default: undefined }, dragOverGapBottom: { type: Boolean, default: undefined }, pos: String, /** New added in Tree for easy data access */ data: { type: Object as PropType, default: undefined as DataNode }, parent: { type: Object as PropType, default: undefined as DataNode }, isStart: { type: Array as PropType }, isEnd: { type: Array as PropType }, active: { type: Boolean, default: undefined }, onMousemove: { type: Function as PropType }, // By user isLeaf: { type: Boolean, default: undefined }, checkable: { type: Boolean, default: undefined }, selectable: { type: Boolean, default: undefined }, disabled: { type: Boolean, default: undefined }, disableCheckbox: { type: Boolean, default: undefined }, icon: PropTypes.any, switcherIcon: PropTypes.any, domRef: { type: Function as PropType<(arg: any) => void> }, }; export type TreeNodeProps = Partial>; export const nodeListProps = { prefixCls: { type: String as PropType }, data: { type: Array as PropType }, motion: { type: Object as PropType }, focusable: { type: Boolean as PropType }, activeItem: { type: Object as PropType }, focused: { type: Boolean as PropType }, tabindex: { type: Number as PropType }, checkable: { type: Boolean as PropType }, selectable: { type: Boolean as PropType }, disabled: { type: Boolean as PropType }, expandedKeys: { type: Array as PropType }, selectedKeys: { type: Array as PropType }, checkedKeys: { type: Array as PropType }, loadedKeys: { type: Array as PropType }, loadingKeys: { type: Array as PropType }, halfCheckedKeys: { type: Array as PropType }, keyEntities: { type: Object as PropType> }, dragging: { type: Boolean as PropType }, dragOverNodeKey: { type: [String, Number] as PropType }, dropPosition: { type: Number as PropType }, // Virtual list height: { type: Number as PropType }, itemHeight: { type: Number as PropType }, virtual: { type: Boolean as PropType }, onKeydown: { type: Function as PropType }, onFocus: { type: Function as PropType<(e: FocusEvent) => void> }, onBlur: { type: Function as PropType<(e: FocusEvent) => void> }, onActiveChange: { type: Function as PropType<(key: Key) => void> }, onContextmenu: { type: Function as PropType }, onListChangeStart: { type: Function as PropType<() => void> }, onListChangeEnd: { type: Function as PropType<() => void> }, }; export type NodeListProps = Partial>; export type AllowDrop = (options: { dropNode: DataNode; dropPosition: -1 | 0 | 1 }) => boolean; export const treeProps = () => ({ prefixCls: String, focusable: { type: Boolean, default: undefined }, tabindex: Number, children: PropTypes.VNodeChild, treeData: { type: Array as PropType }, // Generate treeNode by children fieldNames: { type: Object as PropType }, showLine: { type: Boolean, default: undefined }, showIcon: { type: Boolean, default: undefined }, icon: PropTypes.any, selectable: { type: Boolean, default: undefined }, disabled: { type: Boolean, default: undefined }, multiple: { type: Boolean, default: undefined }, checkable: { type: Boolean, default: undefined }, checkStrictly: { type: Boolean, default: undefined }, draggable: { type: [Function, Boolean] as PropType<((node: DataNode) => boolean) | boolean> }, defaultExpandParent: { type: Boolean, default: undefined }, autoExpandParent: { type: Boolean, default: undefined }, defaultExpandAll: { type: Boolean, default: undefined }, defaultExpandedKeys: { type: Array as PropType }, expandedKeys: { type: Array as PropType }, defaultCheckedKeys: { type: Array as PropType }, checkedKeys: { type: [Object, Array] as PropType, }, defaultSelectedKeys: { type: Array as PropType }, selectedKeys: { type: Array as PropType }, allowDrop: { type: Function as PropType }, dropIndicatorRender: { type: Function as PropType< (props: { dropPosition: -1 | 0 | 1; dropLevelOffset: number; indent: number; prefixCls: string; direction: Direction; }) => any >, }, onFocus: { type: Function as PropType<(e: FocusEvent) => void> }, onBlur: { type: Function as PropType<(e: FocusEvent) => void> }, onKeydown: { type: Function as PropType }, onContextmenu: { type: Function as PropType }, onClick: { type: Function as PropType }, onDblclick: { type: Function as PropType }, onScroll: { type: Function as PropType }, onExpand: { type: Function as PropType< ( expandedKeys: Key[], info: { node: EventDataNode; expanded: boolean; nativeEvent: MouseEvent; }, ) => void >, }, onCheck: { type: Function as PropType< (checked: { checked: Key[]; halfChecked: Key[] } | Key[], info: CheckInfo) => void >, }, onSelect: { type: Function as PropType< ( selectedKeys: Key[], info: { event: 'select'; selected: boolean; node: EventDataNode; selectedNodes: DataNode[]; nativeEvent: MouseEvent; }, ) => void >, }, onLoad: { type: Function as PropType< ( loadedKeys: Key[], info: { event: 'load'; node: EventDataNode; }, ) => void >, }, loadData: { type: Function as PropType<(treeNode: EventDataNode) => Promise> }, loadedKeys: { type: Array as PropType }, onMouseenter: { type: Function as PropType<(info: NodeMouseEventParams) => void> }, onMouseleave: { type: Function as PropType<(info: NodeMouseEventParams) => void> }, onRightClick: { type: Function as PropType<(info: { event: MouseEvent; node: EventDataNode }) => void>, }, onDragstart: { type: Function as PropType<(info: NodeDragEventParams) => void> }, onDragenter: { type: Function as PropType<(info: NodeDragEventParams & { expandedKeys: Key[] }) => void>, }, onDragover: { type: Function as PropType<(info: NodeDragEventParams) => void> }, onDragleave: { type: Function as PropType<(info: NodeDragEventParams) => void> }, onDragend: { type: Function as PropType<(info: NodeDragEventParams) => void> }, onDrop: { type: Function as PropType< ( info: NodeDragEventParams & { dragNode: EventDataNode; 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: { type: Function as PropType<(key: Key) => void> }, filterTreeNode: { type: Function as PropType<(treeNode: EventDataNode) => boolean> }, motion: PropTypes.any, switcherIcon: PropTypes.any, // Virtual List height: Number, itemHeight: Number, virtual: { type: Boolean, default: undefined }, // direction for drag logic direction: { type: String as PropType }, }); export type TreeProps = Partial>>;