gui-one-nutui-react-taro
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
188 lines (187 loc) • 7.45 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
var _excluded = ["children", "disabled", "buttonSize", "min", "max", "inputWidth", "readonly", "modelValue", "decimalPlaces", "step", "isAsync", "className", "style", "add", "reduce", "change", "overlimit", "blur", "focus", "onAdd", "onReduce", "onOverlimit", "onBlurFuc", "onFocus", "onChangeFuc", "iconClassPrefix", "iconFontClassName"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); 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 = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
import React__default, { useState, useEffect } from 'react';
import classNames from 'classnames';
import { I as Icon } from './icon.taro-1d0d4fb7.js';
import { c as cn } from './bem-893ad28d.js';
import { C as ComponentDefaults } from './typings-1c5f2628.js';
var defaultProps = _objectSpread(_objectSpread({}, ComponentDefaults), {}, {
disabled: false,
buttonSize: '',
min: 1,
max: 9999,
inputWidth: '',
readonly: false,
modelValue: 0,
step: 1,
decimalPlaces: 0,
isAsync: false
});
function pxCheck(value) {
return Number.isNaN(Number(value)) ? String(value) : "".concat(value, "px");
}
var InputNumber = function InputNumber(props) {
var _defaultProps$props = _objectSpread(_objectSpread({}, defaultProps), props),
children = _defaultProps$props.children,
disabled = _defaultProps$props.disabled,
buttonSize = _defaultProps$props.buttonSize,
min = _defaultProps$props.min,
max = _defaultProps$props.max,
inputWidth = _defaultProps$props.inputWidth,
readonly = _defaultProps$props.readonly,
modelValue = _defaultProps$props.modelValue,
decimalPlaces = _defaultProps$props.decimalPlaces,
step = _defaultProps$props.step,
isAsync = _defaultProps$props.isAsync,
className = _defaultProps$props.className,
style = _defaultProps$props.style,
add = _defaultProps$props.add,
reduce = _defaultProps$props.reduce,
change = _defaultProps$props.change,
overlimit = _defaultProps$props.overlimit,
blur = _defaultProps$props.blur,
focus = _defaultProps$props.focus,
onAdd = _defaultProps$props.onAdd,
onReduce = _defaultProps$props.onReduce,
onOverlimit = _defaultProps$props.onOverlimit,
onBlurFuc = _defaultProps$props.onBlurFuc,
onFocus = _defaultProps$props.onFocus,
onChangeFuc = _defaultProps$props.onChangeFuc,
iconClassPrefix = _defaultProps$props.iconClassPrefix,
iconFontClassName = _defaultProps$props.iconFontClassName,
restProps = _objectWithoutProperties(_defaultProps$props, _excluded);
var _useState = useState(modelValue),
_useState2 = _slicedToArray(_useState, 2),
inputValue = _useState2[0],
setInputValue = _useState2[1];
useEffect(function () {
setInputValue(modelValue);
}, [modelValue]);
var b = cn('inputnumber');
var classes = classNames(_defineProperty({}, "".concat(b(''), "--disabled"), disabled), className, b(''));
var styles = _objectSpread({
height: pxCheck(buttonSize)
}, style);
var addAllow = function addAllow() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number(inputValue);
return value < Number(max) && !disabled;
};
var reduceAllow = function reduceAllow() {
var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number(inputValue);
return value > Number(min) && !disabled;
};
var iconMinusClasses = classNames('nut-inputnumber__icon', {
'nut-inputnumber__icon--disabled': !reduceAllow()
});
var iconAddClasses = classNames('nut-inputnumber__icon', {
'nut-inputnumber__icon--disabled': !addAllow()
});
var fixedDecimalPlaces = function fixedDecimalPlaces(v) {
return Number(v).toFixed(Number(decimalPlaces));
};
var emitChange = function emitChange(value, e) {
var outputValue = fixedDecimalPlaces(value);
onChangeFuc && onChangeFuc(outputValue, e);
change && change(outputValue, e);
if (!isAsync) {
if (Number(outputValue) < Number(min)) {
setInputValue(Number(min));
} else if (Number(outputValue) > Number(max)) {
setInputValue(Number(max));
} else {
setInputValue(outputValue);
}
}
};
var reduceNumber = function reduceNumber(e) {
onReduce && onReduce(e);
reduce && reduce(e);
if (reduceAllow()) {
var outputValue = Number(inputValue) - Number(step);
emitChange(outputValue, e);
} else {
onOverlimit && onOverlimit(e);
overlimit && overlimit(e);
}
};
var addNumber = function addNumber(e) {
onAdd && onAdd(e);
add && add(e);
if (addAllow()) {
var outputValue = Number(inputValue) + Number(step);
emitChange(outputValue, e);
} else {
onOverlimit && onOverlimit(e);
overlimit && overlimit(e);
}
};
var changeValue = function changeValue(e) {
var value = Number(e.detail.value);
change && change(value, e);
onChangeFuc && onChangeFuc(value, e);
if (!isAsync) {
if (Number.isNaN(value)) {
setInputValue(inputValue);
} else {
setInputValue(value);
}
}
};
var focusValue = function focusValue(e) {
if (disabled) return;
if (readonly) return;
onFocus && onFocus(e);
focus && focus(e);
};
var burValue = function burValue(e) {
if (disabled) return;
if (readonly) return;
var value = Number(e.detail.value);
if (value < Number(min)) {
value = Number(min);
} else if (value > Number(max)) {
value = Number(max);
}
emitChange(value, e);
onBlurFuc && onBlurFuc(e);
blur && blur(e);
};
return React__default.createElement("div", _objectSpread({
className: classes,
style: styles
}, restProps), React__default.createElement(Icon, {
classPrefix: iconClassPrefix,
fontClassName: iconFontClassName,
className: iconMinusClasses,
size: buttonSize,
name: "minus",
onClick: reduceNumber
}), React__default.createElement("input", {
type: "number",
min: min,
max: max,
style: {
width: pxCheck(inputWidth)
},
disabled: disabled,
readOnly: readonly,
value: inputValue,
onInput: changeValue,
onBlur: burValue,
onFocus: focusValue
}), React__default.createElement(Icon, {
classPrefix: iconClassPrefix,
fontClassName: iconFontClassName,
className: iconAddClasses,
size: buttonSize,
name: "plus",
onClick: addNumber
}));
};
InputNumber.defaultProps = defaultProps;
InputNumber.displayName = 'NutInputNumber';
export { InputNumber as I };