"use strict";
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const index = require("../../../../hooks/use-namespace/index.js");
const layoutObserver = require("../layout-observer.js");
const tokens = require("../tokens.js");
const styleHelper = require("./style-helper.js");
const vue = require("vue");
var table_footer_default = vue.defineComponent({
  name: "ElTableFooter",
  props: {
    fixed: {
      type: String,
      default: ""
    },
    store: {
      required: true,
      type: Object
    },
    summaryMethod: Function,
    sumText: String,
    border: Boolean,
    defaultSort: {
      type: Object,
      default: () => {
        return {
          prop: "",
          order: ""
        };
      }
    }
  },
  setup(props) {
    const parent = vue.inject(tokens.TABLE_INJECTION_KEY);
    const ns = index.useNamespace("table");
    const { getCellClasses, getCellStyles, columns } = styleHelper.default(props);
    const { onScrollableChange, onColumnsChange } = layoutObserver.default(parent);
    return {
      ns,
      onScrollableChange,
      onColumnsChange,
      getCellClasses,
      getCellStyles,
      columns
    };
  },
  render() {
    const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this;
    const data = this.store.states.data.value;
    let sums = [];
    if (summaryMethod) sums = summaryMethod({
      columns,
      data
    });
    else columns.forEach((column, index2) => {
      if (index2 === 0) {
        sums[index2] = sumText;
        return;
      }
      const values = data.map((item) => Number(item[column.property]));
      const precisions = [];
      let notNumber = true;
      values.forEach((value) => {
        if (!Number.isNaN(+value)) {
          notNumber = false;
          const decimal = `${value}`.split(".")[1];
          precisions.push(decimal ? decimal.length : 0);
        }
      });
      const precision = Math.max.apply(null, precisions);
      if (!notNumber) sums[index2] = values.reduce((prev, curr) => {
        const value = Number(curr);
        if (!Number.isNaN(+value)) return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
        else return prev;
      }, 0);
      else sums[index2] = "";
    });
    return vue.h(vue.h("tfoot", [vue.h("tr", {}, [...columns.map((column, cellIndex) => vue.h("td", {
      key: cellIndex,
      colspan: column.colSpan,
      rowspan: column.rowSpan,
      class: getCellClasses(columns, cellIndex),
      style: getCellStyles(column, cellIndex)
    }, [vue.h("div", { class: ["cell", column.labelClassName] }, [sums[cellIndex]])]))])]));
  }
});
exports.default = table_footer_default;
