"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/popover/style/css");

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

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

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

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

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

var _select = _interopRequireDefault(require("maycur-antd/lib/select"));

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

var _TransInput = _interopRequireDefault(require("../../TransInput"));

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

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

var _usePrevious = _interopRequireDefault(require("../../hooks/usePrevious"));

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

var Option = _select.default.Option;
var selectClzName = "".concat(_utils.default.prefixCls, "-select");

function InputField(props) {
  var _props$fieldPropertie = props.fieldProperties,
      sourceMode = _props$fieldPropertie.sourceMode,
      items = _props$fieldPropertie.items,
      placeholder = _props$fieldPropertie.placeholder,
      Ismodify = _props$fieldPropertie.Ismodify,
      maxlength = _props$fieldPropertie.maxlength,
      defautValueType = _props$fieldPropertie.defautValueType,
      defautRefValue = _props$fieldPropertie.defautRefValue,
      userType = _props$fieldPropertie.userType,
      fieldType = _props$fieldPropertie.fieldType,
      _props$fieldProps = props.fieldProps,
      type = _props$fieldProps.type,
      identifier = _props$fieldProps.identifier,
      _props$extraProps = props.extraProps,
      fieldStyleCategory = _props$extraProps.fieldStyleCategory,
      formValue = _props$extraProps.formValue,
      i18n = _props$extraProps.i18n,
      modalManager = _props$extraProps.modalManager,
      _onFieldsChange = _props$extraProps.onFieldsChange,
      submitUserCode = _props$extraProps.submitUserCode,
      userCode = _props$extraProps.userCode,
      fetchSingleTextValueByUser = _props$extraProps.fetchSingleTextValueByUser,
      formStatus = _props$extraProps.formStatus,
      isCopy = _props$extraProps.isCopy,
      readOnly = props.readOnly,
      value = props.value,
      onChange = props.onChange;
  var isInit = (0, _react.useRef)();
  var isSetDefault = (0, _react.useRef)();

  var _useState = (0, _react.useState)(value),
      _useState2 = (0, _slicedToArray2.default)(_useState, 2),
      inputValue = _useState2[0],
      setInputValue = _useState2[1];

  var prevUserCode = (0, _usePrevious.default)(userCode);
  var handleSelectChange = (0, _react.useCallback)(function (e) {
    if (e.target.value !== value) {
      onChange(e.target.value, true);
    }
  }, [onChange, value]);
  var handleInputChange = (0, _react.useCallback)(function (e) {
    if (e && e.target) {
      var _value = e.target.value; // 发票袋编号不允许输入中文

      if (type === 'SingleInputAndScan') {
        _value = _value.replace(/[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/g, '');
      }

      setInputValue(_value);
    }
  }, [type]);

  var onBlur = function onBlur(e) {
    handleSelectChange(e);
  }; // S 级的单行文本可以选择数据来源 sourceMode：手动输入 ｜ 自定义选项 CUSTOM_OPTION


  (0, _react.useEffect)(function () {
    if (isInit.current) return;
    isInit.current = true;

    if (!value && !readOnly && sourceMode === 'CUSTOM_OPTION' && items) {
      handleSelectChange({
        target: {
          value: items[0]
        }
      });
    }
  }, [items, readOnly, value, sourceMode, handleSelectChange]);
  (0, _react.useEffect)(function () {
    if (sourceMode !== 'CUSTOM_OPTION') {
      setInputValue(value);
    }
  }, [value, sourceMode]);
  /* 
   * C 级的单行文本可以选择设置默认值 defautValueType
   * NA ： 默认值为空
   * EMPLOYEE_FORM_VALUE ：默认填充提单人（承担人）员工表单中的XX字段
   * FIXED_VALUE ：默认填充表单配置中输入的固定值 defautRefValue
   * 
   * userType: 借款人-LOAN_USER  申请人-PRECONSUME_USER  提单人-SUBMIT_USER  承担人-COVER_USER
   */

  (0, _react.useEffect)(function () {
    // 填充固定值和填充提单人(借款人、申请人不能更改)员工表单数据只在新建状态下(单据非复制)初始无值的时候填充
    if (['FIXED_VALUE', 'NA'].includes(defautValueType) || !['COVER_USER'].includes(userType)) {
      if (formStatus === 'NEW' && !value && !isSetDefault.current && !isCopy) {
        isSetDefault.current = true;
      } else {
        return;
      }
    } // 填充承担人员工表单数据需要在每一次承担人发生变化都填充，编辑状态下初始不填充


    if (['COVER_USER'].includes(userType)) {
      if (prevUserCode === userCode || (formStatus !== 'NEW' || isCopy) && !prevUserCode) {
        return;
      }
    }

    if (defautValueType === 'FIXED_VALUE') {
      onChange(defautRefValue, true);
    } else if (defautValueType === 'EMPLOYEE_FORM_VALUE') {
      var params = {
        fieldType: fieldType,
        userCode: userType === 'SUBMIT_USER' ? submitUserCode : userCode
      };
      fetchSingleTextValueByUser && fetchSingleTextValueByUser(params).then(function (res) {
        if (res && res.code === 'ACK') {
          var _res$data;

          onChange((_res$data = res.data) === null || _res$data === void 0 ? void 0 : _res$data.name, true);
        }
      });
    }
  }, [defautValueType, defautRefValue, fieldType, userCode, submitUserCode, prevUserCode, userType, value, formStatus, isCopy, fetchSingleTextValueByUser, onChange]);

  var node = sourceMode !== 'CUSTOM_OPTION' && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, i18n && formValue ? /*#__PURE__*/_react.default.createElement(_TransInput.default, {
    identifier: identifier,
    data: formValue,
    placeholder: placeholder,
    disabled: readOnly,
    required: true,
    modalManager: modalManager,
    onBlur: onBlur,
    onFieldsChange: function onFieldsChange(result) {
      _onFieldsChange(result);
    }
  }) : /*#__PURE__*/_react.default.createElement(_input.default, {
    value: inputValue && inputValue + '',
    placeholder: placeholder,
    onChange: handleInputChange,
    onBlur: onBlur,
    category: fieldStyleCategory,
    disabled: readOnly,
    maxlength: maxlength
  }), Ismodify ? /*#__PURE__*/_react.default.createElement("span", {
    className: "fm fm-revised"
  }) : null); // 单据中的事由、名称等 S 级 SingleTextInput 组件可以选择数据来源：“手动输入”和“自定义选项”


  return sourceMode === 'CUSTOM_OPTION' ? /*#__PURE__*/_react.default.createElement(_select.default, {
    value: value,
    onChange: function onChange(value) {
      return handleSelectChange({
        target: {
          value: value
        }
      });
    },
    placeholder: placeholder,
    disabled: readOnly,
    className: selectClzName
  }, _lodash.default.map(items, function (item, index) {
    return /*#__PURE__*/_react.default.createElement(Option, {
      value: item,
      key: index
    }, item);
  })) : readOnly ? /*#__PURE__*/_react.default.createElement(_popover.default, {
    content: inputValue,
    arrowPointAtCenter: true,
    overlayStyle: {
      width: '300px'
    }
  }, node) : node;
}

var _default = InputField;
exports.default = _default;