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