UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 6.82 kB
{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-footer/index.ts"],"sourcesContent":["import { defineComponent, h, inject } from 'vue'\nimport { useNamespace } from '@element-plus/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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"}