"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports["default"] = void 0;

require("maycur-antd/lib/icon/style/css");

var _icon = _interopRequireDefault(require("maycur-antd/lib/icon"));

require("maycur-antd/lib/button/style/css");

var _button = _interopRequireDefault(require("maycur-antd/lib/button"));

require("maycur-antd/lib/popover/style/css");

var _popover = _interopRequireDefault(require("maycur-antd/lib/popover"));

var _react = _interopRequireWildcard(require("react"));

var _table = require("maycur-antd/lib/table");

var _reactResizable = require("react-resizable");

var _lodash = _interopRequireDefault(require("lodash"));

var _classnames = _interopRequireDefault(require("classnames"));

var _FilterDropDown = require("./FilterDropDown");

var _FilterStateBar = _interopRequireDefault(require("./FilterStateBar"));

var _PopSelect = _interopRequireDefault(require("./PopSelect/PopSelect"));

var _RcTable = _interopRequireDefault(require("../lib/RcTable"));

var _MkSearch = _interopRequireDefault(require("../MkSearch"));

var _Empty = _interopRequireDefault(require("../Empty"));

var _utils = _interopRequireDefault(require("../utils/utils"));

require("maycur-antd/lib/table/style/css");

var _mkTranslate = _interopRequireDefault(require("../utils/mkTranslate"));

function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }

function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }

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); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }

function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }

var prefix = _utils["default"].prefixCls;
/* title 宽度变动 */

var ResizeableTitle = function ResizeableTitle(props) {
  var onResize = props.onResize,
      width = props.width,
      restProps = _objectWithoutProperties(props, ["onResize", "width"]);

  if (!width) {
    return _react["default"].createElement("th", restProps);
  }

  return _react["default"].createElement(_reactResizable.Resizable, {
    width: width,
    height: 0,
    onResize: onResize
  }, _react["default"].createElement("th", restProps));
};

var MkTable = function MkTable(option) {
  return function (WrapperComponent) {
    var _temp;

    var defaultOption = {
      isFixHeader: false,
      resizeAble: false,
      disableLoad: false,
      hidePagination: false,
      firstDisplayColumns: [],
      isCrossPageSelect: false,
      searchKey: 'keyword'
    };
    option = Object.assign(defaultOption, option);
    var defaultPageSizeOptions = [10, 20, 50, 100];

    if (option.pageSize && defaultPageSizeOptions.indexOf(option.pageSize) < 0) {
      defaultPageSizeOptions.push(option.pageSize);
      defaultPageSizeOptions.sort(function (a, b) {
        return a - b;
      });
    }

    _lodash["default"].forEach(defaultPageSizeOptions, function (val, index) {
      defaultPageSizeOptions[index] = val + '';
    });

    return _temp =
    /*#__PURE__*/
    function (_Component) {
      _inherits(_temp, _Component);

      function _temp(_props) {
        var _this;

        _classCallCheck(this, _temp);

        _this = _possibleConstructorReturn(this, _getPrototypeOf(_temp).call(this, _props));

        _this.localeProcess = function () {
          _mkTranslate["default"].getNameSpace('MkTable').then(function (t) {
            _this.setState({
              t: t
            });
          });
        };

        _this.columnConvert = function (columns) {
          var filters = _this.state.filters;

          var cloneColumns = _lodash["default"].cloneDeep(columns);

          var typeComponentMap = {
            'dateRange': _FilterDropDown.DateFilter,
            'search': _FilterDropDown.FuzzFilter,
            'checkbox': _FilterDropDown.CheckFilter,
            'department': _FilterDropDown.DepartmentPickerFilter,
            'numberRange': _FilterDropDown.NumberRangeFilter,
            'budgetment': _FilterDropDown.BudgetmentFilter,
            //预算组织筛选框
            'budgetSubject': _FilterDropDown.BudgetSubjectFilter //预算科目筛选框

          };
          /* 设置内置的column属性 */

          _lodash["default"].forEach(cloneColumns, function (col) {
            if (col.filterOption) {
              col.filterDropdown = function (_ref) {
                var setSelectedKeys = _ref.setSelectedKeys,
                    selectedKeys = _ref.selectedKeys,
                    confirm = _ref.confirm,
                    clearFilters = _ref.clearFilters;
                var Cop = typeComponentMap[col.filterOption.type];
                return _react["default"].createElement(Cop, _extends({}, col, {
                  setSelectedKeys: setSelectedKeys,
                  selectedKeys: selectedKeys,
                  confirm: confirm,
                  setFiltersMap: _this.setFiltersMap,
                  clearFilters: clearFilters,
                  columnModify: _this.columnModify,
                  columns: _this.state.columns
                }));
              };

              col.filteredValue = filters[col.filterKey || col.key] || null;
            }
          });

          return cloneColumns || [];
        };

        _this.handleResize = function (index) {
          return function (e, _ref2) {
            var size = _ref2.size;

            _this.setState(function (_ref3) {
              var columns = _ref3.columns;

              var nextColumns = _toConsumableArray(columns);

              nextColumns[index] = _objectSpread({}, nextColumns[index], {
                width: size.width
              });
              return {
                columns: nextColumns
              };
            });
          };
        };

        _this.onChange = function (pagination, filters, sorter) {
          var columns = _this.state.columns;
          var currentFilters = _this.state.filters;
          var isClearSelection = false;
          if (!_lodash["default"].isEqual(currentFilters, filters)) isClearSelection = true;

          _lodash["default"].forEach(filters, function (value, key) {
            // if (value) {
            var column = _lodash["default"].find(columns, {
              key: key
            });

            _this.columnModify(column, {
              key: 'filteredValue',
              value: value
            }); // }

          });

          _lodash["default"].forEach(currentFilters, function (value, key) {
            // 如果当前筛选中不存在新的筛选，需要将这部分置为空
            if (!filters[key]) {
              var column = _lodash["default"].find(columns, {
                key: key
              });

              _this.columnModify(column, {
                key: 'filteredValue',
                value: null
              });
            }
          });

          _lodash["default"].forEach(columns, function (column) {
            if (sorter && sorter.field && column.key === sorter.field) {
              _this.columnModify(column, {
                key: 'sortOrder',
                value: sorter.order
              });
            } else if (column.sortOrder) {
              _this.columnModify(column, {
                key: 'sortOrder',
                value: false
              });
            }
          });

          _this.setState({
            filters: filters,
            sorter: {
              field: sorter.field,
              order: sorter.order
            },
            pagination: pagination
          }, function () {
            _this.dataFetch({
              isClearSelection: isClearSelection
            });
          });
        };

        _this.columnModify = function (column, dataPair) {
          if (column) {
            var columns = _this.state.columns;

            var idx = _lodash["default"].findIndex(columns, {
              dataIndex: column.dataIndex
            });

            if (dataPair && idx > -1) {
              var key = dataPair.key,
                  value = dataPair.value; // column[key] = value;

              column = _objectSpread({}, column, _defineProperty({}, key, value));
              columns[idx] = column;

              _this.setState({
                columns: columns
              });
            }
          }
        };

        _this.filterChangeNotice = function () {
          var filterChange = _this.props.filterChange;
          var filters = _this.state.filters;

          if (filterChange && typeof filterChange === 'function') {
            filterChange(filters);
          }
        };

        _this.clearAll = function () {
          var theFilters = _this.$filterBar.convertFilter(_this.state.filters);

          _this.$filterBar.clear(theFilters);
        };

        _this.clearSearch = function () {
          _this.search = _defineProperty({}, option.searchKey, '');
        };

        _this.removeSingleFilter = function (filterKeys) {
          var _this$state = _this.state,
              filters = _this$state.filters,
              pagination = _this$state.pagination,
              sorter = _this$state.sorter;

          var newFilter = _lodash["default"].cloneDeep(filters);
          /* 不要直接对state中的属性做delete操作（会导致无法正常render组件），clone一个来处理*/


          if (_lodash["default"].isArray(filterKeys)) {
            _lodash["default"].forEach(filterKeys, function (key) {
              newFilter[key] = null;
            });
          } else {
            newFilter[filterKeys] = null;
          }

          _this.onChange(pagination, newFilter, sorter);
        };

        _this.fetchCustomFilterData = function (filter) {
          var _this$state2 = _this.state,
              pagination = _this$state2.pagination,
              sorter = _this$state2.sorter;

          _this.onChange(pagination, filter, sorter);
        };

        _this.setFiltersMap = function (key, filters) {
          var filtersMap = _this.state.filtersMap;

          _this.setState({
            filtersMap: _objectSpread({}, filtersMap, _defineProperty({}, key, filters))
          });
        };

        _this.generateTable = function (params) {
          /* 当前不支持列冻结的功能 */
          var _this$state3 = _this.state,
              columns = _this$state3.columns,
              loading = _this$state3.loading,
              pagination = _this$state3.pagination,
              dataSource = _this$state3.dataSource,
              selectedRowKeys = _this$state3.selectedRowKeys,
              selectAble = _this$state3.selectAble,
              selectAbleLock = _this$state3.selectAbleLock,
              loadProps = _this$state3.loadProps,
              hideColumnCodeList = _this$state3.hideColumnCodeList,
              tableMinWidth = _this$state3.tableMinWidth,
              isReady = _this$state3.isReady;
          var rowKey = params.rowKey,
              scroll = params.scroll,
              _params$rowSelection = params.rowSelection,
              rowSelectionOption = _params$rowSelection === void 0 ? {} : _params$rowSelection,
              data = params.data,
              _params$tableId = params.tableId,
              tableId = _params$tableId === void 0 ? 'tableId' : _params$tableId,
              onRow = params.onRow;
          var _option = option,
              isCrossPageSelect = _option.isCrossPageSelect,
              childrenColumnName = _option.childrenColumnName;

          if (data && data.length > 0) {
            dataSource = data;
          }

          var wrapOnRow = function wrapOnRow(record) {
            return {
              onClick: function onClick(e) {
                if (rowSelectionOption.type && rowSelectionOption.type === 'radio') {
                  _this.setState({
                    selectedRows: [record],
                    selectedRowKeys: [record[rowKey]]
                  });
                }

                if (typeof onRow === 'function') {
                  var instanceOnRow = onRow(record);

                  if (instanceOnRow && _typeof(instanceOnRow.onClick)) {
                    instanceOnRow.onClick(e);
                  }
                }
              }
            };
          };

          var onSelectionChange = rowSelectionOption.onSelectionChange;
          _this.rowKey = rowKey;

          var rowSelection = _objectSpread({}, rowSelectionOption, {
            onChange: function onChange(selectedRowKeys, selectedRows) {
              if (childrenColumnName) return;
              /* 注意：onChange中的selectedRows，因为antd不支持跨页选取，所以selectedRows只包含当前页选中的数据 */

              var currentSelectRows = [],
                  currentSelectedRowKeys = [];

              if (isCrossPageSelect) {
                /* 跨页选取 */
                if (rowSelectionOption.type !== 'radio') {
                  var unSelectedRows = _lodash["default"].differenceWith(dataSource, selectedRows, _lodash["default"].isEqual);

                  var unSelectedRowKeys = _lodash["default"].map(unSelectedRows, function (row) {
                    return row[rowKey];
                  });

                  currentSelectRows = _lodash["default"].cloneDeep(_this.state.selectedRows);

                  if (selectedRows.length > 0) {
                    currentSelectRows = _this.modifySelectRows({
                      currentSelectRows: currentSelectRows,
                      type: 'update',
                      rows: selectedRows,
                      rowKeys: selectedRowKeys
                    });
                  }

                  if (unSelectedRows.length > 0) {
                    currentSelectRows = _this.modifySelectRows({
                      currentSelectRows: currentSelectRows,
                      type: 'delete',
                      rows: unSelectedRows,
                      rowKeys: unSelectedRowKeys
                    });
                  }

                  _lodash["default"].forEach(currentSelectRows, function (row) {
                    currentSelectedRowKeys.push(row[rowKey]);
                  });
                } else {
                  currentSelectRows = selectedRows;
                  currentSelectedRowKeys = selectedRowKeys;
                }
              } else {
                /* 非跨页选取 */
                currentSelectRows = selectedRows;
                currentSelectedRowKeys = selectedRowKeys;
              }

              _this.setState({
                selectedRows: currentSelectRows,
                selectedRowKeys: currentSelectedRowKeys
              }, function () {
                if (typeof onSelectionChange === 'function') {
                  onSelectionChange(currentSelectedRowKeys, currentSelectRows);
                }
              });
            },
            onSelect: function onSelect(record, selected, selectedRows, nativeEvent) {
              _this.onSelect(record, selected);
            },
            onSelectAll: function onSelectAll(selected, selectedRows, changeRows) {
              _this.onSelectAll(selected, selectedRows, changeRows);
            },
            selectedRowKeys: selectedRowKeys
          });

          var visibleColumns = _lodash["default"].filter(columns, function (col) {
            return !hideColumnCodeList.includes(col.dataIndex);
          });

          var tableCls = (0, _classnames["default"])("".concat(prefix, "-mktable-container"), {
            'table-empty': !dataSource || dataSource && dataSource.length === 0,
            'enable-scroll-x': !(scroll && scroll.x),
            'row-clickable': typeof onRow === 'function',
            'fix-header': option.isFixHeader
          });
          var tableScroll = {};
          tableScroll = _lodash["default"].assign({}, option.isFixHeader ? {
            y: true,
            x: tableMinWidth
          } : {});

          if (_this.tableId && _this.tableId !== tableId) {
            _this.tableReset();

            _this.tableId = tableId;
            return null;
          } else {
            _this.tableId = tableId;
            return _react["default"].createElement("div", {
              className: tableCls,
              ref: function ref(_ref4) {
                _this.tableRef = _ref4;
              }
            }, _react["default"].createElement(_table.FlexTable, _extends({}, params, {
              onRow: wrapOnRow,
              key: tableId,
              rowSelection: selectAble ? rowSelection : selectAbleLock ? {
                selectedRowKeys: selectedRowKeys
              } : null,
              components: _this.components,
              columns: visibleColumns,
              scroll: tableScroll,
              pagination: option.hidePagination ? false : pagination,
              childrenColumnName: childrenColumnName,
              dataSource: dataSource,
              onChange: _this.onChange,
              loading: _objectSpread({}, loadProps, {
                spinning: loading
              }),
              locale: {
                emptyText: function emptyText() {
                  return isReady && _react["default"].createElement(_Empty["default"], null);
                }
              },
              OptionTable: _RcTable["default"]
            })));
          }
        };

        _this.generateFilter = function () {
          var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
          var _this$state4 = _this.state,
              filters = _this$state4.filters,
              columns = _this$state4.columns,
              dataSource = _this$state4.dataSource,
              pagination = _this$state4.pagination,
              filtersMap = _this$state4.filtersMap;
          return _react["default"].createElement(_FilterStateBar["default"], _extends({
            filters: filters,
            filtersMap: filtersMap,
            columns: columns,
            totalCount: pagination.total ? pagination.total : dataSource.length,
            removeFilter: _this.removeSingleFilter,
            onRefFilterBar: _this.onRefFilterBar,
            fetchCustomFilterData: _this.fetchCustomFilterData
          }, props));
        };

        _this.searchTable = function (value) {
          _this.setState({
            pagination: _objectSpread({}, _this.state.pagination, {
              current: 1
            })
          }, function () {
            _this.search = _defineProperty({}, option.searchKey, value);

            _this.dataFetch();
          });
        };

        _this.setRef = function (el) {
          _this.searchEl = el;
        };

        _this.generateSearch = function () {
          var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
          return _react["default"].createElement(_MkSearch["default"], {
            type: "gray",
            animate: props.animate,
            wrappedWidth: props.wrappedWidth,
            placeholder: props.placeholder,
            style: props.style,
            setRef: _this.setRef,
            onSearch: _this.searchTable,
            onChange: function onChange(e) {
              return _this.searchWordChange(e.target.value);
            }
          });
        };

        _this.onRefFilterBar = function (ref) {
          _this.$filterBar = ref;
        };

        _this.setColumns = function (originColumns) {
          var columns = [],
              hideColumnCodeList = [];
          var tableMinWidth = 0;
          originColumns = _lodash["default"].cloneDeep(originColumns);

          if (originColumns) {
            var initSorter = {},
                initFilter = {};

            _lodash["default"].forEach(originColumns, function (column) {
              if (column.sortOrder) {
                initSorter.field = column.dataIndex;
                initSorter.order = column.sortOrder;
              } // 修复 filteredValue值为布尔值时，默认筛选没有被选中的 bug


              if (column.filteredValue || typeof column.filteredValue === 'boolean') {
                initFilter[column.dataIndex] = column.filteredValue;
              }

              if (option.firstDisplayColumns.length > 0 && !option.firstDisplayColumns.includes(column.dataIndex)) {
                hideColumnCodeList.push(column.dataIndex);
              }

              if (column.fixed && !column.width) {
                column.fixed = false;
              }

              if (column.popover) {
                column.className = 'td-ellipsis';

                column.render = function (value, row) {
                  return _react["default"].createElement(_popover["default"], {
                    content: value,
                    trigger: "hover",
                    overlayClassName: 'mkbs-table-cell-popover',
                    placement: "topLeft"
                  }, value);
                };
              }

              tableMinWidth += Number(column.width || column.minWidth || 100);
            });

            columns = _this.columnConvert(originColumns);

            if (option.resizeAble) {
              columns = columns.map(function (col, index) {
                return _objectSpread({}, col, {
                  onHeaderCell: function onHeaderCell(column) {
                    return {
                      width: column.width,
                      onResize: _this.handleResize(index)
                    };
                  }
                });
              });
            }

            _this.setState({
              columns: columns,
              sorter: initSorter,
              filters: initFilter,
              hideColumnCodeList: hideColumnCodeList,
              tableMinWidth: tableMinWidth
            });
          }
        };

        _this.setLoadStatus = function (status) {
          var loading = option.disableLoad ? false : status;

          _this.setState({
            loading: loading
          });
        };

        _this.dataFetch = function () {
          var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
          var isClearSelection = params.isClearSelection;
          if (typeof _this.fetchDataSourceFn !== 'function') return;
          var _this$state5 = _this.state,
              filters = _this$state5.filters,
              pagination = _this$state5.pagination,
              sorter = _this$state5.sorter;
          var dataSourceTableId = _this.tableId;

          var fnExe = _this.fetchDataSourceFn(filters, {
            pageSize: pagination.pageSize,
            current: pagination.current ? pagination.current : 1
          }, {
            field: sorter.field,
            order: sorter.order === 'descend' ? 'desc' : 'asc'
          }, _this.search);

          var dataSource;

          if (fnExe && fnExe.then) {
            _this.setLoadStatus(true);

            fnExe.then(function (resp) {
              _this.setLoadStatus(false);

              if (resp.code === 'success' && dataSourceTableId === _this.tableId) {
                dataSource = resp.data || [];
                /* 如果触发需要清空所有选中的数据 */

                if (isClearSelection) _this.setAllFlag(false);

                _this.setState(function (_ref5) {
                  var pagination = _ref5.pagination,
                      selectedRowKeys = _ref5.selectedRowKeys;
                  var newSelectedRowKeys = [];
                  var newSelectedRows = [];

                  if (!isClearSelection) {
                    newSelectedRows = _lodash["default"].filter(dataSource, function (item) {
                      if (selectedRowKeys.includes(item[_this.rowKey])) {
                        newSelectedRowKeys.push(item[_this.rowKey]);
                        return true;
                      } else {
                        return false;
                      }
                    });
                  }

                  return {
                    dataSource: dataSource,
                    selectedRows: newSelectedRows,
                    selectedRowKeys: newSelectedRowKeys,
                    pagination: _objectSpread({}, pagination, {
                      showQuickJumper: pagination.pageSize < resp.total,
                      total: resp.total
                    }),
                    isReady: true
                  };
                });
              }
            }, function () {
              _this.setLoadStatus(false);
            });
          } else {
            dataSource = fnExe;

            if (dataSource && _lodash["default"].isArray(dataSource)) {
              _this.setState({
                dataSource: dataSource,
                isReady: true
              });
            }
          }
        };

        _this.setDataFetchFn = function (fn) {
          if (typeof fn === 'function') {
            _this.fetchDataSourceFn = fn;
          }
        };

        _this.setSelectAble = function (val) {
          _this.setState(function (_ref6) {
            var selectAbleLock = _ref6.selectAbleLock,
                selectedRowKeys = _ref6.selectedRowKeys,
                selectAble = _ref6.selectAble;
            return {
              selectAble: val ? true : false,
              selectedRowKeys: selectAble !== val ? [] : selectedRowKeys,
              selectAbleLock: selectAble !== val ? true : selectAbleLock
            };
          });
          /* selectedRowKeys在table组件中需要延后执行,antd的table组件当前在移除checkbox行选择的时候，是无法移除选中状态 */


          setTimeout(function () {
            _this.setState({
              selectAbleLock: false
            });
          }, 100);
        };

        _this.setAllFlag = function (isAll) {
          var dataSource = _this.state.dataSource;

          var _assertThisInitialize = _assertThisInitialized(_this),
              rowKey = _assertThisInitialize.rowKey;

          var _newSelectedRowKeys = [];
          var _newSelectedRows = [];

          if (isAll) {
            dataSource.forEach(function (item) {
              _newSelectedRowKeys.push(item[rowKey]);

              _newSelectedRows.push(item);
            });

            _this.setState({
              selectedRowKeys: _newSelectedRowKeys,
              selectedRows: _newSelectedRows,
              allSelectedRows: _newSelectedRows
            });
          } else {
            _this.setState({
              selectedRowKeys: [],
              selectedRows: [],
              allSelectedRows: [],
              canceledRowKeys: [],
              canceledRows: []
            });
          }

          _this.setState({
            allFlag: isAll
          });
        };

        _this.onSelect = function (record, selected) {
          var _this$state6 = _this.state,
              allSelectedRows = _this$state6.allSelectedRows,
              selectedRowKeys = _this$state6.selectedRowKeys,
              selectedRows = _this$state6.selectedRows,
              allFlag = _this$state6.allFlag,
              canceledRowKeys = _this$state6.canceledRowKeys,
              canceledRows = _this$state6.canceledRows;

          var _assertThisInitialize2 = _assertThisInitialized(_this),
              rowKey = _assertThisInitialize2.rowKey;

          if (selected) {
            // 如果是全选状态下
            if (allFlag) {
              canceledRows = _this.removeFromCollection([record], canceledRows, rowKey, 'object');
              canceledRowKeys = _this.removeFromCollection([record], canceledRowKeys, rowKey, 'string');
            } else {
              allSelectedRows.push(record);
            }
          } else {
            if (allFlag) {
              canceledRowKeys.push(record[rowKey]);
              canceledRows.push(record);
            } else {
              allSelectedRows = _this.removeFromCollection([record], allSelectedRows, rowKey, 'object');
            }
          }

          var _option2 = option,
              childrenColumnName = _option2.childrenColumnName,
              parentKey = _option2.parentKey;

          if (childrenColumnName) {
            var isParent = record[childrenColumnName] === undefined || !!record[childrenColumnName];

            if (isParent) {
              // 父级被选中/取消
              var childRows = record[childrenColumnName] || [];
              var childKeys = childRows.map(function (_ref7) {
                var key = _ref7[rowKey];
                return key;
              });

              if (selected) {
                // 如果选中父级，先找出之前未选中的子集并添加
                var addKeys = childKeys.filter(function (key) {
                  return !selectedRowKeys.includes(key);
                });
                var addRows = [];

                if (addKeys.length) {
                  addRows = childRows.filter(function (_ref8) {
                    var key = _ref8[rowKey];
                    return addKeys.includes(key);
                  });
                }

                addKeys.push(record[rowKey]);
                addRows.push(record);

                _this.setState({
                  selectedRowKeys: [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(addKeys)),
                  selectedRows: [].concat(_toConsumableArray(selectedRows), _toConsumableArray(addRows))
                });
              } else {
                // 取消父级选中，则需要删除之前选中的所有子集 
                var removeKeys = [].concat(_toConsumableArray(childKeys), [record[rowKey]]);

                _this.setState({
                  selectedRowKeys: selectedRowKeys.filter(function (key) {
                    return !removeKeys.includes(key);
                  }),
                  selectedRows: selectedRows.filter(function (_ref9) {
                    var key = _ref9[rowKey];
                    return !removeKeys.includes(key);
                  })
                });
              }
            } else {
              // 子集被选中/取消
              var dataSource = _this.state.dataSource;
              var _pKey = record[parentKey];
              var parent = dataSource.find(function (_ref10) {
                var key = _ref10[rowKey];
                return key === _pKey;
              });
              var pKey = parent[rowKey];

              if (parent) {
                var _key = record[rowKey];

                var _childKeys = (parent[childrenColumnName] || []).map(function (_ref11) {
                  var key = _ref11[rowKey];
                  return key;
                });

                if (selected) {
                  // 如果被选中，需要找到该父级下的所有子集是否被选中,全部选中则选中父级
                  var _addKeys = [_key];
                  var _addRows = [record];

                  if (_childKeys.every(function (key) {
                    return key === _key || selectedRowKeys.includes(key);
                  })) {
                    _addKeys.push(pKey);

                    _addRows.push(parent);
                  }

                  _this.setState({
                    selectedRowKeys: [].concat(_toConsumableArray(selectedRowKeys), _addKeys),
                    selectedRows: [].concat(_toConsumableArray(selectedRows), _addRows)
                  });
                } else {
                  var _removeKeys = [pKey, _key];

                  _this.setState({
                    selectedRowKeys: selectedRowKeys.filter(function (key) {
                      return !_removeKeys.includes(key);
                    }),
                    selectedRows: selectedRows.filter(function (_ref12) {
                      var key = _ref12[rowKey];
                      return !_removeKeys.includes(key);
                    })
                  });
                }
              }
            }
          }

          _this.setState({
            allSelectedRows: allSelectedRows,
            canceledRowKeys: canceledRowKeys,
            canceledRows: canceledRows
          });
        };

        _this.onSelectAll = function (selected, selectedRows, changeRows) {
          var _assertThisInitialize3 = _assertThisInitialized(_this),
              rowKey = _assertThisInitialize3.rowKey;

          var _this$state7 = _this.state,
              allSelectedRows = _this$state7.allSelectedRows,
              allFlag = _this$state7.allFlag,
              canceledRowKeys = _this$state7.canceledRowKeys,
              canceledRows = _this$state7.canceledRows;

          if (selected) {
            // 如果是全选状态下
            if (allFlag) {
              canceledRows = _this.removeFromCollection(changeRows, canceledRows, rowKey, 'object');
              canceledRowKeys = _this.removeFromCollection(changeRows, canceledRowKeys, rowKey, 'string');
            } else {
              allSelectedRows = allSelectedRows.concat(changeRows);
            }
          } else {
            if (allFlag) {
              canceledRows = canceledRows.concat(changeRows);
              canceledRowKeys = canceledRows.concat(changeRows.map(function (_ref13) {
                var key = _ref13[rowKey];
                return key;
              }));
            } else {
              allSelectedRows = _this.removeFromCollection(changeRows, allSelectedRows, _this.rowKey, 'object');
            }
          } // 处理树形结构


          var _option3 = option,
              childrenColumnName = _option3.childrenColumnName;

          if (childrenColumnName) {
            if (selected) {
              var dataSource = _this.state.dataSource;
              var childrenRows = dataSource.map(function (_ref14) {
                var _ref14$childrenColumn = _ref14[childrenColumnName],
                    rows = _ref14$childrenColumn === void 0 ? [] : _ref14$childrenColumn;
                return rows;
              });
              var allRows = dataSource.concat.apply(dataSource, _toConsumableArray(childrenRows));

              _this.setState({
                selectedRowKeys: allRows.map(function (_ref15) {
                  var key = _ref15[rowKey];
                  return key;
                }),
                selectedRows: allRows
              });
            } else {
              _this.setState({
                selectedRowKeys: [],
                selectedRows: []
              });
            }
          }

          _this.setState({
            allSelectedRows: allSelectedRows,
            canceledRows: canceledRows,
            canceledRowKeys: canceledRowKeys
          });
        };

        _this.removeFromCollection = function (records, collection, rowKey, type) {
          var keys = records.map(function (_ref16) {
            var key = _ref16[rowKey];
            return key;
          });
          var arr = collection || [];

          if (type === 'object') {
            return arr.filter(function (_ref17) {
              var key = _ref17[rowKey];
              return !keys.includes(key);
            });
          } else return arr.filter(function (key) {
            return !keys.includes(key);
          });
        };

        _this.resetSelectRows = function () {
          _this.setState({
            selectedRows: [],
            selectedRowKeys: [],
            allSelectedRows: []
          });
        };

        _this.modifySelectRows = function (operate) {
          var type = operate.type,
              rows = operate.rows,
              currentSelectRows = operate.currentSelectRows;
          var result = null;

          var _update = function _update() {
            var rebuildSelectRows = _lodash["default"].unionWith(currentSelectRows, rows, _lodash["default"].isEqual);

            result = rebuildSelectRows;
          };

          var _delete = function _delete() {
            var rebuildSelectRows = _lodash["default"].differenceWith(currentSelectRows, rows, _lodash["default"].isEqual);

            result = rebuildSelectRows;
          };

          switch (type) {
            case 'update':
              _update();

              break;

            case 'delete':
              _delete();

              break;

            default:
              break;
          }

          return result;
        };

        _this.customColumns = function () {
          var _this$state8 = _this.state,
              columns = _this$state8.columns,
              hideColumnCodeList = _this$state8.hideColumnCodeList,
              t = _this$state8.t;
          var columnsTreeData = [],
              defaultChecked = [];

          _lodash["default"].forEach(columns, function (col) {
            if (!col.meanLess) {
              columnsTreeData.push({
                code: col.dataIndex,
                name: col.title
              });

              if (!hideColumnCodeList.includes(col.dataIndex)) {
                defaultChecked.push({
                  code: col.dataIndex,
                  name: col.title
                });
              }
            }
          });

          return _react["default"].createElement(_PopSelect["default"], {
            options: columnsTreeData,
            defaultValue: defaultChecked,
            close: _this.setHideColumnCodeList
          }, _react["default"].createElement(_button["default"], {
            size: "default",
            type: "default"
          }, t('mkTable.btn')));
        };

        _this.setHideColumnCodeList = function (data) {
          var columns = _this.state.columns;
          var hideColumnCodeList = [];

          _lodash["default"].forEach(columns, function (col) {
            var findIndex = _lodash["default"].findIndex(data, {
              code: col.dataIndex
            });

            if (findIndex === -1 && !col.meanLess) {
              hideColumnCodeList.push(col.dataIndex);
            }
          });

          _this.setState({
            hideColumnCodeList: hideColumnCodeList
          });
        };

        _this.tableReset = function () {
          _this.setState(function () {
            return _this.originState;
          });
        };

        _this.state = {
          columns: [],
          filters: {},
          dataSource: [],
          loading: false,
          loadProps: {
            indicator: _react["default"].createElement(_icon["default"], {
              type: "loading-3-quarters",
              style: {
                fontSize: 24
              },
              spin: true
            })
          },
          pagination: {
            pageSize: option && option.pageSize ? option.pageSize : 20,
            defaultPageSize: option && option.pageSize ? option.pageSize : 20,
            // showTotal: (total) => {
            //     return <span>总数{total}条</span>
            // },
            pageSizeOptions: defaultPageSizeOptions,
            showSizeChanger: true,
            total: 0,
            size: 'small'
          },
          allSelectedRows: [],
          //所有选中过的data列，支持跨页选取
          selectedRows: [],
          selectedRowKeys: [],
          selectAble: false,
          selectAbleLock: false,
          sorter: {},
          hideColumnCodeList: [],
          allFlag: false,
          canceledRows: [],
          canceledRowKeys: [],
          tableMinWidth: 0,
          isReady: false,
          filtersMap: {},
          t: _mkTranslate["default"].noop()
        };
        _this.components = {
          header: {
            cell: ResizeableTitle
          }
        };
        _this.fetchDataSourceFn = null;
        _this.tableRef = null;
        _this.wrappedComponent = null;
        _this.tableId = undefined;
        _this.search = _defineProperty({}, option.searchKey, '');
        _this.originState = _lodash["default"].cloneDeep(_this.state);
        _this.searchWordChange = _lodash["default"].debounce(_this.searchTable, 800);

        _this.localeProcess();

        return _this;
      }

      _createClass(_temp, [{
        key: "setTableState",

        /* 设置table的local state，抛给Wrapper组件使用 */
        value: function setTableState() {}
        /* 设置table可选与否 */

      }, {
        key: "render",
        value: function render() {
          var _this2 = this;

          return _react["default"].createElement(WrapperComponent, _extends({
            generateTable: this.generateTable,
            generateFilter: this.generateFilter,
            generateSearch: this.generateSearch,
            dataFetch: this.dataFetch,
            setColumns: this.setColumns,
            setSelectAble: this.setSelectAble,
            setDataFetchFn: this.setDataFetchFn,
            resetSelectRows: this.resetSelectRows,
            customColumns: this.customColumns,
            setAllFlag: this.setAllFlag,
            onChange: this.onChange,
            clearAll: this.clearAll,
            clearSearch: this.clearSearch,
            searchEleRef: this.searchEl,
            ref: function ref(_ref18) {
              return _this2.wrappedComponent = _ref18;
            }
          }, this.state, this.props));
        }
      }]);

      return _temp;
    }(_react.Component), _temp;
  };
};

var _default = MkTable;
exports["default"] = _default;