@fe6/water-pro
Version: 
An enterprise-class UI design language and Vue-based implementation
143 lines (120 loc) • 4.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;
var _vue = require("vue");
var _table = _interopRequireDefault(require("../../../table"));
var _lodashEs = require("lodash");
var _shared = require("@fe6/shared");
var _const = require("../const");
var _vueTypes = _interopRequireDefault(require("../../../_util/vue-types"));
var _useTableContext = require("../hooks/use-table-context");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
var SUMMARY_ROW_KEY = '_row';
var SUMMARY_INDEX_KEY = '_index';
var _default = (0, _vue.defineComponent)({
  name: 'TableProFooter',
  props: {
    summaryFunc: {
      type: Function
    },
    summaryData: {
      type: Array
    },
    scroll: {
      type: Object
    },
    rowKey: _vueTypes.default.string.def('key')
  },
  setup: function setup(props) {
    var table = (0, _useTableContext.useTableContext)();
    var getDataSource = (0, _vue.computed)(function () {
      var summaryFunc = props.summaryFunc,
          summaryData = props.summaryData;
      if (summaryData === null || summaryData === void 0 ? void 0 : summaryData.length) {
        summaryData.forEach(function (item, i) {
          return item[props.rowKey] = "".concat(i);
        });
        return summaryData;
      }
      if (!(0, _shared.isFunction)(summaryFunc)) {
        return [];
      }
      var dataSource = (0, _vue.toRaw)((0, _vue.unref)(table.getDataSource()));
      dataSource = summaryFunc(dataSource);
      dataSource.forEach(function (item, i) {
        item[props.rowKey] = "".concat(i);
      });
      return dataSource;
    });
    var getColumns = (0, _vue.computed)(function () {
      var dataSource = (0, _vue.unref)(getDataSource);
      var columns = (0, _lodashEs.cloneDeep)(table.getColumns());
      var index = columns.findIndex(function (item) {
        return item.flag === _const.INDEX_COLUMN_FLAG;
      });
      var hasRowSummary = dataSource.some(function (item) {
        return Reflect.has(item, SUMMARY_ROW_KEY);
      });
      var hasIndexSummary = dataSource.some(function (item) {
        return Reflect.has(item, SUMMARY_INDEX_KEY);
      });
      if (index !== -1) {
        if (hasIndexSummary) {
          columns[index].customRender = function (_ref) {
            var record = _ref.record;
            return record[SUMMARY_INDEX_KEY];
          };
          columns[index].ellipsis = false;
        } else {
          Reflect.deleteProperty(columns[index], 'customRender');
        }
      }
      if (table.getRowSelection() && hasRowSummary) {
        var isFixed = columns.some(function (col) {
          return col.fixed === 'left';
        });
        columns.unshift(_extends(_extends({
          width: 60,
          title: 'selection',
          key: 'selectionKey',
          align: 'center'
        }, isFixed ? {
          fixed: 'left'
        } : {}), {
          customRender: function customRender(_ref2) {
            var record = _ref2.record;
            return record[SUMMARY_ROW_KEY];
          }
        }));
      }
      return columns;
    });
    return {
      getColumns: getColumns,
      getDataSource: getDataSource
    };
  },
  render: function render() {
    var _this = this;
    var footerNode = null;
    if (this.summaryFunc || this.summaryData) {
      footerNode = (0, _vue.createVNode)(_table.default, {
        "show-header": false,
        "bordered": false,
        "pagination": false,
        "data-source": this.getDataSource,
        "row-key": function rowKey(r) {
          return r[_this.rowKey];
        },
        "columns": this.getColumns,
        "table-layout": "fixed",
        "scroll": this.scroll
      }, null);
    }
    return footerNode;
  }
});
exports.default = _default;