{"version":3,"file":"utils.mjs","sources":["../../../../../../src/components/ivue-table/table-header/utils.ts"],"sourcesContent":["import { computed, inject } from 'vue';\r\n\r\n// type\r\nimport type { TableHeaderProps } from './types';\r\nimport type { TableColumnCtx } from '../table-column/defaults';\r\nimport { TableContextKey } from '../table/defaults';\r\n\r\n// 获取所有列\r\nconst getAllColumns = (columns: TableColumnCtx[]): TableColumnCtx[] => {\r\n  const result: TableColumnCtx[] = [];\r\n\r\n  columns.forEach((column) => {\r\n    // 有子项\r\n    if (column.children) {\r\n      result.push(column);\r\n\r\n      // eslint-disable-next-line prefer-spread\r\n      result.push.apply(result, getAllColumns(column.children));\r\n    }\r\n    // 没有子项\r\n    else {\r\n      result.push(column);\r\n    }\r\n  });\r\n\r\n  return result;\r\n};\r\n\r\n// 转换行\r\nconst convertToRows = (originColumns: TableColumnCtx[]): TableColumnCtx[] => {\r\n  let maxLevel = 1;\r\n\r\n  // 遍历\r\n  const traverse = (\r\n    column: TableColumnCtx,\r\n    parent: TableColumnCtx | undefined\r\n  ) => {\r\n    // 父\r\n    if (parent) {\r\n      column.level = parent.level + 1;\r\n\r\n      if (maxLevel < column.level) {\r\n        maxLevel = column.level;\r\n      }\r\n    }\r\n\r\n    // 有子项\r\n    if (column.children) {\r\n      let colSpan = 0;\r\n\r\n      column.children.forEach((subColumn) => {\r\n        traverse(subColumn, column);\r\n\r\n        // 单元格可横跨的列数\r\n        colSpan += subColumn.colSpan;\r\n      });\r\n\r\n      // 单元格可横跨的列数\r\n      column.colSpan = colSpan;\r\n    }\r\n    // 没有子项\r\n    else {\r\n      // 单元格可横跨的列数\r\n      column.colSpan = 1;\r\n    }\r\n  };\r\n\r\n  // 列数据\r\n  originColumns.forEach((item) => {\r\n    item.level = 1;\r\n\r\n    traverse(item, undefined);\r\n  });\r\n\r\n  // 行数据\r\n  const rows = [];\r\n\r\n  for (let i = 0; i < maxLevel; i++) {\r\n    rows.push([]);\r\n  }\r\n\r\n  // 获取所有列\r\n  const allColumns: TableColumnCtx[] = getAllColumns(originColumns);\r\n\r\n  allColumns.forEach((item) => {\r\n    // 没有子项\r\n    if (!item.children) {\r\n      // 单元格可横跨的行数\r\n      item.rowSpan = maxLevel - item.level + 1;\r\n    }\r\n    // 有子项\r\n    else {\r\n      // 单元格可横跨的行数\r\n      item.rowSpan = 1;\r\n      // 设置是否是子项\r\n      item.children.forEach((col) => (col.isSubColumn = true));\r\n    }\r\n\r\n    rows[item.level - 1].push(item);\r\n  });\r\n\r\n  return rows;\r\n};\r\n\r\nfunction useUtils(props: TableHeaderProps) {\r\n  // inject\r\n  const IvueTable = inject(TableContextKey);\r\n\r\n  // 获取当前列的行数\r\n  const columnRows = computed(() => {\r\n    return convertToRows(props.store.states.originColumns.value);\r\n  });\r\n\r\n  // 是否拥有多级表头\r\n  const isGroup = computed(() => {\r\n    const result = columnRows.value.length > 1;\r\n\r\n    if (result && IvueTable) {\r\n      IvueTable.state.isGroup.value = true;\r\n    }\r\n\r\n    return result;\r\n  });\r\n\r\n  return {\r\n    isGroup,\r\n    columnRows,\r\n  };\r\n}\r\n\r\nexport default useUtils;\r\n"],"names":[],"mappings":";;;AAQA,MAAM,aAAA,GAAgB,CAAC,OAAgD,KAAA;AACrE,EAAA,MAAM,SAA2B,EAAC,CAAA;AAElC,EAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,MAAW,KAAA;AAE1B,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA,CAAA;AAGlB,MAAA,MAAA,CAAO,KAAK,KAAM,CAAA,MAAA,EAAQ,aAAc,CAAA,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA;AAAA,KAGrD,MAAA;AACH,MAAA,MAAA,CAAO,KAAK,MAAM,CAAA,CAAA;AAAA,KACpB;AAAA,GACD,CAAA,CAAA;AAED,EAAO,OAAA,MAAA,CAAA;AACT,CAAA,CAAA;AAGA,MAAM,aAAA,GAAgB,CAAC,aAAsD,KAAA;AAC3E,EAAA,IAAI,QAAW,GAAA,CAAA,CAAA;AAGf,EAAM,MAAA,QAAA,GAAW,CACf,MAAA,EACA,MACG,KAAA;AAEH,IAAA,IAAI,MAAQ,EAAA;AACV,MAAO,MAAA,CAAA,KAAA,GAAQ,OAAO,KAAQ,GAAA,CAAA,CAAA;AAE9B,MAAI,IAAA,QAAA,GAAW,OAAO,KAAO,EAAA;AAC3B,QAAA,QAAA,GAAW,MAAO,CAAA,KAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAGA,IAAA,IAAI,OAAO,QAAU,EAAA;AACnB,MAAA,IAAI,OAAU,GAAA,CAAA,CAAA;AAEd,MAAO,MAAA,CAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,SAAc,KAAA;AACrC,QAAA,QAAA,CAAS,WAAW,MAAM,CAAA,CAAA;AAG1B,QAAA,OAAA,IAAW,SAAU,CAAA,OAAA,CAAA;AAAA,OACtB,CAAA,CAAA;AAGD,MAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAA;AAAA,KAGd,MAAA;AAEH,MAAA,MAAA,CAAO,OAAU,GAAA,CAAA,CAAA;AAAA,KACnB;AAAA,GACF,CAAA;AAGA,EAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAC9B,IAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,CAAA;AAEb,IAAA,QAAA,CAAS,MAAM,KAAS,CAAA,CAAA,CAAA;AAAA,GACzB,CAAA,CAAA;AAGD,EAAA,MAAM,OAAO,EAAC,CAAA;AAEd,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,EAAU,CAAK,EAAA,EAAA;AACjC,IAAK,IAAA,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAAA,GACd;AAGA,EAAM,MAAA,UAAA,GAA+B,cAAc,aAAa,CAAA,CAAA;AAEhE,EAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAE3B,IAAI,IAAA,CAAC,KAAK,QAAU,EAAA;AAElB,MAAK,IAAA,CAAA,OAAA,GAAU,QAAW,GAAA,IAAA,CAAK,KAAQ,GAAA,CAAA,CAAA;AAAA,KAGpC,MAAA;AAEH,MAAA,IAAA,CAAK,OAAU,GAAA,CAAA,CAAA;AAEf,MAAA,IAAA,CAAK,SAAS,OAAQ,CAAA,CAAC,GAAS,KAAA,GAAA,CAAI,cAAc,IAAK,CAAA,CAAA;AAAA,KACzD;AAEA,IAAA,IAAA,CAAK,IAAK,CAAA,KAAA,GAAQ,CAAG,CAAA,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,GAC/B,CAAA,CAAA;AAED,EAAO,OAAA,IAAA,CAAA;AACT,CAAA,CAAA;AAEA,SAAS,SAAS,KAAyB,EAAA;AAEzC,EAAM,MAAA,SAAA,GAAY,OAAO,eAAe,CAAA,CAAA;AAGxC,EAAM,MAAA,UAAA,GAAa,SAAS,MAAM;AAChC,IAAA,OAAO,aAAc,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,CAAO,cAAc,KAAK,CAAA,CAAA;AAAA,GAC5D,CAAA,CAAA;AAGD,EAAM,MAAA,OAAA,GAAU,SAAS,MAAM;AAC7B,IAAM,MAAA,MAAA,GAAS,UAAW,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,CAAA;AAEzC,IAAA,IAAI,UAAU,SAAW,EAAA;AACvB,MAAU,SAAA,CAAA,KAAA,CAAM,QAAQ,KAAQ,GAAA,IAAA,CAAA;AAAA,KAClC;AAEA,IAAO,OAAA,MAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF;;;;"}