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

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

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

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

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

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

var _numeral = _interopRequireDefault(require("numeral"));

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

var _lodash = require("lodash");

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 cnName = "".concat(_utils.default.prefixCls, "-number-field"); // 格式化valueFormat，将1，2，3...转换为0.0, 0.00, 0.000...

var monitorValueFormat = function monitorValueFormat(format) {
  if (format === "0" || format === "00") {
    return '0';
  } else if (format === '00.00') {
    return '0.00';
  } else {
    var splitvalue = '0';

    for (var i = 0; i < format - 1; i++) {
      splitvalue += '0';
    }

    return '0.' + splitvalue;
  }
};

function NumberField(props) {
  var readOnly = props.readOnly,
      value = props.value,
      _props$extraProps = props.extraProps,
      fieldStyleCategory = _props$extraProps.fieldStyleCategory,
      propMin = _props$extraProps.min,
      propMax = _props$extraProps.max,
      _props$fieldPropertie = props.fieldProperties,
      placeholder = _props$fieldPropertie.placeholder,
      valueFormat = _props$fieldPropertie.valueFormat,
      specialFieldPerm = _props$fieldPropertie.specialFieldPerm,
      onChange = props.onChange;

  var _useState = (0, _react.useState)(function () {
    return value;
  }),
      _useState2 = (0, _slicedToArray2.default)(_useState, 2),
      changingValue = _useState2[0],
      setChangingValue = _useState2[1];

  var _useState3 = (0, _react.useState)(propMin),
      _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
      min = _useState4[0],
      setMin = _useState4[1];

  var _useState5 = (0, _react.useState)(propMax),
      _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
      max = _useState6[0],
      setMax = _useState6[1];

  var _useState7 = (0, _react.useState)(false),
      _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
      ctrlBySpecialFieldPerm = _useState8[0],
      setCtrlBySpecialFieldPerm = _useState8[1];

  var handleBlur = (0, _react.useCallback)(function () {
    setChangingValue(function (preChangingValue) {
      var _value = preChangingValue;

      if (_value) {
        var splitNum = monitorValueFormat(valueFormat);
        _value = (0, _numeral.default)(_value).format(splitNum);
      }

      onChange((0, _lodash.isNil)(_value) ? _value : Number(_value), true);
      return _value;
    });
  }, [onChange, valueFormat]);
  var handleChange = (0, _react.useCallback)(function (v) {
    setChangingValue(v);
  }, []);
  (0, _react.useEffect)(function () {
    setChangingValue(value);
  }, [value]);
  (0, _react.useEffect)(function () {
    if (specialFieldPerm && !specialFieldPerm.increase) {
      setCtrlBySpecialFieldPerm(true);
      setMax(value);
    } else if (specialFieldPerm && !specialFieldPerm.reduce) {
      setCtrlBySpecialFieldPerm(true);
      setMin(value);
    } // eslint-disable-next-line react-hooks/exhaustive-deps

  }, []); //无需任何dependence

  (0, _react.useEffect)(function () {
    if (!ctrlBySpecialFieldPerm) {
      setMax(propMax);
      setMin(propMin);
    }
  }, [propMin, propMax, ctrlBySpecialFieldPerm]);
  return /*#__PURE__*/_react.default.createElement("div", {
    className: cnName
  }, readOnly ?
  /*#__PURE__*/
  // NOTE 若输入为银行账号，只读时超出了整数的最大表示范围，导致账号显示不正确，故改为Input显示
  _react.default.createElement(_input.default, {
    value: changingValue,
    disabled: true
  }) : /*#__PURE__*/_react.default.createElement(_inputNumber.default, {
    value: changingValue,
    placeholder: placeholder,
    onBlur: handleBlur,
    disabled: readOnly,
    min: min,
    max: max,
    onChange: handleChange,
    category: fieldStyleCategory,
    precision: valueFormat === '00.00' ? 2 : Number(valueFormat || 0)
  }));
}

var _default = NumberField;
exports.default = _default;