{"version":3,"file":"use-tree.mjs","sources":["../../../../../../../packages/components/simple-table/src/composables/use-tree.ts"],"sourcesContent":["import { getCurrentInstance, ref } from 'vue'\n\nimport type { Ref } from 'vue'\nimport type { Indexable } from '@hongluan-ui/utils'\nimport type { GetRowKey, TreeProps, LoadFunction } from '../simple-table'\n\nexport type TableTreeNode = {\n  isLoading: boolean\n  lazy: boolean\n  level: number\n  expanded?: boolean\n}\n\nfunction useTree({ load, treeProps, getRowKey, defaultExpandAll, expandRowKeys }: {\n  load: LoadFunction\n  treeProps: TreeProps\n  getRowKey: GetRowKey\n  defaultExpandAll: Ref<boolean>\n  expandRowKeys: Ref<string[]>\n}) {\n\n  const tableTreeMap = ref<Indexable<TableTreeNode>>({})\n\n  const { emit } = getCurrentInstance()!\n  const childrenKey = treeProps.children\n  const hasChildrenKey = treeProps.hasChildren\n\n  const hasChildren = (row: Record<string, any>) => {\n    if (row[childrenKey] && Array.isArray(row[childrenKey]) && row[childrenKey].length) return true\n    if (row[hasChildrenKey]) return true\n  }\n\n  const walkTreeNode = (data: unknown[], level = 0) => {\n    data && data.forEach((row: any) => {\n      const rowKey = getRowKey(row)\n      const expanded = expandRowKeys.value.includes(rowKey) ? true : defaultExpandAll.value\n      if (row[childrenKey] && Array.isArray(row[childrenKey])) {\n        tableTreeMap.value[rowKey] = {\n          lazy: false,\n          isLoading: false,\n          expanded,\n          level,\n        }\n        walkTreeNode(row[childrenKey], level + 1)\n      } else if (row[hasChildrenKey]) {\n        tableTreeMap.value[rowKey] = {\n          lazy: true,\n          isLoading: false,\n          expanded: false,\n          level,\n        }\n        expanded && toggleExpandTree(row)\n      }\n    })\n  }\n\n  const loadChildren = (row: Record<string, any>, level: number, finish?: () => void) => {\n    tableTreeMap.value[getRowKey(row)] = {\n      lazy: false,\n      isLoading: true,\n      expanded: false,\n      level: level,\n    }\n    if (load) {\n      load(row, { level }, (children: unknown[]) => {\n        row[childrenKey] = children\n        tableTreeMap.value[getRowKey(row)].isLoading = false\n        walkTreeNode(children, level + 1)\n        finish && finish()\n      })\n    } else {\n      row[childrenKey] = []\n      tableTreeMap.value[getRowKey(row)].isLoading = false\n      finish && finish()\n    }\n  }\n\n  const toggleExpandTree = (row: Record<string, any>) => {\n    return new Promise<void>(resolve => {\n      if (tableTreeMap.value[getRowKey(row)].lazy) {\n        loadChildren(row, tableTreeMap.value[getRowKey(row)].level, () => {\n          tableTreeMap.value[getRowKey(row)].expanded = true\n          resolve()\n          emit('tree-expand', true, row)\n        })\n      } else {\n        tableTreeMap.value[getRowKey(row)].expanded = !tableTreeMap.value[getRowKey(row)].expanded\n        resolve()\n        emit('tree-expand', tableTreeMap.value[getRowKey(row)].expanded, row)\n      }\n    })\n  }\n\n  return {\n    walkTreeNode,\n    hasChildren,\n    loadChildren,\n    tableTreeMap,\n    toggleExpandTree,\n  }\n}\n\nexport { useTree }\n"],"names":[],"mappings":";;AACA,SAAS,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE;AAClF,EAAE,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/B,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAAC;AACxC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;AACzC,EAAE,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAC;AAC/C,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK;AAC/B,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM;AACtF,MAAM,OAAO,IAAI,CAAC;AAClB,IAAI,IAAI,GAAG,CAAC,cAAc,CAAC;AAC3B,MAAM,OAAO,IAAI,CAAC;AAClB,GAAG,CAAC;AACJ,EAAE,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,KAAK;AAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAClC,MAAM,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AACpC,MAAM,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAC5F,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE;AAC/D,QAAQ,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AACrC,UAAU,IAAI,EAAE,KAAK;AACrB,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,QAAQ;AAClB,UAAU,KAAK;AACf,SAAS,CAAC;AACV,QAAQ,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAClD,OAAO,MAAM,IAAI,GAAG,CAAC,cAAc,CAAC,EAAE;AACtC,QAAQ,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AACrC,UAAU,IAAI,EAAE,IAAI;AACpB,UAAU,SAAS,EAAE,KAAK;AAC1B,UAAU,QAAQ,EAAE,KAAK;AACzB,UAAU,KAAK;AACf,SAAS,CAAC;AACV,QAAQ,QAAQ,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC;AAC1C,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,KAAK;AAC/C,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG;AACzC,MAAM,IAAI,EAAE,KAAK;AACjB,MAAM,SAAS,EAAE,IAAI;AACrB,MAAM,QAAQ,EAAE,KAAK;AACrB,MAAM,KAAK;AACX,KAAK,CAAC;AACN,IAAI,IAAI,IAAI,EAAE;AACd,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,KAAK;AACzC,QAAQ,GAAG,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;AACpC,QAAQ,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;AAC7D,QAAQ,YAAY,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AAC1C,QAAQ,MAAM,IAAI,MAAM,EAAE,CAAC;AAC3B,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;AAC5B,MAAM,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC;AAC3D,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;AACzB,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,gBAAgB,GAAG,CAAC,GAAG,KAAK;AACpC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACpC,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AACnD,QAAQ,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM;AAC1E,UAAU,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC7D,UAAU,OAAO,EAAE,CAAC;AACpB,UAAU,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACzC,SAAS,CAAC,CAAC;AACX,OAAO,MAAM;AACb,QAAQ,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnG,QAAQ,OAAO,EAAE,CAAC;AAClB,QAAQ,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC9E,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,OAAO;AACT,IAAI,YAAY;AAChB,IAAI,WAAW;AACf,IAAI,YAAY;AAChB,IAAI,YAAY;AAChB,IAAI,gBAAgB;AACpB,GAAG,CAAC;AACJ;;;;"}