{"version":3,"file":"tfoot.mjs","sources":["../../../components/table/tfoot.tsx"],"sourcesContent":["import { SetupContext, h, defineComponent, PropType, toRefs } from 'vue';\nimport { isString } from 'lodash-es';\nimport { isFunction } from 'lodash-es';\nimport { get } from 'lodash-es';\nimport { BaseTableCellParams, RowspanColspan, TableRowData, TdBaseTableProps } from './type';\nimport { formatRowAttributes, formatRowClassNames } from './utils';\nimport { getColumnFixedStyles } from './hooks/useFixed';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport useRowspanAndColspan, { getCellKey } from './hooks/useRowspanAndColspan';\nimport { RowAndColFixedPosition } from './interface';\nimport useClassName from './hooks/useClassName';\nimport { Styles } from '../common';\n\nexport interface TFootProps {\n  rowKey: string;\n  // 是否固定表头\n  isFixedHeader: boolean;\n  // 固定列 left/right 具体值\n  rowAndColFixedPosition: RowAndColFixedPosition;\n  footData: TdBaseTableProps['footData'];\n  columns: TdBaseTableProps['columns'];\n  rowAttributes: TdBaseTableProps['rowAttributes'];\n  rowClassName: TdBaseTableProps['rowClassName'];\n  // 表尾吸底内容宽度\n  thWidthList?: { [colKey: string]: number };\n  footerSummary?: TdBaseTableProps['footerSummary'];\n  rowspanAndColspanInFooter: TdBaseTableProps['rowspanAndColspanInFooter'];\n\n  // 是否虚拟滚动\n  virtualScroll?: boolean;\n}\n\nexport default defineComponent({\n  name: 'TFoot',\n\n  props: {\n    rowKey: String,\n    isFixedHeader: Boolean,\n    rowAndColFixedPosition: Map as PropType<TFootProps['rowAndColFixedPosition']>,\n    footData: Array as PropType<TFootProps['footData']>,\n    columns: Array as PropType<TFootProps['columns']>,\n    rowAttributes: [Array, Object, Function] as PropType<TFootProps['rowAttributes']>,\n    rowClassName: [Array, String, Object, Function] as PropType<TFootProps['rowClassName']>,\n    thWidthList: [Object] as PropType<TFootProps['thWidthList']>,\n    footerSummary: [String, Function] as PropType<TFootProps['footerSummary']>,\n    rowspanAndColspanInFooter: Function as PropType<TFootProps['rowspanAndColspanInFooter']>,\n    virtualScroll: Boolean,\n  },\n\n  // eslint-disable-next-line\n  setup(props: TFootProps, context: SetupContext) {\n    const renderTNode = useTNodeJSX();\n    const classnames = useClassName();\n    const { footData, columns, rowKey, rowspanAndColspanInFooter } = toRefs(props);\n    const { skipSpansMap } = useRowspanAndColspan(footData, columns, rowKey, rowspanAndColspanInFooter);\n    const renderTFootCell = (p: BaseTableCellParams<TableRowData>) => {\n      const { col, row } = p;\n      if (isFunction(col.foot)) {\n        return col.foot(h, p);\n      }\n      if (isString(col.foot) && context.slots[col.foot]) {\n        return context.slots[col.foot](p) || col.foot;\n      }\n      return col.foot || get(row, col.colKey);\n    };\n\n    return {\n      skipSpansMap,\n      ...classnames,\n      renderTFootCell,\n      renderTNode,\n    };\n  },\n\n  render() {\n    if (!this.columns) return null;\n    // 虚拟滚动情况下，不使用 sticky 定位，外部通过 affix 实现 footer\n    const theadClasses = [this.tableFooterClasses.footer, { [this.tableFooterClasses.fixed]: this.isFixedHeader }];\n    const footerDomList = this.footData?.map((row, rowIndex) => {\n      const trAttributes = formatRowAttributes(this.rowAttributes, { row, rowIndex, type: 'foot' });\n      // 自定义行类名\n      const customClasses = formatRowClassNames(\n        this.rowClassName,\n        { row, rowIndex, type: 'foot' },\n        this.rowKey || 'id',\n      );\n      return (\n        <tr {...trAttributes} key={rowIndex} class={customClasses}>\n          {this.columns.map((col, colIndex) => {\n            // 合并单元格过滤\n            const cellSpans: RowspanColspan = {};\n            let spanState = null;\n            if (this.skipSpansMap.size) {\n              const cellKey = getCellKey(row, this.rowKey, col.colKey, colIndex);\n              spanState = this.skipSpansMap.get(cellKey) || {};\n              spanState?.rowspan > 1 && (cellSpans.rowspan = spanState.rowspan);\n              spanState?.colspan > 1 && (cellSpans.colspan = spanState.colspan);\n              if (spanState.skipped) return null;\n            }\n            const tdStyles = getColumnFixedStyles(\n              col,\n              colIndex,\n              this.rowAndColFixedPosition,\n              this.tableColFixedClasses,\n            );\n            const style: Styles = { ...tdStyles.style };\n            if (this.thWidthList?.[col.colKey]) {\n              style.width = `${this.thWidthList[col.colKey]}px`;\n            }\n            return (\n              <td {...{ key: col.colKey, ...cellSpans }} class={tdStyles.classes} style={style}>\n                {this.renderTFootCell({\n                  row,\n                  rowIndex,\n                  col,\n                  colIndex,\n                })}\n              </td>\n            );\n          })}\n        </tr>\n      );\n    });\n    const footerSummary = this.renderTNode('footerSummary');\n    // 都不存在，则不需要渲染 footer\n    if (!footerSummary && (!this.footData || !this.footData.length)) return null;\n    return (\n      // 虚拟滚动下，不显示 footer，但预留元素，用于高度计算\n      <tfoot ref=\"tFooterRef\" class={theadClasses} style={{ visibility: this.virtualScroll ? 'hidden' : 'visible' }}>\n        {footerSummary && (\n          <tr class={this.tableFullRowClasses.base}>\n            <td colspan={this.columns.length}>\n              <div class={this.tableFullRowClasses.innerFullElement}>{footerSummary}</div>\n            </td>\n          </tr>\n        )}\n        {footerDomList}\n      </tfoot>\n    );\n  },\n});\n"],"names":["defineComponent","name","props","rowKey","String","isFixedHeader","Boolean","rowAndColFixedPosition","Map","footData","Array","columns","rowAttributes","Object","Function","rowClassName","thWidthList","footerSummary","rowspanAndColspanInFooter","virtualScroll","setup","context","renderTNode","useTNodeJSX","classnames","useClassName","_toRefs","toRefs","_useRowspanAndColspan","useRowspanAndColspan","skipSpansMap","renderTFootCell","p","col","row","isFunction","foot","h","isString","slots","get","colKey","_objectSpread","render","_this$footData","_this","theadClasses","tableFooterClasses","footer","_defineProperty","fixed","footerDomList","map","rowIndex","trAttributes","formatRowAttributes","type","customClasses","formatRowClassNames","_createVNode","_mergeProps","colIndex","_this$thWidthList","cellSpans","spanState","size","_spanState","_spanState2","cellKey","getCellKey","rowspan","colspan","skipped","tdStyles","getColumnFixedStyles","tableColFixedClasses","style","width","concat","key","classes","length","visibility","tableFullRowClasses","base","innerFullElement"],"mappings":"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"}