element-plus
Version:
A Component Library for Vue 3
1 lines • 5.35 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","names":[],"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"],"mappings":";;;;;;;AAmBA,2BAAe,gBAAgB;CAC7B,MAAM;CAEN,OAAO;EACL,OAAO;GACL,MAAM;GACN,SAAS;GACV;EACD,OAAO;GACL,UAAU;GACV,MAAM;GACP;EACD,eAAe;EACf,SAAS;EACT,QAAQ;EACR,aAAa;GACX,MAAM;GACN,eAAe;AACb,WAAO;KACL,MAAM;KACN,OAAO;KACR;;GAEJ;EACF;CACD,MAAM,OAAO;EACX,MAAM,SAAS,OAAO,oBAAoB;EAC1C,MAAM,KAAK,aAAa,QAAQ;EAChC,MAAM,EAAE,gBAAgB,eAAe,YAAY,SACjD,MACD;EACD,MAAM,EAAE,oBAAoB,oBAAoB,kBAAkB,OAAQ;AAE1E,SAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACD;;CAEH,SAAS;EACP,MAAM,EAAE,SAAS,eAAe,gBAAgB,eAAe,YAC7D;EACF,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK;EACpC,IAAI,OAAgD,EAAE;AACtD,MAAI,cACF,QAAO,cAAc;GACnB;GACA;GACD,CAAC;MAEF,SAAQ,SAAS,QAAQ,UAAU;AACjC,OAAI,UAAU,GAAG;AACf,SAAK,SAAS;AACd;;GAEF,MAAM,SAAS,KAAK,KAAK,SAAS,OAAO,KAAK,OAAO,UAAU,CAAC;GAChE,MAAM,aAAuB,EAAE;GAC/B,IAAI,YAAY;AAChB,UAAO,SAAS,UAAU;AACxB,QAAI,CAAC,OAAO,MAAM,CAAC,MAAM,EAAE;AACzB,iBAAY;KACZ,MAAM,UAAU,GAAG,QAAQ,MAAM,IAAI,CAAC;AACtC,gBAAW,KAAK,UAAU,QAAQ,SAAS,EAAE;;KAE/C;GACF,MAAM,YAAY,KAAK,IAAI,MAAM,MAAM,WAAW;AAClD,OAAI,CAAC,UACH,MAAK,SAAS,OAAO,QAAQ,MAAM,SAAS;IAC1C,MAAM,QAAQ,OAAO,KAAK;AAC1B,QAAI,CAAC,OAAO,MAAM,CAAC,MAAM,CACvB,QAAO,OAAO,YACX,OAAO,MAAM,QAAQ,KAAK,IAAI,WAAW,GAAG,CAAC,CAC/C;QAED,QAAO;MAER,EAAE;OAEL,MAAK,SAAS;IAEhB;AAEJ,SAAO,EACL,EAAE,SAAS,CACT,EAAE,MAAM,EAAE,EAAE,CACV,GAAG,QAAQ,KAAK,QAAQ,cACtB,EACE,MACA;GACE,KAAK;GACL,SAAS,OAAO;GAChB,SAAS,OAAO;GAChB,OAAO,eAAe,SAAS,UAAU;GACzC,OAAO,cAAc,QAAQ,UAAU;GACxC,EACD,CACE,EACE,OACA,EACE,OAAO,CAAC,QAAQ,OAAO,eAAe,EACvC,EACD,CAAC,KAAK,WAAW,CAClB,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC,CACH;;CAEJ,CAAC"}