"use strict";

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

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

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

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

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

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

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

var _message2 = _interopRequireDefault(require("maycur-antd/lib/message"));

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

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

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

var _TranslateHook = _interopRequireDefault(require("../hooks/TranslateHook"));

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

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

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

/*
 * @Author: kldn 
 * @Date: 2020-04-22 10:40:05 
 * @Last Modified by: songqiyan
 * @Last Modified time: 2020-07-16 17:13:57
 */
var prefix = _utils.default.prefixCls;

function OptionsModal(props) {
  var promise = props.promise,
      _props$dataValueKey = props.dataValueKey,
      dataValueKey = _props$dataValueKey === void 0 ? 'code' : _props$dataValueKey,
      _props$dataLabelKey = props.dataLabelKey,
      dataLabelKey = _props$dataLabelKey === void 0 ? 'label' : _props$dataLabelKey,
      options = props.options,
      title = props.title,
      alertObj = props.alertObj,
      _props$isRadio = props.isRadio,
      isRadio = _props$isRadio === void 0 ? true : _props$isRadio,
      _props$contentMaxHeig = props.contentMaxHeight,
      contentMaxHeight = _props$contentMaxHeig === void 0 ? 250 : _props$contentMaxHeig,
      defaultSelectedKeys = props.defaultSelectedKeys,
      modalProps = props.modalProps; // 国际化文件

  var translate = (0, _TranslateHook.default)('MK_OptionsModal'); // 当前选中的 option 的 dataValueKey

  var _useState = (0, _react.useState)([]),
      _useState2 = (0, _slicedToArray2.default)(_useState, 2),
      curOptionKey = _useState2[0],
      setCurOptionKey = _useState2[1];

  var handleCancel = (0, _react.useCallback)(function () {
    promise.reject();
  }, [promise]); // 点击选中

  var handleSelect = (0, _react.useCallback)(function (item) {
    // 没有底部操作栏时需要直接返回，只可能是单选
    if (modalProps && modalProps.footer === null) {
      return promise.resolve(item);
    }

    if (isRadio) {
      setCurOptionKey([item[dataValueKey]]);
    } else {
      var _curOptionKey = (0, _toConsumableArray2.default)(curOptionKey);

      if (_curOptionKey.includes(item[dataValueKey])) {
        _curOptionKey = _curOptionKey.filter(function (key) {
          return key !== item[dataValueKey];
        });
      } else {
        _curOptionKey.push(item[dataValueKey]);
      }

      setCurOptionKey(_curOptionKey);
    }
  }, [curOptionKey, dataValueKey, isRadio, modalProps, promise]); // 确认选择

  var handleConfirm = (0, _react.useCallback)(function () {
    if (curOptionKey && curOptionKey.length > 0) {
      var _options = options.filter(function (item) {
        return curOptionKey.includes(item[dataValueKey]);
      });

      promise.resolve(isRadio ? _options[0] : _options);
    } else {
      _message2.default.info(translate('noSelect'));
    }
  }, [curOptionKey, dataValueKey, isRadio, options, promise, translate]);
  var transText = (0, _react.useMemo)(function () {
    return {
      cancelText: translate('MK_Global:cancel'),
      okText: translate('MK_Global:ok'),
      title: translate('title')
    };
  }, [translate]);
  (0, _react.useEffect)(function () {
    // 判断 单选 or 多选
    var selectedKeys = [];

    if (defaultSelectedKeys && defaultSelectedKeys.length > 0) {
      if (isRadio) {
        selectedKeys = defaultSelectedKeys[0];
      } else {
        selectedKeys = defaultSelectedKeys;
      }
    }

    setCurOptionKey(selectedKeys);
  }, [defaultSelectedKeys, isRadio]);
  return /*#__PURE__*/_react.default.createElement(_modal.default, (0, _extends2.default)({
    cancelButtonProps: {
      type: 'info'
    },
    cancelText: transText.cancelText,
    className: "".concat(prefix, "-modal-wrap"),
    okText: transText.okText,
    onCancel: handleCancel,
    onOk: handleConfirm,
    title: title || transText.title,
    visible: true
  }, modalProps), alertObj, /*#__PURE__*/_react.default.createElement("div", {
    className: "content-wrap",
    style: {
      maxHeight: contentMaxHeight
    }
  }, options && options.length > 0 && options.map(function (option) {
    return /*#__PURE__*/_react.default.createElement("div", {
      className: (0, _classnames.default)('option-wrap', {
        'checked': curOptionKey && curOptionKey.length > 0 && curOptionKey.includes(option[dataValueKey])
      }),
      key: option[dataValueKey],
      onClick: function onClick() {
        return handleSelect(option);
      }
    }, option[dataLabelKey], curOptionKey && curOptionKey.length > 0 && curOptionKey.includes(option[dataValueKey]) && /*#__PURE__*/_react.default.createElement("div", {
      className: "fm fm-check",
      style: {
        color: '#3296FA'
      }
    }));
  })));
}