"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");

var _typeof = require("@babel/runtime/helpers/typeof");

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

var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));

var _initializerDefineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerDefineProperty"));

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

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

var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));

var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));

var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));

var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));

var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));

var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));

var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));

var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor"));

var _initializerWarningHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerWarningHelper"));

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

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

var _moment = _interopRequireDefault(require("moment"));

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

var _FilterSettingModal = _interopRequireDefault(require("../FilterSettingModal"));

var _FilterStateBarItem = _interopRequireDefault(require("../FilterStateBarItem"));

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

var _reactI18next = require("react-i18next");

var _i18next = _interopRequireDefault(require("i18next"));

var _lodashDecorators = require("lodash-decorators");

var _dec, _class, _descriptor;

function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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 _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }

function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }

var prefix = _utils.default.prefixCls; // 递归找到该key对应的column

var findColumn = function findColumn() {
  var columns = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  var key = arguments.length > 1 ? arguments[1] : undefined;
  var keyName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'key';
  var len = columns.length;

  for (var i = 0; i < len; i++) {
    var _c = columns[i];

    if (_c.children && _c.children.length) {
      var res = findColumn(_c.children, key, keyName);
      if (res) return res;
    } else {
      if (_c[keyName] === key) return _c;
    }
  }
};

var componentCls = "".concat(prefix, "-mktable-filterbar");
var FilterStateBar = (_dec = (0, _lodashDecorators.Debounce)(300), (_class = /*#__PURE__*/function (_Component) {
  (0, _inherits2.default)(FilterStateBar, _Component);

  var _super = _createSuper(FilterStateBar);

  function FilterStateBar(props) {
    var _this;

    (0, _classCallCheck2.default)(this, FilterStateBar);
    _this = _super.call(this, props);

    _this.localeProcess = function (key, ns) {
      _mkTranslate.default.getNameSpace(ns).then(function (t) {
        _this.setState((0, _defineProperty2.default)({}, key, t));
      });
    };

    _this.onSettingBtnClick = function () {
      var _this$props = _this.props,
          columns = _this$props.columns,
          filterConfig = _this$props.filterConfig,
          ModalManager = _this$props.ModalManager;
      ModalManager.open({
        component: _FilterSettingModal.default,
        componentProps: {
          columns: columns,
          filterConfig: filterConfig,
          ModalManager: ModalManager
        }
      }).then(function (resDate) {
        _this.fetchCustomFilterData(resDate ? resDate : {
          code: 'ALL'
        });
      }).catch(function () {});
    };

    _this.clear = function (allFilters) {
      var isNeedRefresh = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
      var removeFilter = _this.props.removeFilter;
      var filterKeys = [];

      if (isNeedRefresh) {
        _lodash.default.forEach(allFilters, function (filter) {
          filterKeys.push(filter.key);
        });
      }

      if (typeof removeFilter === 'function') removeFilter(filterKeys);
    };

    _this.fetchCustomFilterData = function (filter) {
      _this.setState({
        activeFilter: filter.code
      });

      var _this$props2 = _this.props,
          fetchCustomFilterData = _this$props2.fetchCustomFilterData,
          columns = _this$props2.columns;
      var customFilterItemList = filter.customFilterItemList;
      var _filter = {}; // 清除原来的筛选
      // this.clear(columns);

      _lodash.default.each(customFilterItemList, function (item) {
        // const column = _.find(columns, { key: item.key });
        // 改为递归查找
        var column = findColumn(columns, item.key);
        var type = column.filterOption.type;

        if (type === 'checkbox' || type === 'customTagSelect') {
          _filter[item.key] = item.customFilterItemDto[column.filterKey || column.key];
        } else if (type === 'dateRange') {
          if (item.customFilterItemDto.startDate) _filter[item.key] = [(0, _moment.default)(item.customFilterItemDto.startDate), (0, _moment.default)(item.customFilterItemDto.endDate)];
          if (item.customFilterItemDto.beginTime) _filter[item.key] = [(0, _moment.default)(item.customFilterItemDto.beginTime), (0, _moment.default)(item.customFilterItemDto.endTime)];
          if (item.customFilterItemDto.beginSignCompletedTime) _filter[item.key] = [(0, _moment.default)(item.customFilterItemDto.beginSignCompletedTime), (0, _moment.default)(item.customFilterItemDto.endSignCompletedTime)];
          if (item.customFilterItemDto.beginAuditTime) _filter[item.key] = [(0, _moment.default)(item.customFilterItemDto.beginAuditTime), (0, _moment.default)(item.customFilterItemDto.endAuditTime)];
        } else if (type === 'department') {
          _filter[item.key] = item.customFilterItemDto[column.filterKey || column.key];
        } else if (type === 'budgetment') {
          _filter[item.key] = item.customFilterItemDto.budgetOrgCodes;
        } else if (type === 'budgetSubject') {
          _filter[item.key] = item.customFilterItemDto.budgetSubjectCodes;
        } else if (type === 'numberRange') {
          _filter[item.key] = "".concat(item.customFilterItemDto.minAmount, "~").concat(item.customFilterItemDto.maxAmount);

          if (item.key === 'creditScore') {
            _filter[item.key] = "".concat(item.customFilterItemDto.minCreditScore, "~").concat(item.customFilterItemDto.maxCreditScore);
          }
        }
      });

      fetchCustomFilterData && fetchCustomFilterData(_filter);
    };

    _this.toggleExpand = function () {
      _this.setState(function (_ref) {
        var expanded = _ref.expanded;
        return {
          expanded: !expanded
        };
      });
    };

    _this.renderCustomFilter = function (_ref2) {
      var totalCount = _ref2.totalCount,
          customFilters = _ref2.customFilters,
          componentCls = _ref2.componentCls;
      var _this$state = _this.state,
          activeFilter = _this$state.activeFilter,
          expanded = _this$state.expanded,
          t = _this$state.t;
      return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", {
        className: "filter-label"
      }, t('filterStateBar.filterLabel')), /*#__PURE__*/_react.default.createElement("div", {
        className: 'flex-1'
      }, /*#__PURE__*/_react.default.createElement("div", {
        className: "".concat(componentCls, "-filter-wrapper ").concat(expanded ? 'expanded' : '')
      }, customFilters.map(function (filter) {
        return /*#__PURE__*/_react.default.createElement("div", {
          className: "".concat(activeFilter === filter.code ? 'active' : '', " filter custom"),
          key: filter.code,
          onClick: function onClick() {
            return _this.fetchCustomFilterData(filter);
          }
        }, /*#__PURE__*/_react.default.createElement("span", null, filter.filterName));
      }), /*#__PURE__*/_react.default.createElement("span", {
        className: 'fm fm-setting-o filter-set-btn',
        onClick: _this.onSettingBtnClick
      }, t('filterStateBar.setBtn')), /*#__PURE__*/_react.default.createElement("div", {
        className: 'filter-data-state'
      }, /*#__PURE__*/_react.default.createElement(_reactI18next.Trans, {
        i18n: _i18next.default,
        i18nKey: "filterStateBar.totalCount",
        ns: "MK_Table",
        values: {
          n: totalCount
        },
        components: [/*#__PURE__*/_react.default.createElement("span", null), /*#__PURE__*/_react.default.createElement("span", {
          className: 'filter-data-state_num'
        })],
        children: "\u5171<span className={'filter-data-state_num'}>{{n}}</span>\u6761\u8BB0\u5F55"
      })))), customFilters.length > 1 && /*#__PURE__*/_react.default.createElement("div", {
        className: "filter-arrow",
        onClick: _this.toggleExpand
      }, expanded ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, t('filterStateBar.up'), " ", /*#__PURE__*/_react.default.createElement("span", {
        className: "fm fm-angle-up"
      })) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, t('filterStateBar.down'), " ", /*#__PURE__*/_react.default.createElement("span", {
        className: "fm fm-angle-down"
      }))));
    };

    _this.renderFilter = function (_ref3) {
      var totalCount = _ref3.totalCount,
          theFilters = _ref3.theFilters,
          componentCls = _ref3.componentCls;
      var t = _this.state.t;
      return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("span", null, t('filterStateBar.title')), /*#__PURE__*/_react.default.createElement("div", {
        className: 'flex-1'
      }, /*#__PURE__*/_react.default.createElement("div", {
        className: "".concat(componentCls, "-filter-wrapper")
      }, /*#__PURE__*/_react.default.createElement("div", {
        className: "filters-wrapper"
      }, theFilters.map(function (filter, index) {
        return /*#__PURE__*/_react.default.createElement(_FilterStateBarItem.default, {
          filter: filter,
          remove: _this.remove,
          key: filter.key
        });
      })), /*#__PURE__*/_react.default.createElement("div", {
        className: 'filter-data-state'
      }, /*#__PURE__*/_react.default.createElement(_reactI18next.Trans, {
        i18n: _i18next.default,
        i18nKey: "filterStateBar.totalCount",
        ns: "MK_Table",
        values: {
          n: totalCount
        },
        components: [/*#__PURE__*/_react.default.createElement("span", null), /*#__PURE__*/_react.default.createElement("span", {
          className: 'filter-data-state_num'
        })],
        children: "\u5171<span className={'filter-data-state_num'}>{{n}}</span>\u6761\u8BB0\u5F55"
      })), theFilters.length > 0 && !_this.props.hideReset ? /*#__PURE__*/_react.default.createElement("div", {
        className: 'filter-clear'
      }, /*#__PURE__*/_react.default.createElement(_button.default, {
        type: "primary",
        size: "small",
        onClick: function onClick() {
          _this.clear(theFilters);
        }
      }, t('MK_Global:reset'))) : null)));
    };

    (0, _initializerDefineProperty2.default)(_this, "resize", _descriptor, (0, _assertThisInitialized2.default)(_this));
    _this.state = {
      activeFilter: props.filterConfig.notSelectDefault ? '' : 'ALL',
      t: _mkTranslate.default.noop()
    };
    _this.remove = _this.remove.bind((0, _assertThisInitialized2.default)(_this));
    _this.convertFilter = _this.convertFilter.bind((0, _assertThisInitialized2.default)(_this));

    _this.localeProcess('t', 'MK_Table');

    _this.filterRef = /*#__PURE__*/(0, _react.createRef)();
    return _this;
  }

  (0, _createClass2.default)(FilterStateBar, [{
    key: "remove",
    value: function remove(filter) {
      var removeFilter = this.props.removeFilter;
      if (typeof removeFilter === 'function') removeFilter(filter.key);
    }
  }, {
    key: "convertFilter",
    value: function convertFilter(filters) {
      var _this$props3 = this.props,
          columns = _this$props3.columns,
          filtersMap = _this$props3.filtersMap;
      var t = this.state.t;
      var newFilters = [];

      _lodash.default.forEach(filters, function (val, key) {
        // let filterColumn = key in filtersMap ? filtersMap[key] : _.find(columns, { dataIndex: key });
        // 改为递归查找
        var filterColumn = key in filtersMap ? filtersMap[key] : findColumn(columns, key, 'dataIndex');
        var filterLabel = filterColumn ? filterColumn.title : t('filterStateBar.empty');
        if (val === undefined || val === null || !filterColumn) return; // 不加!filterColumn 在关联申请单时默认筛选项会出bug

        var filterValue = _lodash.default.isArray(val) ? val : [val];

        if (filterValue && !_lodash.default.isEmpty(filterValue)) {
          newFilters.push({
            key: key,
            label: filterLabel,
            value: filterValue,
            filterColumn: filterColumn
          });
        }
      });

      return newFilters;
    }
    /* 清空所有filter条件 */

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

      this.props.onRefFilterBar(this);

      var _ref4 = this.props.filterConfig || {},
          showCustomFilter = _ref4.showCustomFilter;

      if (showCustomFilter) {
        setTimeout(this.resize, 1000);
        window.addEventListener('resize', this.resize);
        setTimeout(function () {
          var filterConfig = _this2.props.filterConfig;

          if (filterConfig !== null && filterConfig !== void 0 && filterConfig.customFilters) {
            var notSelectDefault = filterConfig.notSelectDefault,
                customFilters = filterConfig.customFilters;

            _this2.setState({
              activeFilter: notSelectDefault ? '' : 'ALL'
            }, function () {
              var defaultFilterItem = _lodash.default.find(customFilters, {
                isDefault: true
              });

              defaultFilterItem && _this2.fetchCustomFilterData(defaultFilterItem);
            });
          }
        });
      }
    }
  }, {
    key: "UNSAFE_componentWillReceiveProps",
    value: function UNSAFE_componentWillReceiveProps(nextProps) {
      var _this3 = this;

      var customFilters = this.props.filterConfig.customFilters;
      var _nextProps$filterConf = nextProps.filterConfig,
          newFilters = _nextProps$filterConf.customFilters,
          notSelectDefault = _nextProps$filterConf.notSelectDefault;

      if (customFilters !== newFilters) {
        // notSelectDefault 不默认选中全部，有些页面有初始筛选
        this.setState({
          activeFilter: notSelectDefault ? '' : 'ALL'
        }, function () {
          var defaultFilterItem = _lodash.default.find(newFilters, {
            isDefault: true
          });

          defaultFilterItem && _this3.fetchCustomFilterData(defaultFilterItem);
        });
      }
    }
  }, {
    key: "render",
    value: function render() {
      var _this$props4 = this.props,
          filters = _this$props4.filters,
          totalCount = _this$props4.totalCount,
          filterConfig = _this$props4.filterConfig;

      var _ref5 = filterConfig || {},
          showCustomFilter = _ref5.showCustomFilter,
          _ref5$customFilters = _ref5.customFilters,
          customFilters = _ref5$customFilters === void 0 ? [] : _ref5$customFilters;

      var t = this.state.t;

      var _customFilters = [{
        code: 'ALL',
        filterName: t('dateFilter.all'),
        customFilterItemList: []
      }].concat((0, _toConsumableArray2.default)(_utils.default.sortList(customFilters)));

      var theFilters = this.convertFilter(filters);
      return /*#__PURE__*/_react.default.createElement("div", {
        className: componentCls,
        ref: this.filterRef
      }, showCustomFilter ? this.renderCustomFilter({
        totalCount: totalCount,
        customFilters: _customFilters,
        componentCls: componentCls
      }) : this.renderFilter({
        totalCount: totalCount,
        theFilters: theFilters,
        componentCls: componentCls
      }));
    }
  }]);
  return FilterStateBar;
}(_react.Component), (_descriptor = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "resize", [_dec], {
  configurable: true,
  enumerable: true,
  writable: true,
  initializer: function initializer() {
    var _this4 = this;

    return function () {
      // 计算自定义筛选的宽度
      var $filterBar = _this4.filterRef.current;
      var $label = $filterBar.getElementsByClassName('filter-label'),
          $arrow = $filterBar.getElementsByClassName('filter-arrow'),
          $filters = $filterBar.getElementsByClassName('flex-1');
      var filterBarWidth = $filterBar.clientWidth,
          labelWidth = $label[0].clientWidth,
          arrowWidth = $arrow[0] && $arrow[0].clientWidth + 20 || 0,
          // 20为左右margin
      filtersWidth = $filters[0].clientWidth;
      var filtersMaxWidth = filterBarWidth - labelWidth - arrowWidth;

      if (filtersWidth > filtersMaxWidth) {
        $filters[0].style.width = filtersMaxWidth + 'px';
      } // 计算是否要显示展开按钮


      var filters = $filterBar.getElementsByClassName('filter');

      var filtersTotalWidth = _lodash.default.reduce(filters, function (sum, item) {
        return sum += item.clientWidth + 8;
      }, 0); // 所有自定义筛选项宽度+配置按钮宽度+总数宽度


      filtersTotalWidth = filtersTotalWidth + 66 + 84;

      if (filtersTotalWidth < filtersMaxWidth) {
        $arrow[0] && ($arrow[0].style.visibility = 'hidden');
      } else {
        $arrow[0] && ($arrow[0].style.visibility = 'visible');
      }
    };
  }
})), _class));
FilterStateBar.defaultProps = {
  filterConfig: {
    customFilters: []
  },
  hideReset: false
};
var _default = FilterStateBar;
exports.default = _default;