UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

139 lines (138 loc) 6.37 kB
import { _ as __rest } from "./tslib.es6.js"; import React__default, { useMemo, useState } from "react"; import classNames from "classnames"; import { ArrowDown } from "@nutui/icons-react"; import Popup__default from "./Popup.js"; import { useConfig } from "./ConfigProvider.js"; import { C as ComponentDefaults } from "./typings.js"; const defaultProps = Object.assign(Object.assign({}, ComponentDefaults), { visible: false, rightActions: "", type: "default", custom: [], random: false, onClose: () => { } }); const NumberKeyboard = (props) => { const { locale } = useConfig(); const _a = Object.assign(Object.assign({}, defaultProps), props), { title, rightActions, confirmText, visible, type, custom, random, style, className, onChange, onDelete, onClose, onConfirm } = _a, rest = __rest(_a, ["title", "rightActions", "confirmText", "visible", "type", "custom", "random", "style", "className", "onChange", "onDelete", "onClose", "onConfirm"]); const classPrefix = "nut-numberkeyboard"; const getBasicKeys = () => { const keys = new Array(9).fill(0).map((_, index) => { return { id: String(index + 1), type: "num" }; }); return random ? keys.sort(() => Math.random() > 0.5 ? 1 : -1) : keys; }; const getCustomKeys = () => { const 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; }; const keysList = useMemo(() => { return [...getBasicKeys(), ...getCustomKeys()]; }, [type, random, custom]); const DeleteIcon = () => { return React__default.createElement( "svg", { viewBox: "0 0 1024 1024", width: "28", height: "28" }, 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" }), 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" }) ); }; const NumberKeyboardKey = (props2) => { const { item } = props2; const [active, setActive] = useState(false); const onTouchStart = () => { setActive(true); }; const onTouchEnd = (item2) => { setActive(false); switch (item2.type) { case "num": case "custom": onChange === null || onChange === void 0 ? void 0 : onChange(item2.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; } }; const renderContent = (item2) => { switch (item2.type) { case "num": case "custom": return React__default.createElement("div", null, item2.id); case "delete": return React__default.createElement(DeleteIcon, null); case "close": return React__default.createElement(ArrowDown, { width: 18, height: 18 }); case "confirm": return React__default.createElement(React__default.Fragment, null, confirmText || locale.done); default: return null; } }; return React__default.createElement( "div", { key: item.id, className: `${classPrefix}-body-wrapper` }, React__default.createElement("div", { className: classNames({ key: true, active, close: item.type === "close", delete: item.type === "delete", confirm: item.type === "confirm" }), onTouchStart: () => onTouchStart(), onTouchEnd: () => onTouchEnd(item), onTouchCancel: () => onTouchEnd(item) }, renderContent(item)) ); }; return React__default.createElement( Popup__default, Object.assign({}, rest, { visible, position: "bottom", onOverlayClick: onClose, onCloseIconClick: onClose, zIndex: 9999, overlayStyle: { backgroundColor: "rgba(0, 0, 0, 0)" } }), React__default.createElement( "div", { className: classNames(classPrefix, className), style }, title && React__default.createElement( "div", { className: `${classPrefix}-header` }, React__default.createElement("div", { className: `${classPrefix}-header-title` }, title), type === "default" && React__default.createElement("span", { className: `${classPrefix}-header-close`, onClick: onConfirm }, rightActions || locale.done) ), React__default.createElement( "div", { className: `${classPrefix}-body` }, React__default.createElement("div", { className: `${classPrefix}-body-keys` }, keysList === null || keysList === void 0 ? void 0 : keysList.map((item) => { return React__default.createElement(NumberKeyboardKey, { key: item.id, item }); })), type === "rightColumn" && React__default.createElement( "div", { className: `${classPrefix}-sidebar` }, React__default.createElement(NumberKeyboardKey, { key: "delete", item: { id: "delete", type: "delete" } }), React__default.createElement(NumberKeyboardKey, { key: "confirm", item: { id: "confirm", type: "confirm" } }) ) ) ) ); }; NumberKeyboard.displayName = "NutNumberKeyboard"; export { NumberKeyboard as default };