UNPKG

@alifd/meet-react

Version:

Fusion Mobile React UI System Component

261 lines (260 loc) 13.9 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _tslib = require("tslib"); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _meetReactComponentOne = require("@alifd/meet-react-component-one"); var _vibrate = require("@uni/vibrate"); var _view = _interopRequireDefault(require("../view")); var _icon = _interopRequireDefault(require("../icon")); var _safeArea = _interopRequireDefault(require("../safe-area")); var _button = _interopRequireDefault(require("../button")); var _modal = _interopRequireDefault(require("../modal")); var _locale = require("../locale"); var _zhCn = _interopRequireDefault(require("../locale/lang/zh-cn")); var _utils = require("../utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var FooterWrapper = function (wrapperProps) { var centered = wrapperProps.centered, children = wrapperProps.children, others = (0, _tslib.__rest)(wrapperProps, ["centered", "children"]); if (centered) { return /*#__PURE__*/(0, _react.createElement)(_view.default, others, children); } return /*#__PURE__*/(0, _react.createElement)(_react.Fragment, null, children); }; var MESSAGE_TYPE = { alert: 'warning', confirm: 'help', success: 'success', error: 'error', warning: 'warning', notice: 'prompt', help: 'help' }; var Dialog = function (props, ref) { var _props$prefix = props.prefix, prefix = _props$prefix === void 0 ? 'mt-' : _props$prefix, _props$visible = props.visible, visible = _props$visible === void 0 ? false : _props$visible, _props$type = props.type, type = _props$type === void 0 ? 'normal' : _props$type, _props$platform = props.platform, platform = _props$platform === void 0 ? 'ios' : _props$platform, titleProp = props.title, content = props.content, contentClassName = props.contentClassName, closeModeProp = props.closeMode, footerActionsProp = props.footerActions, _props$vibrative = props.vibrative, vibrative = _props$vibrative === void 0 ? false : _props$vibrative, _props$footer = props.footer, footer = _props$footer === void 0 ? true : _props$footer, _props$centered = props.centered, centered = _props$centered === void 0 ? false : _props$centered, _props$okProps = props.okProps, okProps = _props$okProps === void 0 ? { text: '' } : _props$okProps, _props$cancelProps = props.cancelProps, cancelProps = _props$cancelProps === void 0 ? { text: '' } : _props$cancelProps, className = props.className, showIconProp = props.showIcon, children = props.children, _props$onOk = props.onOk, onOk = _props$onOk === void 0 ? function () {} : _props$onOk, _props$onCancel = props.onCancel, onCancel = _props$onCancel === void 0 ? function () {} : _props$onCancel, _props$onClose = props.onClose, onClose = _props$onClose === void 0 ? function () {} : _props$onClose, others = (0, _tslib.__rest)(props, ["prefix", "visible", "type", "platform", "title", "content", "contentClassName", "closeMode", "footerActions", "vibrative", "footer", "centered", "okProps", "cancelProps", "className", "showIcon", "children", "onOk", "onCancel", "onClose"]); var showIcon = showIconProp === true ? true : !centered; var closeMode = (0, _react.useMemo)(function () { if (closeModeProp) { return closeModeProp; } return centered ? ['ok', 'mask', 'cancel'] : ['close', 'ok', 'mask', 'cancel']; }, [closeModeProp, centered]); var footerActions = (0, _react.useMemo)(function () { if (footerActionsProp) { return footerActionsProp; } if (['alert', 'success', 'error', 'notice', 'warning', 'help'].indexOf(type) > -1) { return ['ok']; } return ['cancel', 'ok']; }, [footerActionsProp, type]); var iconName = (0, _react.useMemo)(function () { return MESSAGE_TYPE[type] || ''; }, [type]); var locale = (0, _locale.useLocale)('Dialog', others, _zhCn.default.Dialog); var clsPrefix = prefix + "dialog"; var closable = closeMode.includes('close'); var clses = (0, _react.useMemo)(function () { var _classNames, _classNames2, _classNames3, _classNames4, _classNames5, _classNames6, _classNames7, _classNames8, _classNames9, _classNames10; return { dialog: (0, _classnames.default)("" + clsPrefix, className, (_classNames = {}, _classNames[clsPrefix + "--centered"] = centered, _classNames)), header: (0, _classnames.default)(clsPrefix + "-header", (_classNames2 = {}, _classNames2[clsPrefix + "-header--centered"] = centered, _classNames2)), closeWrapper: (0, _classnames.default)(clsPrefix + "-close-wrapper", (_classNames3 = {}, _classNames3[clsPrefix + "-close-wrapper--content"] = !titleProp && closable, _classNames3[clsPrefix + "-close-wrapper--centered"] = centered && closable, _classNames3)), close: (0, _classnames.default)(clsPrefix + "-close", (_classNames4 = {}, _classNames4[clsPrefix + "-close--centered"] = centered, _classNames4)), container: (0, _classnames.default)(clsPrefix + "-container", (_classNames5 = {}, _classNames5[clsPrefix + "-container--centered " + clsPrefix + "-container--" + platform] = centered, _classNames5)), icon: (0, _classnames.default)((_classNames6 = {}, _classNames6[clsPrefix + "-icon"] = true, _classNames6[clsPrefix + "-icon--" + type] = true, _classNames6[clsPrefix + "-icon--centered"] = centered, _classNames6)), title: (0, _classnames.default)(clsPrefix + "-title", (_classNames7 = {}, _classNames7[clsPrefix + "-title--centered"] = centered, _classNames7[clsPrefix + "-title--" + platform] = platform && centered, _classNames7[clsPrefix + "-title--fullwidth"] = titleProp && closable, _classNames7)), content: (0, _classnames.default)(contentClassName, (_classNames8 = {}, _classNames8[clsPrefix + "-content"] = !centered, _classNames8[clsPrefix + "-content--centered " + clsPrefix + "-content--centered-" + platform] = centered, _classNames8)), innerContent: (0, _classnames.default)(clsPrefix + "-inner-content", (_classNames9 = {}, _classNames9[clsPrefix + "-inner-content--fullwidth"] = !closable || closable && titleProp, _classNames9[clsPrefix + "-inner-content--centered"] = centered, _classNames9)), footer: (0, _classnames.default)((_classNames10 = {}, _classNames10[clsPrefix + "-footer"] = !centered, _classNames10[clsPrefix + "-footer--centered " + clsPrefix + "-footer--centered-" + platform] = centered, _classNames10)) }; }, [clsPrefix, className, centered, closable, titleProp, platform]); var okBtnText = okProps.text || locale.ok; var cancelText = cancelProps.text || locale.cancel; var handleIconClose = (0, _react.useCallback)(function (e) { if (closable) { onClose('close', e); } }, [closable, onClose]); (0, _react.useEffect)(function () { if (visible === true && vibrative === true) { (0, _vibrate.vibrateLong)({}).then(function () {}); } }, [visible]); var titleEl = function renderTitle() { var title = titleProp || null; if (title) { title = (0, _utils.isString)(title) ? /*#__PURE__*/(0, _react.createElement)(_meetReactComponentOne.Text, { className: clses.title, numberOfLines: 3 }, title) : /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.title }, title); } return title; }(); return /*#__PURE__*/(0, _react.createElement)(_modal.default, _extends({}, others, { ref: ref, visible: visible, maskClosable: closeMode.includes('mask'), placement: centered === true ? 'center' : 'bottom', containerClassName: clses.dialog, onClose: onClose }), /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.container }, showIcon && centered && iconName ? /*#__PURE__*/(0, _react.createElement)(_icon.default, { name: iconName, className: clses.icon, size: "xxl" }) : null, /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clsPrefix + "-main" }, titleEl || !centered && iconName || closable && titleProp ? /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.header }, showIcon && !centered && iconName ? /*#__PURE__*/(0, _react.createElement)(_icon.default, { name: iconName, className: clses.icon, size: "s" }) : null, titleEl, closable && titleProp ? /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.closeWrapper }, /*#__PURE__*/(0, _react.createElement)(_icon.default, { name: "close", className: clses.close, size: "xxs", onClick: handleIconClose })) : null) : null, /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.content }, /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.innerContent }, function renderInnerContent() { var innerContent = content; if ((0, _utils.isString)(content)) { innerContent = /*#__PURE__*/(0, _react.createElement)(_meetReactComponentOne.Text, { className: clsPrefix + "-content-text" }, content); } else if (children) { innerContent = children; } return innerContent; }()), !titleProp && closable ? /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.closeWrapper }, /*#__PURE__*/(0, _react.createElement)(_icon.default, { name: "close", className: clses.close, size: "xxs", onClick: handleIconClose })) : null))), function renderFooter() { var wrapperClassName = (0, _classnames.default)(clsPrefix + "-btn-col", clsPrefix + "-btn-col--" + platform); if (footer) { if (!(0, _utils.isBoolean)(footer)) { return /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.footer }, footer); } else if ((0, _utils.isValidArray)(footerActions)) { return /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clses.footer }, footerActions.map(function (actionType, index) { var _classNames11; var buttonProps = okProps; if (typeof actionType === 'object') { buttonProps = actionType; } else if (actionType === 'cancel') { buttonProps = cancelProps; } var _buttonProps = buttonProps, text = _buttonProps.text, btnClassNameProp = _buttonProps.className, model = _buttonProps.model, _onClick = _buttonProps.onClick, restProps = (0, _tslib.__rest)(buttonProps, ["text", "className", "model", "onClick"]); var isCancel = actionType === 'cancel'; var btnClassName = (0, _classnames.default)(btnClassNameProp, (_classNames11 = {}, _classNames11[clsPrefix + "-btn"] = !centered, _classNames11[clsPrefix + "-btn--centered"] = centered, _classNames11[clsPrefix + "-btn--centered-" + actionType] = centered, _classNames11)); var btnModel = model || 'text'; if (!centered && !model) { btnModel = isCancel ? 'outline' : 'solid'; } var btnText; if (text) { btnText = text; } else if (isCancel) { btnText = cancelText; } else { btnText = okBtnText; } return /*#__PURE__*/(0, _react.createElement)(FooterWrapper, { key: "mt_dialog_" + index, centered: centered, className: centered ? wrapperClassName : '' }, !(index === 0) ? /*#__PURE__*/(0, _react.createElement)(_view.default, { className: clsPrefix + "-footer-gap" }) : null, /*#__PURE__*/(0, _react.createElement)(_button.default, _extends({ key: "mt_dialog_" + index, type: "primary", size: "large", model: btnModel }, restProps, { className: btnClassName, onClick: function onClick(e) { if ((0, _utils.isString)(actionType)) { if (isCancel) { onCancel(e); } else { onOk(e); } if (closeMode.includes(actionType)) { onClose(actionType, e); } } else if (actionType.onClick) { actionType.onClick(e); } } }), btnText)); })); } } return null; }(), !centered ? /*#__PURE__*/(0, _react.createElement)(_safeArea.default, null) : null); }; Dialog.displayName = 'Dialog'; var _default = exports.default = /*#__PURE__*/(0, _react.forwardRef)(Dialog);