{"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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"}