tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 9.69 kB
Source Map (JSON)
{"version":3,"file":"v-menu.mjs","sources":["../../../../components/menu/utils/v-menu.ts"],"sourcesContent":["import { ref, Slot } from 'vue';\nimport type { TdMenuItemProps } from '../type';\ntype MenuValue = string | number;\ntype MenuNode = MenuValue | VMenuData;\n\ninterface VMenuData {\n value: MenuValue;\n parent?: MenuNode;\n children: VMenuData[];\n vnode?: Slot;\n}\n\ninterface VMenuItem extends TdMenuItemProps {\n value?: MenuValue;\n parent: MenuValue;\n vnode?: Slot;\n}\n\nconst getTreePaths = (node: VMenuData, val: MenuValue, ans: MenuValue[]): MenuValue[] => {\n if (!node) return;\n for (let i = 0; i < node.children.length; ++i) {\n const child = node.children[i];\n if (child.value === val) return [...ans, node.value];\n const target = getTreePaths(child, val, [...ans, node.value]);\n if (target) return target;\n }\n};\n\nconst getTreeSameParentNodes = (node: VMenuData, val: MenuValue): VMenuData[] => {\n if (!node) return [];\n for (let i = 0; i < node.children.length; ++i) {\n const child = node.children[i];\n if (child.value === val) return node.children;\n const target = getTreeSameParentNodes(child, val);\n if (target) return target;\n }\n};\n\nconst DFS = (root: VMenuData, val: MenuValue): VMenuData => {\n if (root.value === val) return root;\n if (root.children.length > 0) {\n for (let i = 0, len = root.children.length; i < len; i++) {\n const res = DFS(root.children[i], val);\n if (res) return res;\n }\n }\n};\n\nexport class VMenu {\n data: VMenuData = null;\n\n cache: Set<VMenuData> = new Set();\n\n isMutex = ref(false);\n\n expandValues: Set<MenuValue> = null;\n\n constructor(options: Record<string, any>) {\n const root: VMenuData = {\n value: null,\n parent: null,\n children: [],\n };\n this.data = root;\n this.isMutex = options?.isMutex;\n this.expandValues = new Set(options?.expandValues);\n }\n\n add(item: VMenuItem) {\n const { value, parent, vnode } = item;\n const node: VMenuData = {\n value,\n parent,\n children: [],\n vnode,\n ...item,\n };\n\n this.cache.forEach((data, v2, set) => {\n if (item.value === data.parent) {\n node.children.push(data);\n set.delete(data);\n }\n });\n if (item.parent == null) {\n this.data.children.push(node);\n node.parent = this.data;\n } else if (this.data.children.length > 0) {\n const pNode = DFS(this.data, parent);\n if (pNode && !pNode.children.some((child) => child.value === node.value)) {\n pNode.children.push(node);\n } else {\n this.cache.add(node);\n }\n } else {\n this.cache.add(node);\n }\n }\n\n select(val: MenuValue) {\n const activeValues = getTreePaths(this.data, val, []) || [];\n\n activeValues.push(val);\n return activeValues.filter((val) => val != null);\n }\n\n expand(val: MenuValue) {\n if (this.expandValues.has(val)) {\n this.expandValues.delete(val);\n return [...this.expandValues];\n }\n\n this.expandValues.add(val);\n\n if (!this.isMutex.value) {\n return [...this.expandValues];\n }\n\n const sameParentNodes = getTreeSameParentNodes(this.data, val) || [];\n const sameLevelSubmenuValues = new Set(\n sameParentNodes.filter((node) => node.children?.length > 0 && node.value !== val).map((child) => child.value),\n );\n\n this.expandValues.forEach((val) => {\n const isHit = sameLevelSubmenuValues.has(val);\n if (isHit) {\n this.expandValues.delete(val);\n }\n });\n return [...this.expandValues];\n }\n\n getChild(value: MenuValue) {\n const target = DFS(this.data, value);\n\n return target ? target.children : [];\n }\n}\n"],"names":["getTreePaths","node","val","ans","i","children","length","child","value","concat","_toConsumableArray","target","getTreeSameParentNodes","DFS","root","len","res","VMenu","options","_classCallCheck","_defineProperty","Set","ref","parent","data","isMutex","expandValues","_createClass","key","add","item","vnode","_objectSpread","cache","forEach","v2","set","push","pNode","some","select","activeValues","filter","expand","_this","has","sameParentNodes","sameLevelSubmenuValues","_node$children","map","isHit","getChild"],"mappings":"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"}