{"version":3,"file":"index.mjs","sources":["../../../../../../../packages/components/table/src/table-footer/index.ts"],"sourcesContent":["import { defineComponent, h } from 'vue'\nimport { hGutter, hColgroup } from '../h-helper'\nimport useStyle from './style-helper'\nimport type { Store } from '../store'\n\nimport type { PropType } from 'vue'\nimport type { DefaultRow, Sort, SummaryMethod } from '../table/defaults'\nexport interface TableFooter<T> {\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<DefaultRow>['store']>,\n    },\n    summaryMethod: Function as PropType<\n      TableFooter<DefaultRow>['summaryMethod']\n    >,\n    sumText: String,\n    border: Boolean,\n    defaultSort: {\n      type: Object as PropType<TableFooter<DefaultRow>['defaultSort']>,\n      default: () => {\n        return {\n          prop: '',\n          order: '',\n        }\n      },\n    },\n  },\n  setup(props) {\n    const { hasGutter, getRowClasses, columns } = useStyle(\n      props as TableFooter<DefaultRow>\n    )\n    return {\n      getRowClasses,\n      hasGutter,\n      columns,\n    }\n  },\n  render() {\n    let sums = []\n    if (this.summaryMethod) {\n      sums = this.summaryMethod({\n        columns: this.columns,\n        data: this.store.states.data.value,\n      })\n    } else {\n      this.columns.forEach((column, index) => {\n        if (index === 0) {\n          sums[index] = this.sumText\n          return\n        }\n        const values = this.store.states.data.value.map((item) =>\n          Number(item[column.property])\n        )\n        const precisions = []\n        let notNumber = true\n        values.forEach((value) => {\n          if (!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 (!isNaN(value)) {\n              return parseFloat((prev + curr).toFixed(Math.min(precision, 20)))\n            } else {\n              return prev\n            }\n          }, 0)\n        } else {\n          sums[index] = ''\n        }\n      })\n    }\n    return h(\n      'table',\n      {\n        class: 'el-table__footer',\n        cellspacing: '0',\n        cellpadding: '0',\n        border: '0',\n      },\n      [\n        hColgroup(this.columns, this.hasGutter),\n        h(\n          'tbody',\n          {\n            class: [{ 'has-gutter': this.hasGutter }],\n          },\n          [\n            h('tr', {}, [\n              ...this.columns.map((column, cellIndex) =>\n                h(\n                  'td',\n                  {\n                    key: cellIndex,\n                    colspan: column.colSpan,\n                    rowspan: column.rowSpan,\n                    class: [\n                      ...this.getRowClasses(column, cellIndex),\n                      'el-table__cell',\n                    ],\n                  },\n                  [\n                    h(\n                      'div',\n                      {\n                        class: ['cell', column.labelClassName],\n                      },\n                      [sums[cellIndex]]\n                    ),\n                  ]\n                )\n              ),\n              this.hasGutter && hGutter(),\n            ]),\n          ]\n        ),\n      ]\n    )\n  },\n})\n"],"names":[],"mappings":";;;;AAgBA,kBAAe,gBAAgB;AAAA,EAC7B,MAAM;AAAA,EAEN,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA;AAAA,IAEX,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA;AAAA,IAER,eAAe;AAAA,IAGf,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS,MAAM;AACb,eAAO;AAAA,UACL,MAAM;AAAA,UACN,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKf,MAAM,OAAO;AACX,UAAM,EAAE,WAAW,eAAe,YAAY,SAC5C;AAEF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,EAGJ,SAAS;AACP,QAAI,OAAO;AACX,QAAI,KAAK,eAAe;AACtB,aAAO,KAAK,cAAc;AAAA,QACxB,SAAS,KAAK;AAAA,QACd,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA;AAAA,WAE1B;AACL,WAAK,QAAQ,QAAQ,CAAC,QAAQ,UAAU;AACtC,YAAI,UAAU,GAAG;AACf,eAAK,SAAS,KAAK;AACnB;AAAA;AAEF,cAAM,SAAS,KAAK,MAAM,OAAO,KAAK,MAAM,IAAI,CAAC,SAC/C,OAAO,KAAK,OAAO;AAErB,cAAM,aAAa;AACnB,YAAI,YAAY;AAChB,eAAO,QAAQ,CAAC,UAAU;AACxB,cAAI,CAAC,MAAM,QAAQ;AACjB,wBAAY;AACZ,kBAAM,UAAU,GAAG,QAAQ,MAAM,KAAK;AACtC,uBAAW,KAAK,UAAU,QAAQ,SAAS;AAAA;AAAA;AAG/C,cAAM,YAAY,KAAK,IAAI,MAAM,MAAM;AACvC,YAAI,CAAC,WAAW;AACd,eAAK,SAAS,OAAO,OAAO,CAAC,MAAM,SAAS;AAC1C,kBAAM,QAAQ,OAAO;AACrB,gBAAI,CAAC,MAAM,QAAQ;AACjB,qBAAO,WAAY,QAAO,MAAM,QAAQ,KAAK,IAAI,WAAW;AAAA,mBACvD;AACL,qBAAO;AAAA;AAAA,aAER;AAAA,eACE;AACL,eAAK,SAAS;AAAA;AAAA;AAAA;AAIpB,WAAO,EACL,SACA;AAAA,MACE,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa;AAAA,MACb,QAAQ;AAAA,OAEV;AAAA,MACE,UAAU,KAAK,SAAS,KAAK;AAAA,MAC7B,EACE,SACA;AAAA,QACE,OAAO,CAAC,EAAE,cAAc,KAAK;AAAA,SAE/B;AAAA,QACE,EAAE,MAAM,IAAI;AAAA,UACV,GAAG,KAAK,QAAQ,IAAI,CAAC,QAAQ,cAC3B,EACE,MACA;AAAA,YACE,KAAK;AAAA,YACL,SAAS,OAAO;AAAA,YAChB,SAAS,OAAO;AAAA,YAChB,OAAO;AAAA,cACL,GAAG,KAAK,cAAc,QAAQ;AAAA,cAC9B;AAAA;AAAA,aAGJ;AAAA,YACE,EACE,OACA;AAAA,cACE,OAAO,CAAC,QAAQ,OAAO;AAAA,eAEzB,CAAC,KAAK;AAAA;AAAA,UAKd,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;;;;"}