{"version":3,"file":"tbody.mjs","sources":["../../src/table/tbody.tsx"],"sourcesContent":["import { defineComponent, computed, PropType, toRefs } from 'vue';\nimport camelCase from 'lodash/camelCase';\nimport get from 'lodash/get';\nimport pick from 'lodash/pick';\nimport TrElement, { ROW_LISTENERS, TABLE_PROPS } from './tr';\nimport { useConfig } from '../hooks/useConfig';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport useClassName from './hooks/useClassName';\nimport baseTableProps from './base-table-props';\nimport { TNodeReturnValue } from '../common';\nimport useRowspanAndColspan from './hooks/useRowspanAndColspan';\nimport { BaseTableProps, RowAndColFixedPosition } from './interface';\nimport { TdBaseTableProps } from './type';\nimport { VirtualScrollConfig } from '../hooks/useVirtualScrollNew';\n\nexport const ROW_AND_TD_LISTENERS = ROW_LISTENERS.concat('cell-click');\nexport interface TableBodyProps extends BaseTableProps {\n  classPrefix: string;\n  ellipsisOverlayClassName: string;\n  // 固定列 left/right 具体值\n  rowAndColFixedPosition: RowAndColFixedPosition;\n  showColumnShadow: { left: boolean; right: boolean };\n  tableElm: any;\n  tableWidth: number;\n  isWidthOverflow: boolean;\n  virtualConfig: VirtualScrollConfig;\n  // HTMLDivElement\n  tableContentElm: any;\n  cellEmptyContent: TdBaseTableProps['cellEmptyContent'];\n  handleRowMounted: (rowData: any) => void;\n}\n\n// table 到 body 的相同属性\nexport const extendTableProps = [\n  'bordered',\n  'rowKey',\n  'rowClassName',\n  'rowAttributes',\n  'loading',\n  'empty',\n  'fixedRows',\n  'firstFullRow',\n  'lastFullRow',\n  'rowspanAndColspan',\n  'scroll',\n  'cellEmptyContent',\n  'pagination',\n  'attach',\n  'onCellClick',\n  'onPageChange',\n  'onRowClick',\n  'onRowDblclick',\n  'onRowMouseover',\n  'onRowMousedown',\n  'onRowMouseenter',\n  'onRowMouseleave',\n  'onRowMouseup',\n  'onScroll',\n  'onScrollX',\n  'onScrollY',\n];\n\nexport default defineComponent({\n  name: 'XBody',\n\n  props: {\n    classPrefix: String,\n    data: Array as PropType<TableBodyProps['data']>,\n    columns: Array as PropType<TableBodyProps['columns']>,\n    ellipsisOverlayClassName: String,\n    rowAndColFixedPosition: Map as PropType<TableBodyProps['rowAndColFixedPosition']>,\n    showColumnShadow: Object as PropType<TableBodyProps['showColumnShadow']>,\n    // eslint-disable-next-line\n    tableElm: {},\n    tableWidth: Number,\n    isWidthOverflow: Boolean,\n    virtualConfig: Object as PropType<VirtualScrollConfig>,\n    // eslint-disable-next-line\n    tableContentElm: {},\n    handleRowMounted: Function as PropType<TableBodyProps['handleRowMounted']>,\n    renderExpandedRow: Function as PropType<TableBodyProps['renderExpandedRow']>,\n    firstFullRow: [String, Function] as PropType<TableBodyProps['firstFullRow']>,\n    lastFullRow: [String, Function] as PropType<TableBodyProps['lastFullRow']>,\n    ...pick(baseTableProps, extendTableProps),\n  },\n\n  // eslint-disable-next-line\n  setup(props: TableBodyProps) {\n    const renderTNode = useTNodeJSX();\n    const { data, columns, rowKey, rowspanAndColspan } = toRefs(props);\n    const { t, globalConfig } = useConfig('table');\n    const { tableFullRowClasses, tableBaseClass } = useClassName();\n    const { skipSpansMap } = useRowspanAndColspan(data, columns, rowKey, rowspanAndColspan);\n\n    const tbodyClasses = computed(() => [tableBaseClass.body]);\n\n    return {\n      t,\n      globalConfig,\n      renderTNode,\n      tableFullRowClasses,\n      tbodyClasses,\n      tableBaseClass,\n      skipSpansMap,\n    };\n  },\n\n  render() {\n    const renderEmpty = (columns: TableBodyProps['columns']) => {\n      const tableWidth = this.bordered ? this.tableWidth - 2 : this.tableWidth;\n      return (\n        <tr class={[this.tableBaseClass.emptyRow, { [this.tableFullRowClasses.base]: this.isWidthOverflow }]}>\n          <td colspan={columns.length}>\n            <div\n              class={[this.tableBaseClass.empty, { [this.tableFullRowClasses.innerFullRow]: this.isWidthOverflow }]}\n              style={this.isWidthOverflow ? { width: `${tableWidth}px` } : {}}\n            >\n              {this.renderTNode('empty') || this.t(this.globalConfig.empty)}\n            </div>\n          </td>\n        </tr>\n      );\n    };\n\n    const getFullRow = (columnLength: number, type: 'first-full-row' | 'last-full-row') => {\n      const tType = camelCase(type);\n      const fullRowNode = this.renderTNode(tType);\n      if (['', null, undefined, false].includes(fullRowNode)) return null;\n      const isFixedToLeft = this.isWidthOverflow && this.columns.find((col) => col.fixed === 'left');\n      const classes = [this.tableFullRowClasses.base, this.tableFullRowClasses[tType]];\n      const tableWidth = this.bordered ? this.tableWidth - 2 : this.tableWidth;\n      /** innerFullRow 和 innerFullElement 同时存在，是为了保证 固定列时，当前行不随内容进行横向滚动 */\n      return (\n        <tr class={classes} key={`key-full-row-${type}`}>\n          <td colspan={columnLength}>\n            <div\n              class={{ [this.tableFullRowClasses.innerFullRow]: isFixedToLeft }}\n              style={isFixedToLeft ? { width: `${tableWidth}px` } : {}}\n            >\n              <div class={this.tableFullRowClasses.innerFullElement}>{fullRowNode}</div>\n            </div>\n          </td>\n        </tr>\n      );\n    };\n\n    const columnLength = this.columns.length;\n    const dataLength = this.data.length;\n    const trNodeList: TNodeReturnValue[] = [];\n\n    const properties = [\n      'classPrefix',\n      'ellipsisOverlayClassName',\n      'rowAndColFixedPosition',\n      'scroll',\n      'tableElm',\n      'tableContentElm',\n      'pagination',\n      'attach',\n    ];\n    this.data?.forEach((row, rowIndex) => {\n      const trProps = {\n        ...pick(this.$props, TABLE_PROPS),\n        rowKey: this.rowKey || 'id',\n        row,\n        columns: this.columns,\n        rowIndex: row.__VIRTUAL_SCROLL_INDEX || rowIndex,\n        dataLength,\n        skipSpansMap: this.skipSpansMap,\n        virtualConfig: this.virtualConfig,\n        ...pick(this.$props, properties),\n        // 遍历的同时，计算后面的节点，是否会因为合并单元格跳过渲染\n      };\n      if (this.onCellClick) {\n        trProps.onCellClick = this.onCellClick;\n      }\n\n      const trNode = (\n        <TrElement\n          v-slots={this.$slots}\n          key={get(row, this.rowKey || 'id') || rowIndex}\n          {...trProps}\n          onRowMounted={this.handleRowMounted}\n        ></TrElement>\n      );\n      trNodeList.push(trNode);\n\n      // 执行展开行渲染\n      if (this.renderExpandedRow) {\n        const p = {\n          row,\n          index: rowIndex,\n          columns: this.columns,\n          tableWidth: this.tableWidth,\n          isWidthOverflow: this.isWidthOverflow,\n        };\n        const expandedContent = this.renderExpandedRow(p);\n        expandedContent && trNodeList.push(expandedContent);\n      }\n    });\n\n    const list = [getFullRow(columnLength, 'first-full-row'), ...trNodeList, getFullRow(columnLength, 'last-full-row')];\n\n    const isEmpty = !this.data?.length && !this.loading && !this.firstFullRow && !this.lastFullRow;\n\n    // 垫上隐藏的 tr 元素高度\n    const translate = `translateY(${this.virtualConfig?.translateY.value}px)`;\n    const posStyle = this.virtualConfig?.isVirtualScroll.value\n      ? {\n          transform: translate,\n          '-ms-transform': translate,\n          '-moz-transform': translate,\n          '-webkit-transform': translate,\n        }\n      : undefined;\n\n    return (\n      <tbody class={this.tbodyClasses} style={{ ...posStyle }}>\n        {isEmpty ? renderEmpty(this.columns) : list}\n      </tbody>\n    );\n  },\n});\n"],"names":["name","props","classPrefix","data","columns","ellipsisOverlayClassName","rowAndColFixedPosition","showColumnShadow","tableWidth","isWidthOverflow","virtualConfig","handleRowMounted","renderExpandedRow","firstFullRow","lastFullRow","pick","t","globalConfig","renderTNode","tableFullRowClasses","tbodyClasses","tableBaseClass","skipSpansMap","_createVNode","camelCase","rowKey","row","rowIndex","dataLength","trProps","_mergeProps","trNodeList","index","expandedContent","transform"],"mappings":"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"}