"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;

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

var _modal = _interopRequireDefault(require("maycur-antd/lib/modal"));

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

var _list = _interopRequireDefault(require("maycur-antd/lib/list"));

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

var _alert = _interopRequireDefault(require("maycur-antd/lib/alert"));

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

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

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

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

var _switch = _interopRequireDefault(require("maycur-antd/lib/switch"));

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

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

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

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

var _tabs = _interopRequireDefault(require("maycur-antd/lib/tabs"));

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

var _breadcrumb = _interopRequireDefault(require("maycur-antd/lib/breadcrumb"));

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

var _input = _interopRequireDefault(require("maycur-antd/lib/input"));

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

var _reactDom = _interopRequireDefault(require("react-dom"));

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

var _ManageList = _interopRequireDefault(require("../ManageList"));

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

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

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

var _excluded = ["categoryCode"],
    _excluded2 = ["keyword"];

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 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) { (0, _defineProperty2.default)(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 _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;
var Search = _input.default.Search;
var BreadItem = _breadcrumb.default.Item;
var TabPane = _tabs.default.TabPane;

var ManageSelectionModal = /*#__PURE__*/function (_Component) {
  (0, _inherits2.default)(ManageSelectionModal, _Component);

  var _super = _createSuper(ManageSelectionModal);

  function ManageSelectionModal(props) {
    var _this;

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

    _this.onCancel = function () {
      var promise = _this.props.promise;
      promise.reject();
    };

    _this.getSourceParams = function (categoryCode) {
      var _this$props = _this.props,
          pageSize = _this$props.pageSize,
          paging = _this$props.paging;
      var _this$state = _this.state,
          pageNo = _this$state.pageNo,
          breads = _this$state.breads; // 点击加载更多，categoryCode从breads中取

      var _categoryCode = categoryCode || breads[breads.length - 1].code;

      if (!paging) return {
        categoryCode: _categoryCode
      };
      var _itemPrevPageNo = pageNo[_categoryCode || 'root'];

      var _pageNo = _itemPrevPageNo ? _itemPrevPageNo + 1 : 1;

      return {
        categoryCode: _categoryCode,
        pageSize: pageSize,
        pageNo: _pageNo
      };
    };

    _this.getSearchParams = function (keyword) {
      var _this$props2 = _this.props,
          pageSize = _this$props2.pageSize,
          paging = _this$props2.paging;
      if (!paging) return {
        keyword: keyword
      };
      var pageNo = 1; // 点击加载更多，keyword为undefined

      if (keyword === undefined) {
        pageNo = _this.state.searchPageNo + 1;
        keyword = _this.state.searchKeyword;
      }

      return {
        pageNo: pageNo,
        pageSize: pageSize,
        keyword: keyword
      };
    };

    _this.onChangeSearchKeyword = function (e) {
      var value = e.target.value;

      _this.setState({
        searchKeyword: value
      }, function () {
        return _this.fetchSearchList(value);
      });
    };

    _this.onSwitchChange = function (checked) {
      _this.setState({
        switchChecked: checked
      });
    };

    _this.state = {
      sourceList: [],
      searchList: [],
      breads: [{
        name: props.title,
        code: null
      }],
      selectList: props.selectList || [],
      allSelected: false,
      searchKeyword: null,
      pageNo: {},
      loadMore: false,
      categoryCode: null,
      switchChecked: props.switchChecked
    };
    _this.onSearch = _this.onSearch.bind((0, _assertThisInitialized2.default)(_this));
    _this.clearSearch = _this.clearSearch.bind((0, _assertThisInitialized2.default)(_this));
    _this.closeSelf = _this.closeSelf.bind((0, _assertThisInitialized2.default)(_this));
    _this.unSelectItem = _this.unSelectItem.bind((0, _assertThisInitialized2.default)(_this));
    _this.clearAll = _this.clearAll.bind((0, _assertThisInitialized2.default)(_this));
    _this.onOutput = _this.onOutput.bind((0, _assertThisInitialized2.default)(_this));
    _this.fetchSourceList = _this.fetchSourceList.bind((0, _assertThisInitialized2.default)(_this));
    _this.fetchSearchList = _this.fetchSearchList.bind((0, _assertThisInitialized2.default)(_this));
    _this.onDrillDown = _this.onDrillDown.bind((0, _assertThisInitialized2.default)(_this));
    _this.goToBread = _this.goToBread.bind((0, _assertThisInitialized2.default)(_this));
    _this.onOk = _this.onOk.bind((0, _assertThisInitialized2.default)(_this));
    _this.scrollBottom = _this.scrollBottom.bind((0, _assertThisInitialized2.default)(_this));
    _this.t = _mkTranslate.default.getLocalNs('MK_ManageSelectionModal', (0, _assertThisInitialized2.default)(_this));
    return _this;
  }

  (0, _createClass2.default)(ManageSelectionModal, [{
    key: "onSearch",
    value: function onSearch(value) {
      value = _lodash.default.trim(value);
      this.setState({
        searchKeyword: value
      });

      if (value) {
        this.fetchSearchList(value);
      } else {
        this.setState({
          searchList: []
        });
      }
    }
  }, {
    key: "clearSearch",
    value: function clearSearch() {
      if (this.searchRef) {
        var dom = _reactDom.default.findDOMNode(this.searchRef);

        var input = dom.getElementsByTagName("input")[0];
        input.value = "";
      }

      this.setState({
        searchKeyword: null,
        searchList: []
      });
    }
  }, {
    key: "goToBread",
    value: function goToBread(bread) {
      var _this2 = this;

      var codeAlias = this.props.codeAlias;
      var breads = this.state.breads;
      breads = _lodash.default.dropRightWhile(breads, function (item) {
        return item[codeAlias] !== bread[codeAlias];
      });
      this.setState(function (_ref) {
        var pageNo = _ref.pageNo;
        return {
          breads: breads,
          pageNo: _objectSpread(_objectSpread({}, pageNo), {}, (0, _defineProperty2.default)({}, bread.code || 'root', null))
        };
      }, function () {
        return _this2.fetchSourceList(bread[codeAlias], bread.rootCode);
      });
    }
  }, {
    key: "unSelectItem",
    value: function unSelectItem(item) {
      var codeAlias = this.props.codeAlias;
      var selectList = this.state.selectList;

      var idx = _lodash.default.findIndex(selectList, (0, _defineProperty2.default)({}, codeAlias, item[codeAlias]));

      if (idx !== -1) {
        selectList.splice(idx, 1);
      }

      this.setState({
        selectList: selectList
      });
    }
  }, {
    key: "clearAll",
    value: function clearAll() {
      this.setState({
        selectList: []
      });
    }
  }, {
    key: "closeSelf",
    value: function closeSelf() {
      var onCancel = this.props.onCancel;

      if (typeof onCancel === "function") {
        onCancel();
      }
    }
  }, {
    key: "onOutput",
    value: function onOutput(result) {
      var added = result.added,
          allSelected = result.allSelected,
          itemSelected = result.itemSelected;
      var selectList = this.state.selectList;
      var _this$props3 = this.props,
          maxSelectLength = _this$props3.maxSelectLength,
          codeAlias = _this$props3.codeAlias;
      /** 单选 */

      if (!maxSelectLength || maxSelectLength === 1) {
        this.setState({
          selectList: added
        });
        setTimeout(this.scrollBottom);
        return;
      }

      if (!allSelected || itemSelected) {
        selectList = _lodash.default.unionWith(selectList, added, _utils.default.bizEquals);
      } else {
        selectList = _lodash.default.filter(selectList, function (o) {
          return added.every(function (i) {
            return i[codeAlias] !== o[codeAlias];
          });
        });
      }

      this.setState({
        selectList: selectList
      });
      setTimeout(this.scrollBottom);
    }
  }, {
    key: "onDrillDown",
    value: function onDrillDown(item) {
      var _this3 = this;

      var codeAlias = this.props.codeAlias;
      var breads = this.state.breads;
      breads.push(item);
      this.setState(function (_ref2) {
        var pageNo = _ref2.pageNo;
        return {
          breads: breads,
          pageNo: _objectSpread(_objectSpread({}, pageNo), {}, (0, _defineProperty2.default)({}, item.code || 'root', null))
        };
      }, function () {
        return _this3.fetchSourceList(item[codeAlias], item.rootCode);
      });
    }
  }, {
    key: "onOk",
    value: function onOk() {
      var selectList = this.state.selectList;
      var promise = this.props.promise;

      if (promise && typeof promise.resolve === "function") {
        promise.resolve(selectList);
      }
    }
  }, {
    key: "componentDidMount",
    value: function componentDidMount() {
      this.fetchSourceList();
    }
  }, {
    key: "fetchSourceList",
    value: function fetchSourceList(categoryCode, rootCode) {
      var _this4 = this;

      var _this$props4 = this.props,
          fetchSourceList = _this$props4.fetchSourceList,
          paging = _this$props4.paging,
          pageSize = _this$props4.pageSize;

      var _this$getSourceParams = this.getSourceParams(categoryCode),
          _categoryCode = _this$getSourceParams.categoryCode,
          pageParams = (0, _objectWithoutProperties2.default)(_this$getSourceParams, _excluded);

      fetchSourceList && fetchSourceList(_categoryCode, pageParams).then(function (sourceList) {
        var loadMore = false,
            _sourceList = sourceList;

        if (paging && sourceList && sourceList.length >= pageSize) {
          loadMore = true;
        } // 加载更多，sourceList合并


        if (_categoryCode === _this4.state.categoryCode) {
          _sourceList = [].concat((0, _toConsumableArray2.default)(_this4.state.sourceList || []), (0, _toConsumableArray2.default)(sourceList || []));
        }

        _this4.setState(function (_ref3) {
          var pageNo = _ref3.pageNo;
          return {
            sourceList: _sourceList,
            loadMore: loadMore,
            pageNo: paging ? _objectSpread(_objectSpread({}, pageNo), {}, (0, _defineProperty2.default)({}, _categoryCode || 'root', pageParams.pageNo)) : {},
            categoryCode: _categoryCode
          };
        }, function () {
          console.log('after', _this4.state.pageNo);
        });
      });
    }
  }, {
    key: "fetchSearchList",
    value: function fetchSearchList(keyword) {
      var _this5 = this;

      var _this$props5 = this.props,
          fetchSearchList = _this$props5.fetchSearchList,
          pageSize = _this$props5.pageSize,
          paging = _this$props5.paging;
      var isLoadMoreBtnClick = keyword === undefined;

      var _this$getSearchParams = this.getSearchParams(keyword),
          _keyword = _this$getSearchParams.keyword,
          pageParams = (0, _objectWithoutProperties2.default)(_this$getSearchParams, _excluded2);

      fetchSearchList && fetchSearchList(_keyword, pageParams).then(function (searchList) {
        var _searchList = searchList,
            loadMore = false;

        if (paging && searchList && searchList.length >= pageSize) {
          loadMore = true;
        }

        isLoadMoreBtnClick && (_searchList = [].concat((0, _toConsumableArray2.default)(_this5.state.searchList || []), (0, _toConsumableArray2.default)(searchList || [])));

        _this5.setState({
          searchList: _searchList,
          searchPageNo: pageParams.pageNo,
          loadMore: loadMore
        });
      });
    }
  }, {
    key: "scrollBottom",
    value: function scrollBottom() {
      if (this.selectListRef) {
        var dom = _reactDom.default.findDOMNode(this.selectListRef);

        dom.scrollTop = dom.scrollHeight;
      }
    }
  }, {
    key: "render",
    value: function render() {
      var _this6 = this;

      var _this$state2 = this.state,
          sourceList = _this$state2.sourceList,
          searchList = _this$state2.searchList,
          selectList = _this$state2.selectList,
          breads = _this$state2.breads,
          searchKeyword = _this$state2.searchKeyword,
          loadMore = _this$state2.loadMore,
          switchChecked = _this$state2.switchChecked;
      var _this$props6 = this.props,
          scope = _this$props6.scope,
          title = _this$props6.title,
          maxSelectLength = _this$props6.maxSelectLength,
          sourceListLoading = _this$props6.sourceListLoading,
          searchListLoading = _this$props6.searchListLoading,
          nameAlias = _this$props6.nameAlias,
          codeAlias = _this$props6.codeAlias,
          isSwitch = _this$props6.isSwitch,
          switchDisabled = _this$props6.switchDisabled,
          paging = _this$props6.paging,
          selectCategory = _this$props6.selectCategory;

      var modalTitle = /*#__PURE__*/_react.default.createElement("div", {
        className: "title"
      }, /*#__PURE__*/_react.default.createElement("div", null, this.t('select', {
        title: title
      })), isSwitch && /*#__PURE__*/_react.default.createElement("div", {
        className: "switch"
      }, /*#__PURE__*/_react.default.createElement(_switch.default, {
        checked: switchChecked,
        disabled: switchDisabled,
        onChange: this.onSwitchChange
      }), /*#__PURE__*/_react.default.createElement("span", null, "\u9009\u62E9\u7684\u7236\u5206\u7C7B\u5305\u542B\u5176\u5B50\u5206\u7C7B"), /*#__PURE__*/_react.default.createElement(_popover.default, {
        placement: "right",
        content: /*#__PURE__*/_react.default.createElement("div", {
          className: "".concat(prefix, "-popover")
        }, "\u5F00\u5173\u5F00\u542F\u540E\uFF0C\u9009\u62E9\u7684\u7236\u5206\u7C7B\u4F1A\u5305\u542B\u5176\u6240\u6709\u5B50\u5206\u7C7B\uFF0C\u5B59\u5206\u7C7B......")
      }, /*#__PURE__*/_react.default.createElement("span", {
        className: "fm fm-question"
      }))));

      return /*#__PURE__*/_react.default.createElement(_modal.default, (0, _extends2.default)({}, this.props, {
        title: modalTitle,
        onOk: this.onOk,
        destroyOnClose: true,
        maskClosable: false,
        keyboard: false,
        centered: true,
        className: "".concat(prefix, "-manage-select"),
        visible: true,
        okText: this.t('confirm'),
        cancelText: this.t('cancel')
      }), /*#__PURE__*/_react.default.createElement("div", {
        className: 'content'
      }, /*#__PURE__*/_react.default.createElement("div", {
        className: 'left'
      }, /*#__PURE__*/_react.default.createElement(_tabs.default, {
        defaultActiveKey: "DEPT"
      }, /*#__PURE__*/_react.default.createElement(TabPane, {
        tab: title,
        key: "DEPT"
      }, /*#__PURE__*/_react.default.createElement("div", {
        className: 'search-box'
      }, /*#__PURE__*/_react.default.createElement(Search, {
        placeholder: this.t('placeholderText'),
        ref: function ref(_ref4) {
          _this6.searchRef = _ref4;
        },
        value: searchKeyword,
        onChange: this.onChangeSearchKeyword,
        onSearch: this.onSearch,
        type: "gray"
      }), searchKeyword ? /*#__PURE__*/_react.default.createElement("span", {
        className: 'fm fm-cross',
        onClick: this.clearSearch
      }) : null), searchKeyword ? /*#__PURE__*/_react.default.createElement("div", {
        className: 'search-list'
      }, /*#__PURE__*/_react.default.createElement(_ManageList.default, (0, _extends2.default)({
        loading: searchListLoading
      }, this.props, {
        scope: scope,
        canDrillDown: false,
        sourceList: searchList,
        selectList: selectList,
        onOutput: this.onOutput,
        nameAlias: nameAlias,
        codeAlias: codeAlias,
        paging: paging,
        loadMore: loadMore,
        loadMoreFunc: this.fetchSearchList,
        selectCategory: selectCategory
      }))) : /*#__PURE__*/_react.default.createElement("div", {
        className: 'source-list'
      }, /*#__PURE__*/_react.default.createElement(_breadcrumb.default, null, breads.map(function (bread, idx) {
        return /*#__PURE__*/_react.default.createElement(BreadItem, {
          key: bread.code
        }, idx !== breads.length - 1 ?
        /*#__PURE__*/
        // eslint-disable-next-line jsx-a11y/anchor-is-valid
        _react.default.createElement("a", {
          href: "javascript:void(0)",
          onClick: function onClick() {
            _this6.goToBread(bread);
          }
        }, bread.name) : /*#__PURE__*/_react.default.createElement("span", null, bread.name));
      })), /*#__PURE__*/_react.default.createElement(_ManageList.default, (0, _extends2.default)({}, this.props, {
        loading: sourceListLoading,
        scope: scope,
        sourceList: sourceList,
        selectList: selectList,
        onOutput: this.onOutput,
        onDrillDown: this.onDrillDown,
        paging: paging,
        loadMore: loadMore,
        loadMoreFunc: this.fetchSourceList,
        nameAlias: nameAlias,
        codeAlias: codeAlias,
        selectCategory: selectCategory
      })))))), /*#__PURE__*/_react.default.createElement("div", {
        className: 'middle'
      }, /*#__PURE__*/_react.default.createElement("span", {
        className: "fm fm-angle-right"
      })), /*#__PURE__*/_react.default.createElement("div", {
        className: 'right'
      }, /*#__PURE__*/_react.default.createElement("div", {
        className: 'status-bar'
      }, /*#__PURE__*/_react.default.createElement("span", {
        className: 'bar-label'
      }, this.t('selected', {
        title: title
      })), /*#__PURE__*/_react.default.createElement("span", {
        className: 'dep-count'
      }, /*#__PURE__*/_react.default.createElement("span", {
        className: 'strong'
      }, selectList.length)), /*#__PURE__*/_react.default.createElement("span", {
        className: 'clear-all'
      }, /*#__PURE__*/_react.default.createElement("span", {
        className: 'btn',
        onClick: this.clearAll
      }, this.t('clear')))), maxSelectLength > 0 ? /*#__PURE__*/_react.default.createElement(_alert.default, {
        message: /*#__PURE__*/_react.default.createElement("span", null, "\u6700\u591A\u53EA\u80FD\u9009\u62E9", /*#__PURE__*/_react.default.createElement("span", {
          className: "strong"
        }, maxSelectLength), "\u9879"),
        type: "warning"
      }) : null, /*#__PURE__*/_react.default.createElement(_list.default, {
        size: "small",
        dataSource: selectList,
        ref: function ref(_ref5) {
          _this6.selectListRef = _ref5;
        },
        renderItem: function renderItem(item) {
          return /*#__PURE__*/_react.default.createElement(_list.default.Item, {
            key: item.code
          }, /*#__PURE__*/_react.default.createElement("span", {
            className: 'item-name'
          }, /*#__PURE__*/_react.default.createElement("span", {
            className: item.icon
          }), item.name), /*#__PURE__*/_react.default.createElement("span", {
            className: 'fm fm-trash',
            onClick: function onClick(e) {
              e.stopPropagation();

              _this6.unSelectItem(item);
            }
          }));
        },
        locale: {
          emptyText: /*#__PURE__*/_react.default.createElement(_Empty.default, {
            text: this.t('noData')
          })
        }
      }))));
    }
  }]);
  return ManageSelectionModal;
}(_react.Component); // function stateMapProp({ app }) {
//     return {
//         sourceListLoading: app.loading[MANAGE_PICKER.SOURCE_LIST],
//         searchListLoading: app.loading[MANAGE_PICKER.SEARCH_LIST]
//     };
// }


var _default = ManageSelectionModal;
exports.default = _default;