@nutui/nutui-react
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
222 lines (221 loc) • 9.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "NumberKeyboard", {
enumerable: true,
get: function() {
return NumberKeyboard;
}
});
var _interop_require_default = require("@swc/helpers/_/_interop_require_default");
var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
var _object_spread = require("@swc/helpers/_/_object_spread");
var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
var _to_consumable_array = require("@swc/helpers/_/_to_consumable_array");
var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
var _classnames = /*#__PURE__*/ _interop_require_default._(require("classnames"));
var _iconsreact = require("@nutui/icons-react");
var _index = /*#__PURE__*/ _interop_require_default._(require("../popup/index"));
var _configprovider = require("../configprovider");
var _typings = require("../../utils/typings");
var defaultProps = (0, _object_spread_props._)((0, _object_spread._)({}, _typings.ComponentDefaults), {
visible: false,
rightActions: '',
type: 'default',
custom: [],
random: false,
onClose: function onClose() {}
});
var NumberKeyboard = function NumberKeyboard(props) {
var locale = (0, _configprovider.useConfig)().locale;
var _ref = (0, _object_spread._)({}, defaultProps, props), title = _ref.title, rightActions = _ref.rightActions, confirmText = _ref.confirmText, visible = _ref.visible, type = _ref.type, custom = _ref.custom, random = _ref.random, style = _ref.style, className = _ref.className, onChange = _ref.onChange, onDelete = _ref.onDelete, onClose = _ref.onClose, onConfirm = _ref.onConfirm, rest = (0, _object_without_properties._)(_ref, [
"title",
"rightActions",
"confirmText",
"visible",
"type",
"custom",
"random",
"style",
"className",
"onChange",
"onDelete",
"onClose",
"onConfirm"
]);
var classPrefix = 'nut-numberkeyboard';
var getBasicKeys = function getBasicKeys() {
var keys = new Array(9).fill(0).map(function(_, index) {
return {
id: String(index + 1),
type: 'num'
};
});
return random ? keys.sort(function() {
return Math.random() > 0.5 ? 1 : -1;
}) : keys;
};
var getCustomKeys = function getCustomKeys() {
var customKeys = [
{
id: 'close',
type: 'close'
},
{
id: '0',
type: 'num'
},
{
id: 'delete',
type: 'delete'
}
];
if (!custom) return customKeys;
if (custom.length > 0) {
customKeys[0] = {
id: custom[0],
type: 'custom'
};
}
if (custom.length > 1) {
customKeys[2] = {
id: custom[1],
type: 'custom'
};
}
return customKeys;
};
var keysList = (0, _react.useMemo)(function() {
return (0, _to_consumable_array._)(getBasicKeys()).concat((0, _to_consumable_array._)(getCustomKeys()));
}, [
type,
random,
custom
]);
var DeleteIcon = function DeleteIcon() {
return /*#__PURE__*/ _react.default.createElement("svg", {
viewBox: "0 0 1024 1024",
width: "28",
height: "28"
}, /*#__PURE__*/ _react.default.createElement("path", {
d: "M875.594 186.122H390.803a51.162 51.162 0 0 0-36.18 14.986L79.91 475.821a51.166 51.166 0 0 0 0 72.358l274.714 274.712a51.164 51.164 0 0 0 36.179 14.986h484.791c46.033 0 83.484-37.45 83.484-83.483V269.606c.001-46.033-37.45-83.484-83.483-83.484zm32.32 568.274c0 17.85-14.473 32.318-32.32 32.318H390.803L116.089 512l274.714-274.714h484.791c17.849 0 32.32 14.47 32.32 32.32v484.789z",
fill: "currentColor"
}), /*#__PURE__*/ _react.default.createElement("path", {
d: "M753.945 360.214l-121.43 121.429-121.43-121.429s-16.062-8.224-30.356 6.072c-14.295 14.295-6.073 30.357-6.073 30.357l121.43 121.428L486.8 627.357s-8.222 16.062 6.072 30.357c14.297 14.296 30.358 6.072 30.358 6.072l109.286-109.285 109.286 109.285s16.062 8.224 30.357-6.072c14.295-14.295 6.07-30.357 6.07-30.357L668.944 518.072l121.431-121.43s8.22-16.061-6.074-30.356c-14.294-14.296-30.356-6.072-30.356-6.072z",
fill: "currentColor"
}));
};
var NumberKeyboardKey = function NumberKeyboardKey(props) {
var item = props.item;
var _useState = (0, _sliced_to_array._)((0, _react.useState)(false), 2), active = _useState[0], setActive = _useState[1];
var onTouchStart = function onTouchStart() {
setActive(true);
};
var onTouchEnd = function onTouchEnd(item) {
setActive(false);
switch(item.type){
case 'num':
case 'custom':
onChange === null || onChange === void 0 ? void 0 : onChange(item.id);
break;
case 'close':
onClose === null || onClose === void 0 ? void 0 : onClose();
break;
case 'delete':
onDelete === null || onDelete === void 0 ? void 0 : onDelete();
break;
case 'confirm':
onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm();
break;
default:
break;
}
};
var renderContent = function renderContent(item) {
switch(item.type){
case 'num':
case 'custom':
return /*#__PURE__*/ _react.default.createElement("div", null, item.id);
case 'delete':
return /*#__PURE__*/ _react.default.createElement(DeleteIcon, null);
case 'close':
return /*#__PURE__*/ _react.default.createElement(_iconsreact.ArrowDown, {
width: 18,
height: 18
});
case 'confirm':
return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, confirmText || locale.done);
default:
return null;
}
};
return /*#__PURE__*/ _react.default.createElement("div", {
key: item.id,
className: "".concat(classPrefix, "-body-wrapper")
}, /*#__PURE__*/ _react.default.createElement("div", {
className: (0, _classnames.default)({
key: true,
active: active,
close: item.type === 'close',
delete: item.type === 'delete',
confirm: item.type === 'confirm'
}),
onTouchStart: function onTouchStart1() {
return onTouchStart();
},
onTouchEnd: function onTouchEnd1() {
return onTouchEnd(item);
},
onTouchCancel: function onTouchCancel() {
return onTouchEnd(item);
}
}, renderContent(item)));
};
return /*#__PURE__*/ _react.default.createElement(_index.default, (0, _object_spread_props._)((0, _object_spread._)({}, rest), {
visible: visible,
position: "bottom",
onOverlayClick: onClose,
onCloseIconClick: onClose,
zIndex: 9999,
overlayStyle: {
backgroundColor: 'rgba(0, 0, 0, 0)'
}
}), /*#__PURE__*/ _react.default.createElement("div", {
className: (0, _classnames.default)(classPrefix, className),
style: style
}, title && /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-header")
}, /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-header-title")
}, title), type === 'default' && /*#__PURE__*/ _react.default.createElement("span", {
className: "".concat(classPrefix, "-header-close"),
onClick: onConfirm
}, rightActions || locale.done)), /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-body")
}, /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-body-keys")
}, keysList === null || keysList === void 0 ? void 0 : keysList.map(function(item) {
return /*#__PURE__*/ _react.default.createElement(NumberKeyboardKey, {
key: item.id,
item: item
});
})), type === 'rightColumn' && /*#__PURE__*/ _react.default.createElement("div", {
className: "".concat(classPrefix, "-sidebar")
}, /*#__PURE__*/ _react.default.createElement(NumberKeyboardKey, {
key: "delete",
item: {
id: 'delete',
type: 'delete'
}
}), /*#__PURE__*/ _react.default.createElement(NumberKeyboardKey, {
key: "confirm",
item: {
id: 'confirm',
type: 'confirm'
}
})))));
};
NumberKeyboard.displayName = 'NutNumberKeyboard';