UNPKG

@mijadesign/mjui-react-taro

Version:

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

95 lines (94 loc) 5.33 kB
import { a as __awaiter, _ as __rest } from "./tslib.es6-iWu3F_1J.js"; import { a } from "./Close-DVjd2R_0.js"; /* empty css */ import { Dialog as Dialog$1 } from "@nutui/nutui-react-taro"; import { ScrollView } from "@tarojs/components"; import classNames from "classnames"; import React, { useState, isValidElement } from "react"; import { B as Button } from "./button.taro-BpN44TAv.js"; const CustomFooter = ({ footer, hideCancelButton, hideConfirmButton, cancelText = "取消", confirmText = "确定", confirmButtonProps, cancelButtonProps, disableConfirmButton, footerDirection = "horizontal", beforeCancel = () => true, beforeClose = () => true, onCancel, onClose, onConfirm }) => { const [loading, setLoading] = useState(false); const handleCancel = (e) => { e.stopPropagation(); if (!(beforeCancel === null || beforeCancel === void 0 ? void 0 : beforeCancel())) return; if (!(beforeClose === null || beforeClose === void 0 ? void 0 : beforeClose())) return; console.log(onClose); onClose === null || onClose === void 0 ? void 0 : onClose(); onCancel === null || onCancel === void 0 ? void 0 : onCancel(); }; const handleConfirm = (e) => __awaiter(void 0, void 0, void 0, function* () { e.stopPropagation(); setLoading(true); try { yield onConfirm === null || onConfirm === void 0 ? void 0 : onConfirm(e); setLoading(false); onClose === null || onClose === void 0 ? void 0 : onClose(); } catch (_a) { setLoading(false); } }); const cancelButtonClassName = classNames(cancelButtonProps === null || cancelButtonProps === void 0 ? void 0 : cancelButtonProps.className, { [`${mjPrefix}-all-btn`]: !hideCancelButton && !hideConfirmButton }, `${mjPrefix}-cancel-btn`, { [`${mjPrefix}-cancel-vertical-btn`]: footerDirection === "vertical" }); const confirmButtonClassName = classNames(confirmButtonProps === null || confirmButtonProps === void 0 ? void 0 : confirmButtonProps.className, { [`${mjPrefix}-all-btn`]: !hideCancelButton && !hideConfirmButton }); return footer === null ? null : footer || React.createElement( React.Fragment, null, !hideCancelButton && React.createElement(Button, Object.assign({ size: "large", fill: footerDirection === "vertical" ? "none" : void 0, type: "default", onClick: handleCancel, block: hideConfirmButton }, cancelButtonProps, { className: cancelButtonClassName }), cancelText), !hideConfirmButton && React.createElement(Button, Object.assign({ type: "primary", size: "large", disabled: disableConfirmButton, loading, onClick: handleConfirm, block: hideCancelButton }, confirmButtonProps, { className: confirmButtonClassName }), confirmText) ); }; const mjPrefix = "mj-dialog"; const Dialog = (props) => { const { className, children, closeIcon = false, closeIconPosition = "top-right", hideCancelButton, hideConfirmButton, footer, title, lockScroll = true, contentAlign = "left", content = "" } = props, rest = __rest(props, ["className", "children", "closeIcon", "closeIconPosition", "hideCancelButton", "hideConfirmButton", "footer", "title", "lockScroll", "contentAlign", "content"]); const renderCloseIcon = () => { if (!closeIcon) return null; return isValidElement(closeIcon) ? closeIcon : React.createElement(a, { className: `${mjPrefix}-close-icon` }); }; const renderContent = () => { return React.createElement(ScrollView, { scrollY: true, className: classNames(className, mjPrefix, "mj-dialog-content-align", `mj-dialog-content-align-${contentAlign}`) }, content || children); }; return React.createElement(Dialog$1, Object.assign({ className: classNames(className, mjPrefix, { [`${mjPrefix}-no-title`]: !title, [`${mjPrefix}-no-footer`]: footer === null || hideCancelButton && hideConfirmButton && !footer }), footer: React.createElement(CustomFooter, Object.assign({}, props)), closeIcon: renderCloseIcon(), closeIconPosition, lockScroll, title }, rest), renderContent()); }; const open = (selector, options) => { const { className, title, footer, hideCancelButton, hideConfirmButton, closeIcon = false, closeIconPosition = "top-right", footerDirection = "horizontal", lockScroll = true, contentAlign = "left", content = "" } = options; const renderCloseIcon = () => { if (!closeIcon) return null; return isValidElement(closeIcon) ? closeIcon : React.createElement(a, { className: `${mjPrefix}-close-icon` }); }; const renderContent = () => { if (content === "") return ""; return React.createElement(ScrollView, { scrollY: true, className: classNames(className, mjPrefix, "mj-dialog-content-align", `mj-dialog-content-align-${contentAlign}`) }, content); }; Dialog$1.open(selector, Object.assign(Object.assign({}, options), { footer: React.createElement(CustomFooter, Object.assign({}, options)), className: classNames(className, mjPrefix, { [`${mjPrefix}-no-title`]: !title, [`${mjPrefix}-no-footer`]: footer === null || hideCancelButton && hideConfirmButton && !footer }), title, closeIcon: renderCloseIcon(), closeIconPosition, footerDirection, lockScroll, content: renderContent() })); }; const close = Dialog$1.close; Dialog.open = open; Dialog.close = close; export { Dialog as D };