@mijadesign/mjui-react-taro
Version:
京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序
95 lines (94 loc) • 5.33 kB
JavaScript
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
};