UNPKG

@cainiaofe/cn-ui-m

Version:
82 lines (81 loc) 4.91 kB
import { __assign, __rest } from "tslib"; import $i18n from "../../locales/i18n"; import React, { useEffect, useState } from 'react'; import classNames from 'classnames'; import { CnCard } from "../cn-card"; import { CnIcon } from "../cn-icon"; import { CnButton } from "../cn-button"; import { CnDrawer } from "../cn-drawer"; import { CnPage } from "../cn-page"; import { CnButtonGroup } from '../cn-button-group'; import { withNativeProps, getComponentName } from '@cainiaofe/cn-ui-common'; import { CnEllipsis } from "../cn-ellipsis"; import isArray from 'lodash/isArray'; var classNamePrefix = 'cn-ui-m-dialog-fullpage'; export var CnDialogFullpage = function (props) { var footer = props.footer, onClose = props.onClose, onCancel = props.onCancel, className = props.className, children = props.children, onOk = props.onOk, _a = props.okProps, okProps = _a === void 0 ? {} : _a, _b = props.cancelProps, cancelProps = _b === void 0 ? {} : _b, title = props.title, _c = props.visible, visibleProps = _c === void 0 ? false : _c, noCard = props.noCard, closeMode = props.closeMode, others = __rest(props, ["footer", "onClose", "onCancel", "className", "children", "onOk", "okProps", "cancelProps", "title", "visible", "noCard", "closeMode"]); var hasCard = function () { var _a; if (noCard) { return true; } var types = []; if (Array.isArray(children)) { types = children.map(function (item) { var _a; return (_a = item === null || item === void 0 ? void 0 : item.type) === null || _a === void 0 ? void 0 : _a.displayName; }); } else { types = [((_a = children === null || children === void 0 ? void 0 : children.type) === null || _a === void 0 ? void 0 : _a.displayName) || '']; } return types.includes('CnCard'); }; var _d = useState(visibleProps), visible = _d[0], setVisible = _d[1]; useEffect(function () { setVisible(function (prev) { if (prev === visibleProps) return prev; return visibleProps; }); }, [visibleProps]); var renderFooter = function () { if (footer === false) return null; var isValidFooter = React.isValidElement(footer); var displayName = getComponentName(footer); if (isValidFooter && displayName && ['CnPageFooter', 'CnButtonGroup'].includes(displayName)) { return footer; } var okChildren = okProps.children, _a = okProps.visible, okVisible = _a === void 0 ? true : _a, restOkProps = __rest(okProps, ["children", "visible"]); var cancelChildren = cancelProps.children, _b = cancelProps.visible, cancelVisible = _b === void 0 ? true : _b, restCancelProps = __rest(cancelProps, ["children", "visible"]); if (!okVisible && !cancelVisible && !footer) return null; return (React.createElement(CnButtonGroup, { fullWidth: true, size: "large" }, typeof footer === 'boolean' ? null : footer, cancelVisible ? (React.createElement(CnButton, __assign({ onClick: onCancel }, restCancelProps), cancelChildren || $i18n.get({ id: 'Cancel', dm: '取消' }))) : null, okVisible ? (React.createElement(CnButton, __assign({ onClick: onOk, type: "primary" }, restOkProps), okChildren || $i18n.get({ id: 'OK', dm: '确定' }))) : null)); }; var renderCloseIcon = function () { if (isArray(closeMode) && !closeMode.includes('close')) { return null; } return (React.createElement("div", { className: "".concat(classNamePrefix, "-header-close"), onClick: function (e) { e.stopPropagation(); setVisible(false); // 只需要执行一个,一码多端兼容 if (onClose) { onClose(); } else if (onCancel) { onCancel(); } } }, React.createElement(CnIcon, { size: "large", type: "close" }))); }; return withNativeProps(props, React.createElement(CnDrawer, __assign({ visible: visible, onClose: onClose, onCancel: onCancel, className: classNames(CN_UI_HASH_CLASS_NAME, classNamePrefix) }, others, { placement: "right", closeMode: [], noCard: true }), React.createElement(CnPage, { header: React.createElement("div", { className: "".concat(classNamePrefix, "-header") }, renderCloseIcon(), React.createElement("div", { className: "".concat(classNamePrefix, "-header-title") }, React.createElement(CnEllipsis, null, title))), footer: renderFooter(), className: classNames("".concat(classNamePrefix, "-body")), "data-hideHeader": true }, hasCard() ? children : React.createElement(CnCard, null, children)))); }; CnDialogFullpage.displayName = 'CnDialogFullpage';