{"version":3,"file":"useFlattenRecords.mjs","sources":["../../../../../../../packages/vue-components/vc-table/src/hooks/useFlattenRecords.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport type { GetRowKey, Key } from '../interface';\nimport { computed } from 'vue';\n\n// recursion (flat tree structure)\nfunction flatRecord<T>(\n  record: T,\n  indent: number,\n  childrenColumnName: string,\n  expandedKeys: Set<Key>,\n  getRowKey: GetRowKey<T>,\n  index: number,\n) {\n  const arr = [];\n\n  arr.push({\n    record,\n    indent,\n    index,\n  });\n\n  const key = getRowKey(record);\n\n  const expanded = expandedKeys?.has(key);\n\n  if (record && Array.isArray(record[childrenColumnName]) && expanded) {\n    // expanded state, flat record\n    for (let i = 0; i < record[childrenColumnName].length; i += 1) {\n      const tempArr = flatRecord(\n        record[childrenColumnName][i],\n        indent + 1,\n        childrenColumnName,\n        expandedKeys,\n        getRowKey,\n        i,\n      );\n\n      arr.push(...tempArr);\n    }\n  }\n\n  return arr;\n}\n\n/**\n * flat tree data on expanded state\n *\n * @export\n * @template T\n * @param {*} data : table data\n * @param {string} childrenColumnName : 指定树形结构的列名\n * @param {Set<Key>} expandedKeys : 展开的行对应的keys\n * @param {GetRowKey<T>} getRowKey  : 获取当前rowKey的方法\n * @returns flattened data\n */\nexport default function useFlattenRecords<T = unknown>(\n  dataRef: Ref<T[]>,\n  childrenColumnNameRef: Ref<string>,\n  expandedKeysRef: Ref<Set<Key>>,\n  getRowKey: Ref<GetRowKey<T>>,\n) {\n  const arr: Ref<Array<{ record: T; indent: number; index: number }>> = computed(() => {\n    const childrenColumnName = childrenColumnNameRef.value;\n    const expandedKeys = expandedKeysRef.value;\n    const data = dataRef.value;\n    if (expandedKeys?.size) {\n      const temp: Array<{ record: T; indent: number; index: number }> = [];\n\n      // collect flattened record\n      for (let i = 0; i < data?.length; i += 1) {\n        const record = data[i];\n\n        temp.push(\n          ...flatRecord<T>(record, 0, childrenColumnName, expandedKeys, getRowKey.value, i),\n        );\n      }\n\n      return temp;\n    }\n\n    return data?.map((item, index) => {\n      return {\n        record: item,\n        indent: 0,\n        index,\n      };\n    });\n  });\n\n  return arr;\n}\n"],"names":[],"mappings":";;AAKA,SAAS,WACP,MACA,EAAA,MAAA,EACA,kBACA,EAAA,YAAA,EACA,WACA,KACA,EAAA;AACA,EAAA,MAAM,MAAM,EAAC,CAAA;AAEb,EAAA,GAAA,CAAI,IAAK,CAAA;AAAA,IACP,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,GAAA,GAAM,UAAU,MAAM,CAAA,CAAA;AAE5B,EAAM,MAAA,QAAA,GAAW,6CAAc,GAAI,CAAA,GAAA,CAAA,CAAA;AAEnC,EAAA,IAAI,UAAU,KAAM,CAAA,OAAA,CAAQ,OAAO,kBAAkB,CAAC,KAAK,QAAU,EAAA;AAEnE,IAAS,KAAA,IAAA,CAAA,GAAI,GAAG,CAAI,GAAA,MAAA,CAAO,kBAAkB,CAAE,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AAC7D,MAAA,MAAM,OAAU,GAAA,UAAA;AAAA,QACd,MAAA,CAAO,kBAAkB,CAAA,CAAE,CAAC,CAAA;AAAA,QAC5B,MAAS,GAAA,CAAA;AAAA,QACT,kBAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAA;AAAA,OACF,CAAA;AAEA,MAAI,GAAA,CAAA,IAAA,CAAK,GAAG,OAAO,CAAA,CAAA;AAAA,KACrB;AAAA,GACF;AAEA,EAAO,OAAA,GAAA,CAAA;AACT,CAAA;AAaA,SAAwB,iBACtB,CAAA,OAAA,EACA,qBACA,EAAA,eAAA,EACA,SACA,EAAA;AACA,EAAM,MAAA,GAAA,GAAgE,SAAS,MAAM;AACnF,IAAA,MAAM,qBAAqB,qBAAsB,CAAA,KAAA,CAAA;AACjD,IAAA,MAAM,eAAe,eAAgB,CAAA,KAAA,CAAA;AACrC,IAAA,MAAM,OAAO,OAAQ,CAAA,KAAA,CAAA;AACrB,IAAA,IAAI,6CAAc,IAAM,EAAA;AACtB,MAAA,MAAM,OAA4D,EAAC,CAAA;AAGnE,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,IAAI,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,CAAA,EAAQ,KAAK,CAAG,EAAA;AACxC,QAAM,MAAA,MAAA,GAAS,KAAK,CAAC,CAAA,CAAA;AAErB,QAAK,IAAA,CAAA,IAAA;AAAA,UACH,GAAG,WAAc,MAAQ,EAAA,CAAA,EAAG,oBAAoB,YAAc,EAAA,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,SAClF,CAAA;AAAA,OACF;AAEA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAEA,IAAA,OAAO,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,KAAU,KAAA;AAChC,MAAO,OAAA;AAAA,QACL,MAAQ,EAAA,IAAA;AAAA,QACR,MAAQ,EAAA,CAAA;AAAA,QACR,KAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}