{"version":3,"file":"tree-store.mjs","sources":["../../../../../../../../packages/components/tree/src/model/tree-store.ts"],"sourcesContent":["import { nextTick } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport { NOOP, hasOwn, isObject, isPropAbsent } from '@hd-front-end/utils'\nimport Node from './node'\nimport { getNodeKey } from './util'\n\nimport type {\n  FilterNodeMethodFunction,\n  FilterValue,\n  LoadFunction,\n  TreeData,\n  TreeKey,\n  TreeNodeData,\n  TreeOptionProps,\n  TreeStoreNodesMap,\n  TreeStoreOptions,\n} from '../tree.type'\n\nexport default class TreeStore {\n  currentNode: Node | null\n  currentNodeKey: TreeKey | null\n  nodesMap: TreeStoreNodesMap\n  root!: Node\n  data!: TreeData\n  lazy = false\n  load?: LoadFunction\n  filterNodeMethod?: FilterNodeMethodFunction\n  key!: TreeKey\n  defaultCheckedKeys?: TreeKey[]\n  checkStrictly = false\n  defaultExpandedKeys?: TreeKey[]\n  autoExpandParent = false\n  defaultExpandAll = false\n  checkDescendants = false\n  props!: TreeOptionProps\n\n  constructor(options: TreeStoreOptions) {\n    this.currentNode = null\n    this.currentNodeKey = null\n\n    for (const option in options) {\n      if (hasOwn(options, option)) {\n        this[option] = options[option]\n      }\n    }\n\n    this.nodesMap = {}\n  }\n\n  initialize() {\n    this.root = new Node({\n      data: this.data,\n      store: this,\n    })\n    this.root.initialize()\n\n    if (this.lazy && this.load) {\n      const loadFn = this.load\n      loadFn(\n        this.root,\n        (data) => {\n          this.root.doCreateChildren(data)\n          this._initDefaultCheckedNodes()\n        },\n        NOOP\n      )\n    } else {\n      this._initDefaultCheckedNodes()\n    }\n  }\n\n  filter(value: FilterValue): void {\n    const filterNodeMethod = this.filterNodeMethod\n    const lazy = this.lazy\n    const traverse = async function (node: TreeStore | Node) {\n      const childNodes = (node as TreeStore).root\n        ? (node as TreeStore).root.childNodes\n        : (node as Node).childNodes\n\n      for (const [index, child] of childNodes.entries()) {\n        child.visible = !!filterNodeMethod?.call(\n          child,\n          value,\n          child.data,\n          child\n        )\n\n        if (index % 80 === 0 && index > 0) {\n          await nextTick()\n        }\n        await traverse(child)\n      }\n\n      if (!(node as Node).visible && childNodes.length) {\n        let allHidden = true\n        allHidden = !childNodes.some((child) => child.visible)\n\n        if ((node as TreeStore).root) {\n          ;(node as TreeStore).root.visible = allHidden === false\n        } else {\n          ;(node as Node).visible = allHidden === false\n        }\n      }\n      if (!value) return\n\n      if ((node as Node).visible && !(node as Node).isLeaf) {\n        if (!lazy || (node as Node).loaded) {\n          ;(node as Node).expand()\n        }\n      }\n    }\n\n    traverse(this)\n  }\n\n  setData(newVal: TreeData): void {\n    const instanceChanged = newVal !== this.root.data\n    if (instanceChanged) {\n      this.nodesMap = {}\n      this.root.setData(newVal)\n      this._initDefaultCheckedNodes()\n      this.setCurrentNodeKey(this.currentNodeKey)\n    } else {\n      this.root.updateChildren()\n    }\n  }\n\n  getNode(data: TreeKey | TreeNodeData | Node): Node {\n    if (data instanceof Node) return data\n    const key = isObject(data) ? getNodeKey(this.key, data) : data\n    return this.nodesMap[key] || null\n  }\n\n  insertBefore(\n    data: TreeNodeData,\n    refData: TreeKey | TreeNodeData | Node\n  ): void {\n    const refNode = this.getNode(refData)\n    refNode.parent?.insertBefore({ data }, refNode)\n  }\n\n  insertAfter(\n    data: TreeNodeData,\n    refData: TreeKey | TreeNodeData | Node\n  ): void {\n    const refNode = this.getNode(refData)\n    refNode.parent?.insertAfter({ data }, refNode)\n  }\n\n  remove(data: TreeNodeData | Node): void {\n    const node = this.getNode(data)\n\n    if (node && node.parent) {\n      if (node === this.currentNode) {\n        this.currentNode = null\n      }\n      node.parent.removeChild(node)\n    }\n  }\n\n  append(data: TreeNodeData, parentData: TreeNodeData | TreeKey | Node): void {\n    const parentNode = !isPropAbsent(parentData)\n      ? this.getNode(parentData)\n      : this.root\n\n    if (parentNode) {\n      parentNode.insertChild({ data })\n    }\n  }\n\n  _initDefaultCheckedNodes(): void {\n    const defaultCheckedKeys = this.defaultCheckedKeys || []\n    const nodesMap = this.nodesMap\n\n    defaultCheckedKeys.forEach((checkedKey) => {\n      const node = nodesMap[checkedKey]\n\n      if (node) {\n        node.setChecked(true, !this.checkStrictly)\n      }\n    })\n  }\n\n  _initDefaultCheckedNode(node: Node): void {\n    const defaultCheckedKeys = this.defaultCheckedKeys || []\n\n    if (!isNil(node.key) && defaultCheckedKeys.includes(node.key)) {\n      node.setChecked(true, !this.checkStrictly)\n    }\n  }\n\n  setDefaultCheckedKey(newVal: TreeKey[]): void {\n    if (newVal !== this.defaultCheckedKeys) {\n      this.defaultCheckedKeys = newVal\n      this._initDefaultCheckedNodes()\n    }\n  }\n\n  registerNode(node: Node): void {\n    const key = this.key\n    if (!node || !node.data) return\n\n    if (!key) {\n      this.nodesMap[node.id] = node\n    } else {\n      const nodeKey = node.key\n      if (!isNil(nodeKey)) this.nodesMap[nodeKey] = node\n    }\n  }\n\n  deregisterNode(node: Node): void {\n    const key = this.key\n    if (!key || !node || !node.data) return\n\n    node.childNodes.forEach((child) => {\n      this.deregisterNode(child)\n    })\n\n    delete this.nodesMap[node.key!]\n  }\n\n  getCheckedNodes(\n    leafOnly = false,\n    includeHalfChecked = false\n  ): TreeNodeData[] {\n    const checkedNodes: TreeNodeData[] = []\n    const traverse = function (node: TreeStore | Node) {\n      const childNodes = (node as TreeStore).root\n        ? (node as TreeStore).root.childNodes\n        : (node as Node).childNodes\n\n      childNodes.forEach((child) => {\n        if (\n          (child.checked || (includeHalfChecked && child.indeterminate)) &&\n          (!leafOnly || (leafOnly && child.isLeaf))\n        ) {\n          checkedNodes.push(child.data)\n        }\n\n        traverse(child)\n      })\n    }\n\n    traverse(this)\n\n    return checkedNodes\n  }\n\n  getCheckedKeys(leafOnly = false): TreeKey[] {\n    return this.getCheckedNodes(leafOnly).map((data) => (data || {})[this.key])\n  }\n\n  getHalfCheckedNodes(): TreeNodeData[] {\n    const nodes: TreeNodeData[] = []\n    const traverse = function (node: TreeStore | Node) {\n      const childNodes = (node as TreeStore).root\n        ? (node as TreeStore).root.childNodes\n        : (node as Node).childNodes\n\n      childNodes.forEach((child) => {\n        if (child.indeterminate) {\n          nodes.push(child.data)\n        }\n\n        traverse(child)\n      })\n    }\n\n    traverse(this)\n\n    return nodes\n  }\n\n  getHalfCheckedKeys(): TreeKey[] {\n    return this.getHalfCheckedNodes().map((data) => (data || {})[this.key])\n  }\n\n  _getAllNodes(): Node[] {\n    const allNodes: Node[] = []\n    const nodesMap = this.nodesMap\n    for (const nodeKey in nodesMap) {\n      if (hasOwn(nodesMap, nodeKey)) {\n        allNodes.push(nodesMap[nodeKey])\n      }\n    }\n\n    return allNodes\n  }\n\n  updateChildren(key: TreeKey, data: TreeData): void {\n    const node = this.nodesMap[key]\n    if (!node) return\n    const childNodes = node.childNodes\n    for (let i = childNodes.length - 1; i >= 0; i--) {\n      const child = childNodes[i]\n      this.remove(child.data)\n    }\n    for (let i = 0, j = data.length; i < j; i++) {\n      const child = data[i]\n      this.append(child, node.data)\n    }\n  }\n\n  _setCheckedKeys(\n    key: TreeKey,\n    leafOnly = false,\n    checkedKeys: { [key: string]: boolean }\n  ) {\n    const allNodes = this._getAllNodes().sort((a, b) => a.level - b.level)\n    const cache: Record<TreeKey, boolean> = Object.create(null)\n    const keys = Object.keys(checkedKeys)\n    allNodes.forEach((node) => node.setChecked(false, false))\n    const cacheCheckedChild = (node: Node) => {\n      node.childNodes.forEach((child) => {\n        cache[child.data[key]] = true\n        if (child.childNodes?.length) {\n          cacheCheckedChild(child)\n        }\n      })\n    }\n    for (let i = 0, j = allNodes.length; i < j; i++) {\n      const node = allNodes[i]\n      const nodeKey: string = node.data[key].toString()\n      const checked = keys.includes(nodeKey)\n      if (!checked) {\n        if (node.checked && !cache[nodeKey]) {\n          node.setChecked(false, false)\n        }\n        continue\n      }\n\n      if (node.childNodes.length) {\n        cacheCheckedChild(node)\n      }\n\n      if (node.isLeaf || this.checkStrictly) {\n        node.setChecked(true, false)\n        continue\n      }\n      node.setChecked(true, true)\n\n      if (leafOnly) {\n        node.setChecked(false, false)\n        const traverse = function (node: Node): void {\n          const childNodes = node.childNodes\n          childNodes.forEach((child) => {\n            if (!child.isLeaf) {\n              child.setChecked(false, false)\n            }\n            traverse(child)\n          })\n        }\n        traverse(node)\n      }\n    }\n  }\n\n  setCheckedNodes(array: Node[], leafOnly = false): void {\n    const key = this.key\n    const checkedKeys: Record<TreeKey, boolean> = {}\n    array.forEach((item) => {\n      checkedKeys[((item || {}) as any)[key]] = true\n    })\n\n    this._setCheckedKeys(key, leafOnly, checkedKeys)\n  }\n\n  setCheckedKeys(keys: TreeKey[], leafOnly = false): void {\n    this.defaultCheckedKeys = keys\n    const key = this.key\n    const checkedKeys: Record<TreeKey, boolean> = {}\n    keys.forEach((key) => {\n      checkedKeys[key] = true\n    })\n\n    this._setCheckedKeys(key, leafOnly, checkedKeys)\n  }\n\n  setDefaultExpandedKeys(keys: TreeKey[]) {\n    keys = keys || []\n    this.defaultExpandedKeys = keys\n    keys.forEach((key) => {\n      const node = this.getNode(key)\n      if (node) node.expand(null, this.autoExpandParent)\n    })\n  }\n\n  setChecked(\n    data: TreeKey | TreeNodeData,\n    checked: boolean,\n    deep: boolean\n  ): void {\n    const node = this.getNode(data)\n\n    if (node) {\n      node.setChecked(!!checked, deep)\n    }\n  }\n\n  getCurrentNode() {\n    return this.currentNode\n  }\n\n  setCurrentNode(currentNode: Node): void {\n    const prevCurrentNode = this.currentNode\n    if (prevCurrentNode) {\n      prevCurrentNode.isCurrent = false\n    }\n    this.currentNode = currentNode\n    this.currentNode.isCurrent = true\n  }\n\n  setUserCurrentNode(node: Node, shouldAutoExpandParent = true): void {\n    const key = (node as any)[this.key]\n    const currNode = this.nodesMap[key]\n    this.setCurrentNode(currNode)\n    if (\n      shouldAutoExpandParent &&\n      this.currentNode &&\n      this.currentNode.level > 1\n    ) {\n      this.currentNode.parent?.expand(null, true)\n    }\n  }\n\n  setCurrentNodeKey(key: TreeKey | null, shouldAutoExpandParent = true): void {\n    this.currentNodeKey = key\n    if (isPropAbsent(key)) {\n      this.currentNode && (this.currentNode.isCurrent = false)\n      this.currentNode = null\n      return\n    }\n    const node = this.getNode(key)\n    if (node) {\n      this.setCurrentNode(node)\n      if (\n        shouldAutoExpandParent &&\n        this.currentNode &&\n        this.currentNode.level > 1\n      ) {\n        this.currentNode.parent?.expand(null, true)\n      }\n    }\n  }\n}\n"],"names":["node","key"],"mappings":"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"}