{"version":3,"file":"virtual-table.mjs","sources":["../../../../../../packages/components/simple-table/src/virtual-table.vue"],"sourcesContent":["<template>\n  <div :class=\"namespace\">\n    <table class=\"table-header\" :class=\"tableClass\" :style=\"tableStyle\">\n      <thead v-if=\"showHeader\" :class=\"{ 'fixed-top': true }\">\n        <tr\n          v-for=\"(row, rowIndex) in realColsInfo.headerRows\"\n          :key=\"rowIndex\"\n          :class=\"getHeaderRowClass({ row, rowIndex })\"\n          :style=\"getHeaderRowStyle({ row, rowIndex })\"\n        >\n          <th\n            v-for=\"(column, columnIndex) of row\"\n            v-show=\"isShowCol(column)\"\n            :ref=\"el => (thRefs[columnIndex] = el)\"\n            :key=\"columnIndex\"\n            :rowspan=\"column.rowSpan\"\n            :colspan=\"column.colSpan\"\n            :style=\"[\n              {\n                'width': column.width ? column.width: false,\n                'min-width': column.width ? column.width: false,\n                'max-width': column.width ? column.width: false,\n                ...getHeaderCellStyle({ row, column, rowIndex, columnIndex })\n              },\n              !!column.fixed && getColFixed(column).distance ? '--table-fixed-distance:' + getColFixed(column).distance : ''\n            ]\"\n            :class=\"[\n              {\n                ['fixed-' + getColFixed(column).position]: !!column.fixed,\n                'show-shadow': getColFixed(column).hasShadow,\n              },\n              getHeaderCellClass({ row, column, rowIndex, columnIndex })\n            ]\"\n          >\n            <div v-if=\"column.headerSlotName\" class=\"cell\" :style=\"column.align ? `justify-content:${column.align}` : ''\">\n              <slot :name=\"column.headerSlotName\" :col=\"{ ...column, columnIndex }\"></slot>\n            </div>\n            <div v-else class=\"cell\" :style=\"column.align ? `justify-content:${column.align}` : ''\">\n              {{ column.title }}\n              <sortable-icon :sortable=\"column.sortable\" @sort-change=\"val => $emit('sort-change', column.prop, val)\" />\n              <filter-icon\n                v-if=\"column.filter?.slotName\"\n                :placement=\"column.filter.placement\"\n                :effect=\"column.filter.effect\"\n                :popper-class=\"column.filter.popperClass\"\n                :trigger=\"column.filter.trigger\"\n              >\n                <template #default=\"{ close }\">\n                  <slot :name=\"column.filter.slotName\" :close=\"close\">\n                  </slot>\n                </template>\n              </filter-icon>\n            </div>\n          </th>\n        </tr>\n      </thead>\n    </table>\n    <table\n      v-if=\"data === null || data === undefined || data.length === 0\"\n      class=\"table-body no-data\"\n      :class=\"tableClass\"\n      :style=\"tableStyle\"\n    >\n      <tbody>\n        <tr v-if=\"data?.length === 0\" class=\"empty-content\">\n          <td :colspan=\"realColsInfo.realCols.length\">\n            <slot name=\"empty\">\n              {{ t('hl.simpletable.emptyText') }}\n            </slot>\n          </td>\n        </tr>\n        <tr v-if=\"data === null || data === undefined\" class=\"unknown-content\">\n          <td :colspan=\"realColsInfo.realCols.length\">\n            <slot name=\"unknown\">\n            </slot>\n          </td>\n        </tr>\n      </tbody>\n    </table>\n    <fixed-size-list\n      v-else\n      :class-name=\"['table-body', ...tableClass]\"\n      :style=\"tableStyle\"\n      :data=\"realData\"\n      :total=\"virtualTotal\"\n      :height=\"height\"\n      :item-size=\"itemSize\"\n      :perf-mode=\"true\"\n      :scrollbar-always-on=\"scrollbarAlwaysOn\"\n      :cache=\"cache\"\n      container-element=\"table\"\n      inner-element=\"tbody\"\n      @item-rendered=\"(...args) => $emit('item-rendered', ...args)\"\n    >\n      <template #default=\"{ data, index: rowIndex, style }\">\n        <tr v-if=\"!data[rowIndex]\" class=\"loading-row\" :style=\"style\">\n          <td :colspan=\"realColsInfo.realCols.length\">\n            <slot name=\"loading\" :rowIndex=\"rowIndex\"></slot>\n          </td>\n        </tr>\n        <tr\n          v-else-if=\"data[rowIndex]['$type$'] === 'EXPANDED_ROW'\"\n          :key=\"getRowKey(data[rowIndex]['refRow']) + data[rowIndex]['slotName']\"\n          :class=\"['expand-row', data[rowIndex]['slotName']]\"\n          :style=\"style\"\n          @click=\"$event => $emit('row-click', data[rowIndex], rowIndex, $event)\"\n        >\n          <td :colspan=\"realColsInfo.realCols.length\">\n            <slot :name=\"data[rowIndex]['slotName']\" :row=\"data[rowIndex]['refRow']\"></slot>\n          </td>\n        </tr>\n        <tr\n          v-else\n          :key=\"getRowKey(data[rowIndex])\"\n          :class=\"[\n            typeof rowClassName === 'string' ? rowClassName : rowClassName({ row: data[rowIndex], rowIndex }),\n            currentSelectedRow === data[rowIndex] ? 'current-row' : ''\n          ]\"\n          :style=\"[\n            typeof rowStyle === 'function' ? rowStyle({ row: data[rowIndex], rowIndex }) : rowStyle,\n            data[rowIndex]['$level$'] && `--tree-level:${data[rowIndex]['$level$']}`,\n            style\n          ]\"\n          @click=\"$event => $emit('row-click', data[rowIndex], rowIndex, $event)\"\n        >\n          <template v-for=\"(column, columnIndex) of realColsInfo.realCols\" :key=\"columnIndex\">\n            <cell\n              :column=\"column\"\n              :column-index=\"columnIndex\"\n              :row=\"data[rowIndex]\"\n              :row-index=\"rowIndex\"\n              :cell-class-name=\"cellClassName\"\n              :cell-style=\"cellStyle\"\n              :span=\"getSpan({ row: data[rowIndex], column, rowIndex, columnIndex })\"\n              :expanded=\"expandedKeyExisted(data[rowIndex], column.expand?.slotName)\"\n              :tree-expanded=\"tableTreeMap[getRowKey(data[rowIndex])]?.expanded\"\n              :show-tooltip=\"column.showTooltip && isShowTooltipMap[rowIndex + '/' + columnIndex]\"\n              :has-children=\"hasChildren(data[rowIndex])\"\n              :is-loading=\"tableTreeMap[getRowKey(data[rowIndex])]?.isLoading\"\n              :first-column-index=\"firstColumnIndex\"\n              :width=\"tdWidths[columnIndex]\"\n              @cell-click=\"$event => $emit('cell-click', data[rowIndex], column, rowIndex, columnIndex, $event)\"\n              @expand=\"toggleExpandVirtualRow(data[rowIndex], rowIndex, columnIndex, column.expand?.slotName)\"\n              @tree-expand=\"toggleExpandVirtualTree(data[rowIndex], rowIndex)\"\n              @mouseover=\"$event => tdMouseover($event, rowIndex, columnIndex)\"\n              @mouseleave=\"tdMouseleave\"\n            >\n              <slot :name=\"column.slotName\" :row=\"{ ...data[rowIndex], rowIndex, columnIndex }\"></slot>\n            </cell>\n          </template>\n        </tr>\n      </template>\n    </fixed-size-list>\n    <table class=\"table-footer\" :class=\"tableClass\" :style=\"tableStyle\">\n      <colgroup>\n        <col v-for=\"(w, idx) in tdWidths\" :key=\"idx\" :width=\"w\">\n      </colgroup>\n      <tfoot>\n        <slot name=\"foot\"></slot>\n      </tfoot>\n    </table>\n  </div>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, ref, provide, watch, onMounted, toRefs } from 'vue'\nimport { cloneDeep, findLast } from 'lodash-unified'\nimport { useLocale, useNamespace } from '@hongluan-ui/hooks'\nimport { FixedSizeList } from '@hongluan-ui/components/virtual-list'\nimport SortableIcon from './sortable.vue'\nimport FilterIcon from './filter.vue'\nimport Cell from './body/cell'\nimport { virtualTableProps, simpleTableContextKey } from './simple-table'\nimport { useExpand, useTree, useTooltip } from './composables'\nimport { convertCols } from './utils'\n\nimport type { Nullable } from '@hongluan-ui/utils'\nimport type { ColumnType, VirtualTableContext } from './simple-table'\n\nexport default defineComponent({\n  name: 'VirtualTable',\n  components: { Cell, SortableIcon, FilterIcon, FixedSizeList },\n  props: virtualTableProps,\n  emits: ['row-click', 'cell-click', 'sort-change', 'expand', 'tree-expand', 'current-change', 'item-rendered'],\n  setup(props, { emit }) {\n    const { t } = useLocale()\n    const { namespace: simpleTableNS } = useNamespace('simple-table')\n    const { namespace } = useNamespace('virtual-table')\n    const tableRef = ref<HTMLTableElement>()\n    const thRefs = ref([])\n    const tdWidths = ref<string[]>([])\n    const currentSelectedRow = ref<Nullable<unknown>>(null)\n    const {\n      expandRowKeys,\n      defaultExpandAll,\n      cols,\n      data: realData,\n    } = toRefs(props)\n\n    const realColsInfo = computed(() => convertCols(cloneDeep(cols.value)))\n    const slotNames = computed(() => realColsInfo.value.realCols.filter(c => c.slotName).map(c => c.slotName))\n    const expandSlotNames = computed(() => realColsInfo.value.realCols.filter(c => c.expand?.slotName).map(c => c.expand?.slotName))\n    const virtualTotal = computed(() => props.total ?? (realData.value ? realData.value.length : 0))\n\n    const tableClass = computed(() => [\n      simpleTableNS.value,\n      props.size,\n      props.border,\n      {\n        'hover': props.hover,\n        'list': props.list,\n        'auto-height': props.autoHeight,\n      },\n      props.stripe == 'even' ? 'striped-even' : '',\n      props.stripe == 'odd' ? 'striped-odd' : '',\n      typeof props.stripe === 'boolean' && props.stripe ? 'striped-odd' : '',\n    ])\n    const tableStyle = computed(() => [\n      props.padding ? `--table-padding: ${props.padding}` : '',\n      props.cellPadding ? `--table-td-padding: ${props.cellPadding}` : '',\n      props.gap ? `--table-gap: ${props.gap}` : '',\n      props.gapX ? `--table-gap-x: ${props.gapX}` : '',\n      props.gapY ? `--table-gap-y: ${props.gapY}` : '',\n    ])\n\n    const {\n      toggleExpandRow,\n      expandedKeyExisted,\n    } = useExpand({\n      expandRowKeys,\n      getRowKey,\n      defaultExpandAll,\n    })\n\n    const {\n      isShowTooltipMap,\n      clearTooltip,\n      tdMouseover,\n      tdMouseleave,\n    } = useTooltip(realColsInfo)\n\n    const {\n      tableTreeMap,\n      hasChildren,\n      toggleExpandTree,\n      walkTreeNode,\n    } = useTree({\n      load: props.load,\n      treeProps: props.treeProps,\n      getRowKey,\n      expandRowKeys,\n      defaultExpandAll,\n    })\n\n    function getRowKey(row: unknown): string {\n      const rowKey = props.rowKey\n      if (!row) throw new Error('Row is required when get row identity')\n      if (typeof rowKey === 'string') {\n        if (rowKey.indexOf('.') < 0) {\n          return row[rowKey] + ''\n        }\n        const key = rowKey.split('.')\n        let current = row\n        for (let i = 0; i < key.length; i++) {\n          current = current[key[i]]\n        }\n        return current + ''\n      } else if (typeof rowKey === 'function') {\n        return rowKey.call(null, row)\n      }\n    }\n\n    const isShowCol = (col: ColumnType) => {\n      return !('$show$' in col) || col.$show$\n    }\n    const toggleColumn = (index: number, show?: boolean) => {\n      cols.value[index].$show$ = show ?? !('$show$' in cols.value[index] ? cols.value[index].$show$ : true)\n    }\n    const getColFixed = (col: ColumnType) => {\n      const pos = (col: ColumnType) => typeof col.fixed === 'string' ? col.fixed : col.fixed?.position\n      const result = {\n        hasShadow: false,\n        position: pos(col),\n        distance: typeof col.fixed === 'string' ? 0 : col.fixed?.distance,\n      }\n      if (result.position === 'left') {\n        result.hasShadow = findLast(realColsInfo.value.realCols, c => pos(c) === 'left') === col\n      } else if (result.position === 'right') {\n        result.hasShadow = realColsInfo.value.realCols.find(c => pos(c) === 'right') === col\n      }\n      return result\n    }\n\n    const getHeaderRowClass = ({ row, rowIndex }) => {\n      return typeof props.headerRowClassName === 'string' ? props.headerRowClassName : props.headerRowClassName({ row, rowIndex })\n    }\n    const getHeaderRowStyle = ({ row, rowIndex }) => {\n      return typeof props.headerRowStyle === 'function' ? props.headerRowStyle({ row, rowIndex }) : props.headerRowStyle\n    }\n    const getHeaderCellClass = ({ row, column, rowIndex, columnIndex }) => {\n      return typeof props.headerCellClassName === 'string' ? props.headerCellClassName : props.headerCellClassName({ row, column, rowIndex, columnIndex })\n    }\n    const getHeaderCellStyle = ({ row, column, rowIndex, columnIndex }) => {\n      return typeof props.headerCellStyle === 'function' ? props.headerCellStyle({ row, column, rowIndex, columnIndex }) : props.headerCellStyle\n    }\n\n    const rowClicked = (row, rowIndex, $event) => {\n      if (props.highlightCurrentRow) {\n        emit('current-change', row, cloneDeep(currentSelectedRow.value))\n        currentSelectedRow.value = currentSelectedRow.value === row ? null : row\n      }\n      emit('row-click', row, rowIndex, $event)\n    }\n    const setCurrentRow = row => {\n      if (props.highlightCurrentRow) {\n        emit('current-change', row, cloneDeep(currentSelectedRow.value))\n        currentSelectedRow.value = row ?? null\n      }\n    }\n\n    const getSpan = ({ row, column, rowIndex, columnIndex }) => {\n      const span = { rowspan: 1, colspan: 1 }\n      if (props.spanMethod) {\n        const result = props.spanMethod({ row, column, rowIndex, columnIndex })\n        if (Array.isArray(result)) {\n          span.rowspan = result[0]\n          span.colspan = result[1]\n        } else if (typeof result === 'object') {\n          Object.assign(span, result)\n        }\n      }\n      return span\n    }\n\n    const toggleExpandVirtualRow = (row: unknown, rowIndex: number, columnIndex: number, slotName: string) => {\n      toggleExpandRow(row, slotName)\n      if (expandedKeyExisted(row, slotName)) {\n        for(let start = rowIndex + 1; start < realData.value.length; start++) {\n          if (realData.value[start]['$type$'] !== 'EXPANDED_ROW' ||\n            realData.value[start]['$type$'] === 'TREE_ROW' ||\n            realData.value[start]['columnIndex'] > columnIndex) {\n            realData.value.splice(start, 0, { '$type$': 'EXPANDED_ROW', refRow: row, rowIndex, columnIndex, slotName })\n            break\n          }\n        }\n      } else {\n        for(let start = rowIndex + 1; start < realData.value.length; start++) {\n          if (realData.value[start]['$type$'] === 'EXPANDED_ROW') {\n            if (realData.value[start]['columnIndex'] === columnIndex) {\n              realData.value.splice(start, 1)\n              break\n            }\n          } else break\n        }\n      }\n    }\n\n    const toggleExpandVirtualTree = async (row: unknown, rowIndex: number) => {\n      await toggleExpandTree(row)\n\n      let start = rowIndex + 1\n      while(realData.value[start]['$type$'] === 'EXPANDED_ROW') {\n        start++\n      }\n\n      const rowKey = getRowKey(row)\n      const level = tableTreeMap.value[rowKey].level\n      if (tableTreeMap.value[rowKey]?.expanded) {\n        const children: unknown[] = row[props.treeProps.children] ?? []\n        for(let i = children.length - 1; i >= 0; i--){\n          const child = children[i]\n          child['$type$'] = 'TREE_ROW'\n          child['$level$'] = level + 1\n          realData.value.splice(start, 0, children[i])\n        }\n      } else {\n        let count = 0\n        for(let i = start; ; i++) {\n          if (realData.value[i]['$type$'] !== 'TREE_ROW') break\n          if (realData.value[i]['$level$'] <= level) break\n          count++\n\n          const treeRowKey = getRowKey(realData.value[i])\n          if (tableTreeMap.value[treeRowKey]) {\n            tableTreeMap.value[treeRowKey].expanded = false\n          }\n        }\n        realData.value.splice(start, count)\n      }\n    }\n\n    watch(realData, () => {\n      walkTreeNode(realData.value)\n    })\n\n    onMounted(() => {\n      walkTreeNode(realData.value)\n\n      tdWidths.value = thRefs.value.map(thRef => thRef.offsetWidth + 'px')\n    })\n\n    provide<VirtualTableContext>(simpleTableContextKey, {\n      isShowCol,\n      getColFixed,\n    })\n\n    return {\n      t,\n      namespace,\n      virtualTotal,\n      tableStyle,\n      tableClass,\n      tableRef,\n      thRefs,\n      tdWidths,\n      isShowCol,\n      getColFixed,\n      realColsInfo,\n      slotNames,\n      expandSlotNames,\n      realData,\n      getHeaderRowClass,\n      getHeaderRowStyle,\n      getHeaderCellClass,\n      getHeaderCellStyle,\n      setCurrentRow,\n      toggleExpandVirtualRow,\n      toggleExpandVirtualTree,\n      rowClicked,\n      toggleColumn,\n      getRowKey,\n      getSpan,\n      expandedKeyExisted,\n      isShowTooltipMap,\n      tdMouseleave,\n      tdMouseover,\n      clearTooltip,\n      currentSelectedRow,\n      tableTreeMap,\n      hasChildren,\n    }\n  },\n})\n</script>\n"],"names":["_openBlock","_normalizeStyle"],"mappings":"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"}