{"version":3,"file":"tree-store.mjs","sources":["../../../../../../../packages/components/tree/src/model/tree-store.ts"],"sourcesContent":["// @ts-nocheck\nimport { hasOwn, isObject } from '@bigin/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\n  currentNodeKey: TreeKey\n  nodesMap: TreeStoreNodesMap\n  root: Node\n  data: TreeData\n  lazy: boolean\n  load: LoadFunction\n  filterNodeMethod: FilterNodeMethodFunction\n  key: TreeKey\n  defaultCheckedKeys: TreeKey[]\n  checkStrictly: boolean\n  defaultExpandedKeys: TreeKey[]\n  autoExpandParent: boolean\n  defaultExpandAll: boolean\n  checkDescendants: boolean\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(this.root, (data) => {\n        this.root.doCreateChildren(data)\n        this._initDefaultCheckedNodes()\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 = 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        child.visible = filterNodeMethod.call(child, value, child.data, child)\n\n        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 && !lazy)\n        (node as Node).expand()\n    }\n\n    traverse(this)\n  }\n\n  setData(newVal: TreeData): void {\n    const instanceChanged = newVal !== this.root.data\n    if (instanceChanged) {\n      this.root.setData(newVal)\n      this._initDefaultCheckedNodes()\n    } else {\n      this.root.updateChildren()\n    }\n  }\n\n  getNode(data: TreeKey | TreeNodeData): 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(data: TreeNodeData, refData: TreeKey | TreeNodeData): void {\n    const refNode = this.getNode(refData)\n    refNode.parent.insertBefore({ data }, refNode)\n  }\n\n  insertAfter(data: TreeNodeData, refData: TreeKey | TreeNodeData): 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 = parentData ? this.getNode(parentData) : 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 (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 (nodeKey !== undefined) this.nodesMap[node.key] = 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  ): void {\n    const allNodes = this._getAllNodes().sort((a, b) => b.level - a.level)\n    const cache = Object.create(null)\n    const keys = Object.keys(checkedKeys)\n    allNodes.forEach((node) => node.setChecked(false, false))\n    for (let i = 0, j = allNodes.length; i < j; i++) {\n      const node = allNodes[i]\n      const nodeKey = 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      let parent = node.parent\n      while (parent && parent.level > 0) {\n        cache[parent.data[key]] = true\n        parent = parent.parent\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 = {}\n    array.forEach((item) => {\n      checkedKeys[(item || {})[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 = {}\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(): Node {\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[this.key]\n    const currNode = this.nodesMap[key]\n    this.setCurrentNode(currNode)\n    if (shouldAutoExpandParent && this.currentNode.level > 1) {\n      this.currentNode.parent.expand(null, true)\n    }\n  }\n\n  setCurrentNodeKey(key?: TreeKey, shouldAutoExpandParent = true): void {\n    if (key === null || key === undefined) {\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 (shouldAutoExpandParent && this.currentNode.level > 1) {\n        this.currentNode.parent.expand(null, true)\n      }\n    }\n  }\n}\n"],"names":["node","key"],"mappings":"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"}