{"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"}