{"version":3,"file":"tfoot.mjs","sources":["../../../../components/table/components/tfoot.tsx"],"sourcesContent":["import { SetupContext, h, defineComponent, PropType, toRefs } from 'vue';\nimport { get, isString, isFunction } from 'lodash-es';\nimport { useTNodeJSX } from '@tdesign/shared-hooks';\n\nimport { BaseTableCellParams, RowspanColspan, TableRowData, TdBaseTableProps } from '../type';\nimport { formatRowAttributes, formatRowClassNames } from '../utils';\nimport { getColumnFixedStyles } from '../hooks/useFixed';\nimport useRowspanAndColspan, { getCellKey } from '../hooks/useRowspanAndColspan';\nimport { RowAndColFixedPosition } from '../types';\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      if (!columns.value) return null;\n      // 虚拟滚动情况下，不使用 sticky 定位，外部通过 affix 实现 footer\n      const theadClasses = [\n        classnames.tableFooterClasses.footer,\n        { [classnames.tableFooterClasses.fixed]: props.isFixedHeader },\n      ];\n      const footerDomList = props.footData?.map((row, rowIndex) => {\n        const trAttributes = formatRowAttributes(props.rowAttributes, { row, rowIndex, type: 'foot' });\n        // 自定义行类名\n        const customClasses = formatRowClassNames(\n          props.rowClassName,\n          { row, rowIndex, type: 'foot' },\n          rowKey.value || 'id',\n        );\n        return (\n          <tr {...trAttributes} key={rowIndex} class={customClasses}>\n            {columns.value.map((col, colIndex) => {\n              // 合并单元格过滤\n              const cellSpans: RowspanColspan = {};\n              let spanState = null;\n              if (skipSpansMap.value.size) {\n                const cellKey = getCellKey(row, rowKey.value, col.colKey, colIndex);\n                spanState = skipSpansMap.value.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                props.rowAndColFixedPosition,\n                classnames.tableColFixedClasses,\n              );\n              const style: Styles = { ...tdStyles.style };\n              if (props.thWidthList?.[col.colKey]) {\n                style.width = `${props.thWidthList[col.colKey]}px`;\n              }\n              return (\n                <td {...{ key: col.colKey, ...cellSpans }} class={tdStyles.classes} style={style}>\n                  {renderTFootCell({\n                    row,\n                    rowIndex,\n                    col,\n                    colIndex,\n                  })}\n                </td>\n              );\n            })}\n          </tr>\n        );\n      });\n      const footerSummary = renderTNode('footerSummary');\n      // 都不存在，则不需要渲染 footer\n      if (!footerSummary && (!props.footData || !props.footData.length)) return null;\n      return (\n        // 虚拟滚动下，不显示 footer，但预留元素，用于高度计算\n        <tfoot class={theadClasses} style={{ visibility: props.virtualScroll ? 'hidden' : 'visible' }}>\n          {footerSummary && (\n            <tr class={classnames.tableFullRowClasses.base}>\n              <td colspan={columns.value.length}>\n                <div class={classnames.tableFullRowClasses.innerFullElement}>{footerSummary}</div>\n              </td>\n            </tr>\n          )}\n          {footerDomList}\n        </tfoot>\n      );\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","_props$footData","value","theadClasses","tableFooterClasses","footer","_defineProperty","fixed","footerDomList","map","rowIndex","trAttributes","formatRowAttributes","type","customClasses","formatRowClassNames","_createVNode","_mergeProps","colIndex","_props$thWidthList","cellSpans","spanState","size","_spanState","_spanState2","cellKey","getCellKey","rowspan","colspan","skipped","tdStyles","getColumnFixedStyles","tableColFixedClasses","style","_objectSpread","width","concat","key","classes","length","visibility","tableFullRowClasses","base","innerFullElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,YAAeA,eAAgB,CAAA;AAC7BC,EAAAA,IAAM,EAAA,OAAA;AAENC,EAAAA,KAAO,EAAA;AACLC,IAAAA,MAAQ,EAAAC,MAAA;AACRC,IAAAA,aAAe,EAAAC,OAAA;AACfC,IAAAA,sBAAwB,EAAAC,GAAA;AACxBC,IAAAA,QAAU,EAAAC,KAAA;AACVC,IAAAA,OAAS,EAAAD,KAAA;AACTE,IAAAA,aAAe,EAAA,CAACF,KAAO,EAAAG,MAAA,EAAQC,QAAQ,CAAA;IACvCC,YAAc,EAAA,CAACL,KAAO,EAAAN,MAAA,EAAQS,QAAQC,QAAQ,CAAA;IAC9CE,WAAA,EAAa,CAACH,MAAM,CAAA;AACpBI,IAAAA,aAAA,EAAe,CAACb,MAAA,EAAQU,QAAQ,CAAA;AAChCI,IAAAA,yBAA2B,EAAAJ,QAAA;AAC3BK,IAAAA,aAAe,EAAAb,OAAAA;GACjB;AAGAc,EAAAA,KAAA,WAAAA,KAAAA,CAAMlB,OAAmBmB,OAAuB,EAAA;AAC9C,IAAA,IAAMC,cAAcC,WAAY,EAAA,CAAA;AAChC,IAAA,IAAMC,aAAaC,YAAa,EAAA,CAAA;AAChC,IAAA,IAAAC,OAAA,GAAiEC,OAAOzB,KAAK,CAAA;MAArEO,QAAU,GAAAiB,OAAA,CAAVjB,QAAU;MAAAE,OAAA,GAAAe,OAAA,CAAAf,OAAA;MAASR,iBAAAA;MAAQe,yBAA0B,GAAAQ,OAAA,CAA1BR,yBAA0B,CAAA;IAC7D,IAAAU,qBAAA,GAAyBC,qBAAqBpB,QAAU,EAAAE,OAAA,EAASR,QAAQe,yBAAyB,CAAA;MAA1FY,YAAa,GAAAF,qBAAA,CAAbE,YAAa,CAAA;AACf,IAAA,IAAAC,eAAA,GAAkB,SAAlBA,eAAAA,CAAmBC,CAAyC,EAAA;AAC1D,MAAA,IAAEC,GAAK,GAAQD,CAAA,CAAbC,GAAK;QAAAC,GAAA,GAAQF,CAAA,CAARE,GAAA,CAAA;AACT,MAAA,IAAAC,UAAA,CAAWF,GAAI,CAAAG,IAAI,CAAG,EAAA;AACjB,QAAA,OAAAH,GAAA,CAAIG,IAAK,CAAAC,CAAA,EAAGL,CAAC,CAAA,CAAA;AACtB,OAAA;AACA,MAAA,IAAIM,SAASL,GAAI,CAAAG,IAAI,KAAKf,OAAQ,CAAAkB,KAAA,CAAMN,IAAIG,IAAO,CAAA,EAAA;AACjD,QAAA,OAAOf,QAAQkB,KAAM,CAAAN,GAAA,CAAIG,IAAM,CAAA,CAAAJ,CAAC,KAAKC,GAAI,CAAAG,IAAA,CAAA;AAC3C,OAAA;MACA,OAAOH,GAAI,CAAAG,IAAA,IAAQI,GAAI,CAAAN,GAAA,EAAKD,IAAIQ,MAAM,CAAA,CAAA;KACxC,CAAA;AAEA,IAAA,OAAO,YAAM;AAAA,MAAA,IAAAC,eAAA,CAAA;AACX,MAAA,IAAI,CAAC/B,OAAQ,CAAAgC,KAAA,EAAc,OAAA,IAAA,CAAA;MAE3B,IAAMC,YAAe,GAAA,CACnBpB,WAAWqB,kBAAmB,CAAAC,MAAA,EAAAC,eAAA,KAC3BvB,UAAA,CAAWqB,kBAAmB,CAAAG,KAAA,EAAQ9C,MAAMG,aAAc,CAC/D,CAAA,CAAA;AACA,MAAA,IAAM4C,mCAAgB/C,KAAM,CAAAO,QAAA,MAAAiC,IAAAA,IAAAA,eAAA,KAANA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAA,CAAgBQ,GAAI,CAAA,UAAChB,KAAKiB,QAAa,EAAA;AACrD,QAAA,IAAAC,YAAA,GAAeC,oBAAoBnD,KAAM,CAAAU,aAAA,EAAe;AAAEsB,UAAAA,GAAK,EAALA,GAAK;AAAAiB,UAAAA,QAAA,EAAAA,QAAA;AAAUG,UAAAA,IAAM,EAAA,MAAA;AAAO,SAAC,CAAA,CAAA;AAE7F,QAAA,IAAMC,aAAgB,GAAAC,mBAAA,CACpBtD,KAAM,CAAAa,YAAA,EACN;AAAEmB,UAAAA,GAAA,EAAAA,GAAA;AAAKiB,UAAAA,QAAU,EAAVA,QAAU;AAAAG,UAAAA,IAAA,EAAM,MAAA;AAAO,SAAA,EAC9BnD,OAAOwC,KAAS,IAAA,IAClB,CAAA,CAAA;AACA,QAAA,OAAAc,WAAA,CAAA,IAAA,EAAAC,UAAA,CACUN,YAAc,EAAA;AAAA,UAAA,KAAA,EAAKD,QAAU;UAAA,OAAOI,EAAAA,aAAAA;SACzC5C,CAAAA,EAAAA,CAAAA,OAAA,CAAQgC,KAAM,CAAAO,GAAA,CAAI,UAACjB,GAAA,EAAK0B,QAAa,EAAA;AAAA,UAAA,IAAAC,kBAAA,CAAA;UAEpC,IAAMC,YAA4B,EAAC,CAAA;UACnC,IAAIC,SAAY,GAAA,IAAA,CAAA;AACZ,UAAA,IAAAhC,YAAA,CAAaa,MAAMoB,IAAM,EAAA;YAAA,IAAAC,UAAA,EAAAC,WAAA,CAAA;AAC3B,YAAA,IAAMC,UAAUC,UAAW,CAAAjC,GAAA,EAAK/B,OAAOwC,KAAO,EAAAV,GAAA,CAAIQ,QAAQkB,QAAQ,CAAA,CAAA;YAClEG,SAAA,GAAYhC,YAAa,CAAAa,KAAA,CAAMH,GAAI,CAAA0B,OAAO,KAAK,EAAC,CAAA;AAChD,YAAA,CAAA,CAAAF,UAAA,GAAAF,SAAA,cAAAE,UAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,UAAA,CAAWI,OAAU,IAAA,CAAA,KAAMP,SAAU,CAAAO,OAAA,GAAUN,SAAU,CAAAM,OAAA,CAAA,CAAA;AACzD,YAAA,CAAA,CAAAH,WAAA,GAAAH,SAAA,cAAAG,WAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,WAAA,CAAWI,OAAU,IAAA,CAAA,KAAMR,SAAU,CAAAQ,OAAA,GAAUP,SAAU,CAAAO,OAAA,CAAA,CAAA;AACzD,YAAA,IAAIP,SAAU,CAAAQ,OAAA,EAAgB,OAAA,IAAA,CAAA;AAChC,WAAA;AACA,UAAA,IAAMC,QAAW,GAAAC,oBAAA,CACfvC,GAAA,EACA0B,QAAA,EACAzD,KAAM,CAAAK,sBAAA,EACNiB,UAAW,CAAAiD,oBACb,CAAA,CAAA;AACA,UAAA,IAAMC,KAAgB,GAAAC,aAAA,KAAKJ,QAAA,CAASG,KAAM,CAAA,CAAA;AACtC,UAAA,IAAA,CAAAd,kBAAA,GAAA1D,KAAA,CAAMc,WAAc,MAAA4C,IAAAA,IAAAA,kBAAA,KAApBA,KAAAA,CAAAA,IAAAA,kBAAA,CAAoB3B,GAAA,CAAIQ,MAAS,CAAA,EAAA;AACnCiC,YAAAA,KAAA,CAAME,KAAQ,GAAAC,EAAAA,CAAAA,MAAA,CAAG3E,KAAM,CAAAc,WAAA,CAAYiB,GAAI,CAAAQ,MAAA,CAAA,EAAA,IAAA,CAAA,CAAA;AACzC,WAAA;AACA,UAAA,OAAAgB,WAAA,CAAA,IAAA,EAAAC,UAAA,CAAAiB,aAAA,CAAA;YACYG,GAAA,EAAK7C,IAAIQ,MAAAA;AAAQ,WAAA,EAAGoB,SAAU,CAAA,EAAA;YAAA,OAAUU,EAAAA,QAAA,CAASQ,OAAS;YAAA,OAAOL,EAAAA,KAAAA;eACxE3C,eAAgB,CAAA;AACfG,YAAAA,GAAA,EAAAA,GAAA;AACAiB,YAAAA,QAAA,EAAAA,QAAA;AACAlB,YAAAA,GAAA,EAAAA,GAAA;AACA0B,YAAAA,QAAA,EAAAA,QAAAA;AACF,WAAC;AAGP,SAAC;AAGP,OAAC,CAAA,CAAA;AACK,MAAA,IAAA1C,aAAA,GAAgBK,YAAY,eAAe,CAAA,CAAA;AAEjD,MAAA,IAAI,CAACL,aAAkB,KAAA,CAACf,MAAMO,QAAY,IAAA,CAACP,MAAMO,QAAS,CAAAuE,MAAA,CAAA,EAAgB,OAAA,IAAA,CAAA;AAGxE,MAAA,OAAAvB,WAAA,CAAA,OAAA,EAAA;AAAA,QAAA,OAAA,EAAcb,YAAc;QAAA,OAAO,EAAA;AAAEqC,UAAAA,UAAY,EAAA/E,KAAA,CAAMiB,aAAgB,GAAA,QAAA,GAAW,SAAA;AAAU,SAAA;OACzFF,EAAAA,CAAAA,aAAA,IAAAwC,WAAA,CAAA,IAAA,EAAA;QAAA,OACYjC,EAAAA,UAAA,CAAW0D,oBAAoBC,IAAAA;AACxC,OAAA,EAAA,CAAA1B,WAAA,CAAA,IAAA,EAAA;QAAA,SAAa9C,EAAAA,OAAQ,CAAAgC,KAAA,CAAMqC,MAAAA;;eACbxD,EAAAA,UAAA,CAAW0D,mBAAoB,CAAAE,gBAAAA;OAAmBnE,EAAAA,CAAAA,cAFjE,CAAA,CAAA,CAAA,CAAA,CAAA,EAMFgC,aAAA,CAAA,CAAA,CAAA;KAGP,CAAA;AACF,GAAA;AACF,CAAC,CAAA;;;;"}