{"version":3,"file":"index.mjs","sources":["../../../../../../../../packages/components/table/src/table-footer/index.ts"],"sourcesContent":["import { defineComponent, h, inject } from 'vue'\nimport { useNamespace } from '@hd-front-end/hooks'\nimport useLayoutObserver from '../layout-observer'\nimport { TABLE_INJECTION_KEY } from '../tokens'\nimport useStyle from './style-helper'\n\nimport type { Store } from '../store'\nimport type { PropType, VNode } from 'vue'\nimport type { DefaultRow, Sort, SummaryMethod, Table } from '../table/defaults'\n\nexport interface TableFooter<T extends DefaultRow> {\n  fixed: string\n  store: Store<T>\n  summaryMethod: SummaryMethod<T>\n  sumText: string\n  border: boolean\n  defaultSort: Sort\n}\n\nexport default defineComponent({\n  name: 'ElTableFooter',\n\n  props: {\n    fixed: {\n      type: String,\n      default: '',\n    },\n    store: {\n      required: true,\n      type: Object as PropType<TableFooter<any>['store']>,\n    },\n    summaryMethod: Function as PropType<TableFooter<any>['summaryMethod']>,\n    sumText: String,\n    border: Boolean,\n    defaultSort: {\n      type: Object as PropType<TableFooter<any>['defaultSort']>,\n      default: () => {\n        return {\n          prop: '',\n          order: '',\n        }\n      },\n    },\n  },\n  setup(props) {\n    const parent = inject(TABLE_INJECTION_KEY) as Table<any>\n    const ns = useNamespace('table')\n    const { getCellClasses, getCellStyles, columns } = useStyle(\n      props as TableFooter<any>\n    )\n    const { onScrollableChange, onColumnsChange } = useLayoutObserver(parent!)\n\n    return {\n      ns,\n      onScrollableChange,\n      onColumnsChange,\n      getCellClasses,\n      getCellStyles,\n      columns,\n    }\n  },\n  render() {\n    const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } =\n      this\n    const data = this.store.states.data.value\n    let sums: (string | VNode | number | undefined)[] = []\n    if (summaryMethod) {\n      sums = summaryMethod({\n        columns,\n        data,\n      })\n    } else {\n      columns.forEach((column, index) => {\n        if (index === 0) {\n          sums[index] = sumText\n          return\n        }\n        const values = data.map((item) => Number(item[column.property]))\n        const precisions: number[] = []\n        let notNumber = true\n        values.forEach((value) => {\n          if (!Number.isNaN(+value)) {\n            notNumber = false\n            const decimal = `${value}`.split('.')[1]\n            precisions.push(decimal ? decimal.length : 0)\n          }\n        })\n        const precision = Math.max.apply(null, precisions)\n        if (!notNumber) {\n          sums[index] = values.reduce((prev, curr) => {\n            const value = Number(curr)\n            if (!Number.isNaN(+value)) {\n              return Number.parseFloat(\n                (prev + curr).toFixed(Math.min(precision, 20))\n              )\n            } else {\n              return prev\n            }\n          }, 0)\n        } else {\n          sums[index] = ''\n        }\n      })\n    }\n    return h(\n      h('tfoot', [\n        h('tr', {}, [\n          ...columns.map((column, cellIndex) =>\n            h(\n              'td',\n              {\n                key: cellIndex,\n                colspan: column.colSpan,\n                rowspan: column.rowSpan,\n                class: getCellClasses(columns, cellIndex),\n                style: getCellStyles(column, cellIndex),\n              },\n              [\n                h(\n                  'div',\n                  {\n                    class: ['cell', column.labelClassName],\n                  },\n                  [sums[cellIndex]]\n                ),\n              ]\n            )\n          ),\n        ]),\n      ])\n    )\n  },\n})\n"],"names":[],"mappings":"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"}