UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

620 lines (513 loc) 19.3 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = exports.NumberField = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get")); 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 _tslib = require("tslib"); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _mobx = require("mobx"); var _mobxReact = require("mobx-react"); var _isString = _interopRequireDefault(require("lodash/isString")); var _omit = _interopRequireDefault(require("lodash/omit")); var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject")); var _defaultTo = _interopRequireDefault(require("lodash/defaultTo")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _KeyCode = _interopRequireDefault(require("../../../lib/_util/KeyCode")); var _configure = require("../../../lib/configure"); var _TextField2 = require("../text-field/TextField"); var _autobind = _interopRequireDefault(require("../_util/autobind")); var _keepRunning = _interopRequireDefault(require("../_util/keepRunning")); var _icon = _interopRequireDefault(require("../icon")); var _utils = require("./utils"); var _isEmpty = _interopRequireDefault(require("../_util/isEmpty")); var _localeContext = require("../locale-context"); var _enum = require("../data-set/enum"); var _formatNumber = _interopRequireDefault(require("../formatter/formatNumber")); var _LocaleContext = _interopRequireDefault(require("../locale-context/LocaleContext")); var _utils2 = require("../field/utils"); function _createSuper(Derived) { function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (isNativeReflectConstruct()) { 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 getCurrentValidValue(value) { return Number(value.replace(/\.$/, '')) || 0; } var NumberField = /*#__PURE__*/ function (_TextField) { (0, _inherits2["default"])(NumberField, _TextField); var _super = _createSuper(NumberField); function NumberField() { (0, _classCallCheck2["default"])(this, NumberField); return _super.apply(this, arguments); } (0, _createClass2["default"])(NumberField, [{ key: "savePlusRef", value: function savePlusRef(ref) { this.plusElement = ref; } }, { key: "saveMinusRef", value: function saveMinusRef(ref) { this.minusElement = ref; } }, { key: "isLowerRange", value: function isLowerRange(value1, value2) { return value1 < value2; } }, { key: "getFieldType", value: function getFieldType() { return _enum.FieldType.number; } }, { key: "getLimit", value: function getLimit(type) { var record = this.record; var limit = this.getProp(type); if (record && (0, _isString["default"])(limit)) { var num = record.get(limit); if (num !== undefined) { return num; } } return limit; } }, { key: "getValidatorProps", value: function getValidatorProps() { var min = this.min, max = this.max; var step = this.getProp('step'); var nonStrictStep = this.nonStrictStep; return (0, _omit["default"])((0, _objectSpread3["default"])({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "getValidatorProps", this).call(this), { min: min, max: max, step: step, nonStrictStep: nonStrictStep }), ['maxLength', 'minLength']); } }, { key: "getInnerSpanButton", value: function getInnerSpanButton() { var prefixCls = this.prefixCls, range = this.range; var longPressPlus = this.props.longPressPlus; var step = this.getProp('step'); if (step && !range && !this.readOnly && !this.disabled) { var plusIconProps = { ref: this.savePlusRef, key: 'plus', className: "".concat(prefixCls, "-plus"), onMouseDown: longPressPlus ? this.handlePlus : this.handleOncePlus, onTouchStart: this.handleOncePlus }; var minIconProps = { ref: this.saveMinusRef, key: 'minus', className: "".concat(prefixCls, "-minus"), onMouseDown: longPressPlus ? this.handleMinus : this.handleOnceMinus, onTouchStart: this.handleOnceMinus }; return this.wrapperInnerSpanButton(_react["default"].createElement("div", null, _react["default"].createElement("div", (0, _extends2["default"])({}, plusIconProps), _react["default"].createElement(_icon["default"], { type: "keyboard_arrow_up" })), _react["default"].createElement("div", (0, _extends2["default"])({}, minIconProps), _react["default"].createElement(_icon["default"], { type: "keyboard_arrow_down" })))); } } }, { key: "getWrapperClassNames", value: function getWrapperClassNames() { var prefixCls = this.prefixCls; var suffix = this.getSuffix(); var button = this.getInnerSpanButton(); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "getWrapperClassNames", this).call(this, (0, _objectSpread3["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-step-suffix"), button && (0, _react.isValidElement)(suffix)), args)); } }, { key: "handleEnterDown", value: function handleEnterDown(e) { if (this.multiple && this.range && this.text) { this.prepareSetValue(this.text); } (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "handleEnterDown", this).call(this, e); if (this.multiple && this.range) { this.setRangeTarget(0); this.beginRange(); } } }, { key: "handleKeyDown", value: function handleKeyDown(e) { if (!this.disabled && !this.readOnly) { switch (e.keyCode) { case _KeyCode["default"].UP: this.handleKeyDownUp(e); break; case _KeyCode["default"].DOWN: this.handleKeyDownDown(e); break; default: } } (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "handleKeyDown", this).call(this, e); } }, { key: "handleKeyDownUp", value: function handleKeyDownUp(e) { e.preventDefault(); if (this.getProp('step')) { this.step(true); } } }, { key: "handleKeyDownDown", value: function handleKeyDownDown(e) { e.preventDefault(); if (this.getProp('step')) { this.step(false); } } }, { key: "handlePlus", value: function handlePlus(_e, isKeeping) { this.step(true, isKeeping); } }, { key: "handleMinus", value: function handleMinus(_e, isKeeping) { this.step(false, isKeeping); } }, { key: "handleOncePlus", value: function handleOncePlus() { this.step(true); } }, { key: "handleOnceMinus", value: function handleOnceMinus() { this.step(false); } }, { key: "getOmitPropsKeys", value: function getOmitPropsKeys() { return (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "getOmitPropsKeys", this).call(this).concat(['nonStrictStep', 'formatter', 'formatterOptions', 'longPressPlus', 'precision', 'numberGrouping', 'maxLength']); } }, { key: "getObservableProps", value: function getObservableProps(props, context) { return (0, _objectSpread3["default"])({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "getObservableProps", this).call(this, props, context), { max: props.max, min: props.min, precision: props.precision, nonStrictStep: props.nonStrictStep }); } }, { key: "step", value: function step(isPlus, isKeeping) { var min = (0, _defaultTo["default"])(this.min, -_utils.MAX_SAFE_INTEGER); var max = (0, _defaultTo["default"])(this.max, _utils.MAX_SAFE_INTEGER); var step = (0, _defaultTo["default"])(this.getProp('step'), 1); var nonStrictStep = this.nonStrictStep; // 需要处理非严格模式 var newValue; var value = this.multiple || this.isFocused ? Number(this.text || this.getValue()) : this.getValue(); var currentValue = getCurrentValidValue(String(value)); newValue = currentValue; var nearStep = (0, _utils.getNearStepValues)(currentValue, step, min, max); if (nonStrictStep === false && nearStep) { switch (nearStep.length) { case 1: newValue = nearStep[0]; break; case 2: newValue = nearStep[isPlus ? 1 : 0]; break; default: } } else { var nextValue = (0, _utils.plus)(currentValue, isPlus ? step : -step); if (nextValue < min) { newValue = min; } else if (nextValue > max) { var nearMaxStep = (0, _utils.getNearStepValues)(max, step, min, max); if (nearMaxStep) { newValue = nearMaxStep[0]; } else { newValue = max; } } else { newValue = nextValue; } } // 不要进行对比操作,在table中使用的时候,因为NumberField会作为editor使用,所以在 对第一个cell只点击一次的情况下(例如plus) // 此时切换到第二个cell进行编辑,无法进行上次操作(同上次的plus) // this.value !== newValue if (this.multiple || isKeeping) { this.setText(String(newValue)); } else { this.prepareSetValue(newValue); } } }, { key: "prepareSetValue", value: function prepareSetValue(value) { (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "prepareSetValue", this).call(this, isNaN(value) || (0, _isEmpty["default"])(value) ? null : (0, _utils.parseNumber)(value, this.getProp('precision'))); } }, { key: "restrictInput", value: function restrictInput(value) { if (value) { var restrict = '0-9'; if (this.allowDecimal) { restrict += '.'; } var isNegative = this.allowNegative && /^-/.test(value); value = (0, _get2["default"])((0, _getPrototypeOf2["default"])(NumberField.prototype), "restrictInput", this).call(this, value.replace(new RegExp("[^".concat(restrict, "]+"), 'g'), '')); var values = value.split('.'); if (values.length > 2) { value = "".concat(values.shift(), ".").concat(values.join('')); } if (isNegative) { value = "-".concat(value); } } return value; } }, { key: "getFormatOptions", value: function getFormatOptions(value) { var _this = this; return (0, _utils2.getNumberFormatOptions)(function (name) { return _this.getProp(name); }, function () { return _this.getValue(); }, value, this.lang); } }, { key: "getFormatter", value: function getFormatter() { return this.getProp('formatter') || (0, _utils2.getNumberFormatter)(); } }, { key: "processText", value: function processText(value) { var formatOptions = this.getFormatOptions(Number(value)); return this.getFormatter()(value, formatOptions.lang, formatOptions.options); } }, { key: "renderLengthInfo", value: function renderLengthInfo() { return undefined; } }, { key: "lang", get: function get() { var lang = this.observableProps.lang; if (lang) { return lang; } var dataSet = this.dataSet; if (dataSet && dataSet.lang) { return dataSet.lang; } var numberFormatLanguage = _LocaleContext["default"].numberFormatLanguage, locale = _LocaleContext["default"].locale; if (numberFormatLanguage) { return numberFormatLanguage; } return locale.lang; } }, { key: "defaultValidationMessages", get: function get() { var label = this.getProp('label'); return { valueMissing: (0, _localeContext.$l)('NumberField', label ? 'value_missing' : 'value_missing_no_label', { label: label }) }; } }, { key: "allowDecimal", get: function get() { var min = this.min, nonStrictStep = this.nonStrictStep; var precision = this.getProp('precision'); if (precision === 0) { return false; } // 非严格步距下允许输入小数 if (nonStrictStep) { return true; } var step = this.getProp('step'); return !step || step % 1 !== 0 || !!min && min % 1 !== 0; } }, { key: "nonStrictStep", get: function get() { var nonStrictStep = this.getProp('nonStrictStep'); if (nonStrictStep !== undefined) { return nonStrictStep; } var numberFieldNonStrictStep = (0, _configure.getConfig)('numberFieldNonStrictStep'); if (numberFieldNonStrictStep !== undefined) { return numberFieldNonStrictStep; } return false; } }, { key: "allowNegative", get: function get() { var min = this.min; return (0, _isNil["default"])(min) || min < 0; } }, { key: "min", get: function get() { return this.getLimit('min'); } }, { key: "max", get: function get() { return this.getLimit('max'); } }, { key: "value", get: function get() { var value = this.observableProps.value; if ((0, _mobx.isArrayLike)(value)) { return value; } var range = this.range; if ((0, _mobx.isArrayLike)(range)) { if ((0, _isPlainObject["default"])(value)) { var _ref; var _range = (0, _slicedToArray2["default"])(range, 2), start = _range[0], end = _range[1]; return _ref = {}, (0, _defineProperty2["default"])(_ref, start, value[start]), (0, _defineProperty2["default"])(_ref, end, value[end]), _ref; } } return value; }, set: function set(value) { var _this2 = this; (0, _mobx.runInAction)(function () { _this2.observableProps.value = value; }); } }]); return NumberField; }(_TextField2.TextField); exports.NumberField = NumberField; NumberField.displayName = 'NumberField'; NumberField.propTypes = (0, _objectSpread3["default"])({ /** * 最小值 */ min: _propTypes["default"].number, /** * 最大值 */ max: _propTypes["default"].number, /** * 步距 */ step: _propTypes["default"].number, /** * 非严格步距 */ nonStrictStep: _propTypes["default"].bool, /** * 格式器 */ formatter: _propTypes["default"].func, /** * 格式器参数 */ longPressPlus: _propTypes["default"].bool, /** * 是否开启长按步距增加 */ formatterOptions: _propTypes["default"].object }, _TextField2.TextField.propTypes); NumberField.defaultProps = (0, _objectSpread3["default"])({}, _TextField2.TextField.defaultProps, { suffixCls: 'input-number', longPressPlus: true, max: _utils.MAX_SAFE_INTEGER, min: _utils.MIN_SAFE_INTEGER }); NumberField.format = _formatNumber["default"]; (0, _tslib.__decorate)([_mobx.computed], NumberField.prototype, "lang", null); (0, _tslib.__decorate)([_mobx.computed], NumberField.prototype, "allowDecimal", null); (0, _tslib.__decorate)([_mobx.computed], NumberField.prototype, "nonStrictStep", null); (0, _tslib.__decorate)([_mobx.computed], NumberField.prototype, "allowNegative", null); (0, _tslib.__decorate)([_mobx.computed], NumberField.prototype, "min", null); (0, _tslib.__decorate)([_mobx.computed], NumberField.prototype, "max", null); (0, _tslib.__decorate)([_mobx.computed], NumberField.prototype, "value", null); (0, _tslib.__decorate)([_autobind["default"]], NumberField.prototype, "savePlusRef", null); (0, _tslib.__decorate)([_autobind["default"]], NumberField.prototype, "saveMinusRef", null); (0, _tslib.__decorate)([_mobx.action], NumberField.prototype, "handleEnterDown", null); (0, _tslib.__decorate)([_autobind["default"]], NumberField.prototype, "handleKeyDown", null); (0, _tslib.__decorate)([(0, _keepRunning["default"])(function () { return this.plusElement; })], NumberField.prototype, "handlePlus", null); (0, _tslib.__decorate)([(0, _keepRunning["default"])(function () { return this.minusElement; })], NumberField.prototype, "handleMinus", null); (0, _tslib.__decorate)([_autobind["default"]], NumberField.prototype, "handleOncePlus", null); (0, _tslib.__decorate)([_autobind["default"]], NumberField.prototype, "handleOnceMinus", null); var ObserverNumberField = /*#__PURE__*/ function (_NumberField) { (0, _inherits2["default"])(ObserverNumberField, _NumberField); var _super2 = _createSuper(ObserverNumberField); function ObserverNumberField() { (0, _classCallCheck2["default"])(this, ObserverNumberField); return _super2.apply(this, arguments); } return ObserverNumberField; }(NumberField); ObserverNumberField.defaultProps = NumberField.defaultProps; ObserverNumberField.format = _formatNumber["default"]; ObserverNumberField = (0, _tslib.__decorate)([_mobxReact.observer], ObserverNumberField); var _default = ObserverNumberField; exports["default"] = _default; //# sourceMappingURL=NumberField.js.map