element-plus
Version:
A Component Library for Vue 3
59 lines (58 loc) • 2.04 kB
TypeScript
import type { ComponentInternalInstance, ExtractPropTypes, ExtractPublicPropTypes, SetupContext } from 'vue';
import type { treeEmits, treeProps } from './virtual-tree';
export type TreeNodeData = Record<string, any>;
export type TreeData = TreeNodeData[];
export type TreeKey = string | number;
export interface TreeOptionProps {
children?: string;
label?: string;
value?: string;
disabled?: string;
class?: (data: TreeNodeData, node: TreeNode) => string | {
[key: string]: boolean;
};
}
export type TreeProps = ExtractPropTypes<typeof treeProps>;
export type TreePropsPublic = ExtractPublicPropTypes<typeof treeProps>;
export interface TreeNode {
key: TreeKey;
level: number;
parent?: TreeNode;
children?: TreeNode[];
data: TreeNodeData;
disabled?: boolean;
label?: string;
isLeaf?: boolean;
expanded?: boolean;
/**
* Determines whether the current tree node is effectively checked.
*
* Rules:
* 1. A disabled leaf node is always considered checked.
* 2. A non-disabled leaf node reflects its actual checked state.
* 3. A non-leaf node is considered checked only when:
* - All of its child nodes are effectively checked, and
* - Each child follows the same evaluation rules:
* - Disabled leaf nodes follow rule #1.
* - Non-leaf child nodes are recursively evaluated under this rule (#3).
*/
isEffectivelyChecked?: boolean;
}
export interface TreeContext {
ctx: Omit<SetupContext<typeof treeEmits>, 'expose' | 'attrs'>;
instance: ComponentInternalInstance;
props: TreeProps;
}
export interface Tree {
treeNodeMap: Map<TreeKey, TreeNode>;
levelTreeNodeMap: Map<number, TreeNode[]>;
treeNodes: TreeNode[];
maxLevel: number;
}
export type FilterMethod = (query: string, data: TreeNodeData, node: TreeNode) => boolean;
export interface CheckedInfo {
checkedKeys: TreeKey[];
checkedNodes: TreeData;
halfCheckedKeys: TreeKey[];
halfCheckedNodes: TreeData;
}