UNPKG

tdesign-vue-next

Version:
1 lines 14.3 kB
{"version":3,"file":"useTreeStore.mjs","sources":["../../../../components/tree/hooks/useTreeStore.ts"],"sourcesContent":["import { pick } from 'lodash-es';\nimport { TreeStore } from '@tdesign/common-js/tree/tree-store';\nimport { watch, TypeRef } from '../utils/adapt';\nimport {\n TreeProps,\n TypeValueMode,\n TreeNodeValue,\n TypeEventState,\n TypeTreeNodeModel,\n TypeTreeNode,\n TypeTNodeValue,\n TypeTreeState,\n} from '../types';\n\nexport default function useTreeStore(state: TypeTreeState) {\n const { props, context, refProps } = state;\n const { valueMode, filter, keys } = props;\n\n const store: TreeStore = new TreeStore({\n valueMode: valueMode as TypeValueMode,\n filter,\n });\n\n // tValue 就是 refProps.value\n const tValue = state.vmValue[0] as TypeRef<TreeNodeValue[]>;\n // tActived 就是 refProps.actived\n const tActived = state.vmActived[0] as TypeRef<TypeTNodeValue[]>;\n // tExpanded 就是 refProps.expanded\n const tExpanded = state.vmExpanded[0] as TypeRef<TypeTNodeValue[]>;\n\n // 同步 Store 选项\n const updateStoreConfig = () => {\n // 统一更新选项,然后在 store 统一识别属性更新\n // 注意: keys 属性比较特殊,不应该在实例化之后再次变更\n const storeProps = pick(props, [\n 'expandAll',\n 'expandLevel',\n 'expandMutex',\n 'expandParent',\n 'activable',\n 'activeMultiple',\n 'disabled',\n 'disableCheck',\n 'checkable',\n 'draggable',\n 'checkStrictly',\n 'load',\n 'lazy',\n 'valueMode',\n 'filter',\n 'allowFoldNodeOnFilter',\n ]);\n store.setConfig(storeProps);\n };\n\n const updateExpanded = () => {\n const { expandParent } = props;\n if (!Array.isArray(tExpanded.value)) return;\n // 初始化展开状态\n // 校验是否自动展开父节点\n const expandedMap = new Map();\n tExpanded.value.forEach((val) => {\n expandedMap.set(val, true);\n if (expandParent) {\n const node = store.getNode(val);\n if (node) {\n node\n .getModel()\n .getParents()\n .forEach((tn: TypeTreeNodeModel) => {\n expandedMap.set(tn.value, true);\n });\n }\n }\n });\n const expandedArr = Array.from(expandedMap.keys());\n store.setExpanded(expandedArr);\n };\n\n let filterChanged = false;\n let prevExpanded: null | TypeTNodeValue[] = null;\n\n // store 的 update 方法触发后,可以拿到搜索命中节点的路径节点\n // 所以在 update 之后检查,如果之前 filter 有变更,则检查路径节点是否需要展开\n // 如果 filter 属性被清空,则重置为开启搜索之前的结果\n const expandFilterPath = () => {\n if (!props.allowFoldNodeOnFilter) return;\n if (!filterChanged) return;\n // 确保 filter 属性未变更时,不会重复检查展开状态\n filterChanged = false;\n\n if (props.filter) {\n if (!prevExpanded) {\n // 缓存之前的展开状态\n prevExpanded = store.getExpanded();\n }\n\n // 展开搜索命中节点的路径节点\n const pathValues: TypeTNodeValue[] = [];\n const allNodes: TypeTreeNode[] = store.getNodes();\n allNodes.forEach((node: TypeTreeNode) => {\n if (node.vmIsLocked) {\n pathValues.push(node.value);\n }\n });\n store.setExpanded(pathValues);\n } else if (prevExpanded) {\n // filter 属性置空,该还原之前的展开状态了\n store.replaceExpanded(prevExpanded);\n prevExpanded = null;\n }\n };\n\n // 这个方法监听 filter 属性,仅在 allowFoldNodeOnFilter 属性为 true 时生效\n // 仅在 filter 属性发生变更时开启检查开关,避免其他操作也触发展开状态的重置\n const checkFilterExpand = (newFilter: null | Function, previousFilter: null | Function) => {\n if (!props.allowFoldNodeOnFilter) return;\n filterChanged = newFilter !== previousFilter;\n };\n\n const handleLoad = (info: TypeEventState) => {\n const { node } = info;\n const evtCtx = {\n node: node.getModel(),\n };\n if (Array.isArray(tValue.value) && tValue.value.length > 0) {\n store.replaceChecked(tValue.value);\n }\n if (Array.isArray(tExpanded.value) && tExpanded.value.length > 0) {\n store.replaceExpanded(tExpanded.value);\n }\n if (Array.isArray(tActived.value) && tActived.value.length > 0) {\n store.replaceActived(tActived.value);\n }\n if (props?.onLoad) {\n props?.onLoad(evtCtx);\n }\n context.emit('load', evtCtx);\n };\n\n const rebuild = (list: TreeProps['data']) => {\n store.reload(list || []);\n store.refreshNodes();\n // 初始化选中状态\n if (Array.isArray(tValue.value)) {\n store.setChecked(tValue.value);\n }\n // 更新展开状态\n updateExpanded();\n // 初始化激活状态\n if (Array.isArray(tActived.value)) {\n store.setActived(tActived.value);\n }\n // 刷新节点状态\n store.refreshState();\n };\n\n function initStore() {\n // keys 属性比较特殊,不应该在实例化之后再次变更\n store.setConfig({\n keys,\n });\n updateStoreConfig();\n store.append(props.data || []);\n\n // 刷新节点,必须在配置选中之前执行\n // 这样选中态联动判断才能找到父节点\n store.refreshNodes();\n\n // 初始化选中状态\n if (Array.isArray(tValue.value)) {\n store.setChecked(tValue.value);\n }\n\n // 更新节点展开状态\n updateExpanded();\n\n // 初始化激活状态\n if (Array.isArray(tActived.value)) {\n store.setActived(tActived.value);\n }\n\n store.emitter.on('load', handleLoad);\n store.emitter.on('update', expandFilterPath);\n }\n\n // 初始化 store\n initStore();\n // 设置初始化状态\n state.setStore(store);\n // 配置属性监听\n watch(\n () => [...(tValue.value || [])],\n (nVal: TreeNodeValue[]) => {\n store.replaceChecked(nVal);\n },\n );\n watch(\n () => [...(tExpanded.value || [])],\n (nVal: TreeNodeValue[]) => {\n store.replaceExpanded(nVal);\n },\n );\n watch(\n () => [...(tActived.value || [])],\n (nVal: TreeNodeValue[]) => {\n store.replaceActived(nVal);\n },\n );\n\n watch(refProps.filter, (nVal, previousVal) => {\n checkFilterExpand(nVal, previousVal);\n });\n watch(refProps.keys, (keys) => {\n store.setConfig({\n keys,\n });\n });\n\n watch(refProps.expandAll, (nVal) => {\n if (nVal) {\n const valueList = store\n .getNodes()\n .filter((node) => Array.isArray(node.children) && node.children.length)\n .map((node) => node.value);\n store.setExpanded(valueList);\n } else {\n store.replaceExpanded(prevExpanded);\n prevExpanded = null;\n }\n });\n\n return {\n store,\n rebuild,\n checkFilterExpand,\n updateStoreConfig,\n updateExpanded,\n expandFilterPath,\n };\n}\n"],"names":["useTreeStore","state","props","context","refProps","valueMode","filter","keys","store","TreeStore","tValue","vmValue","tActived","vmActived","tExpanded","vmExpanded","updateStoreConfig","storeProps","pick","setConfig","updateExpanded","expandParent","Array","isArray","value","expandedMap","Map","forEach","val","set","node","getNode","getModel","getParents","tn","expandedArr","from","setExpanded","filterChanged","prevExpanded","expandFilterPath","allowFoldNodeOnFilter","getExpanded","pathValues","allNodes","getNodes","vmIsLocked","push","replaceExpanded","checkFilterExpand","newFilter","previousFilter","handleLoad","info","evtCtx","length","replaceChecked","replaceActived","onLoad","emit","rebuild","list","reload","refreshNodes","setChecked","setActived","refreshState","initStore","append","data","emitter","on","setStore","watch","_toConsumableArray","nVal","previousVal","expandAll","valueList","children","map"],"mappings":"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"}