UNPKG

tdesign-react

Version:
254 lines (250 loc) 9.41 kB
/** * tdesign v1.16.2 * (c) 2025 tdesign * @license MIT */ import { _ as _slicedToArray } from '../_chunks/dep-10d5731f.js'; import { _ as _defineProperty } from '../_chunks/dep-d67deb2c.js'; import React, { useRef, createRef } from 'react'; import classNames from 'classnames'; import { camelCase } from 'lodash-es'; import { P as PLACEMENT_OFFSET, M as MessageComponent, f as fadeOut } from '../_chunks/dep-c447da7f.js'; export { M as default } from '../_chunks/dep-c447da7f.js'; import { b as getAttach } from '../_chunks/dep-ca8d3fa0.js'; import { render } from '../_util/react-render.js'; import PluginContainer from '../common/PluginContainer.js'; import '../config-provider/index.js'; import { globalConfig, getMessageConfig, setGlobalConfig } from './config.js'; import { useMessageClass } from './useMessageClass.js'; import ConfigProvider from '../config-provider/ConfigProvider.js'; import '../_chunks/dep-74a10cfb.js'; import '../_chunks/dep-8abcbcbc.js'; import '../_chunks/dep-ed34fbd4.js'; import '../_util/noop.js'; import '../hooks/usePersistFn.js'; import './MessageClose.js'; import 'tdesign-icons-react'; import '../hooks/useGlobalIcon.js'; import '../hooks/useConfig.js'; import '../config-provider/ConfigContext.js'; import '../locale/zh_CN.js'; import '../_chunks/dep-751cada9.js'; import 'dayjs'; import '../_chunks/dep-37c4dbb1.js'; import './MessageIcon.js'; import '../loading/index.js'; import '../loading/Loading.js'; import '../common/Portal.js'; import 'react-dom'; import '../hooks/useLayoutEffect.js'; import '../hooks/useDefaultProps.js'; import '../loading/defaultProps.js'; import '../loading/gradient.js'; import '../_chunks/dep-79351403.js'; import '../_chunks/dep-624e7b27.js'; import '../_chunks/dep-a3a3e527.js'; import '../hooks/useDomRefCallback.js'; import '../loading/plugin.js'; import '../_chunks/dep-d26972d5.js'; import '../config-provider/type.js'; import '../loading/style/css.js'; import '../loading/type.js'; import './defaultProps.js'; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var messageKey = 1; var MessageContainerMaps = /* @__PURE__ */new Map(); var MessageContainer = function MessageContainer(props) { var placement = props.placement, children = props.children; var ref = useRef(null); var style = {}; Object.keys(PLACEMENT_OFFSET[placement]).forEach(function (key) { style[camelCase(key)] = PLACEMENT_OFFSET[placement][key]; }); if (placement.includes("top")) { style.top = "".concat(globalConfig.top, "px"); } var _useMessageClass = useMessageClass(), tdMessagePlacementClassGenerator = _useMessageClass.tdMessagePlacementClassGenerator, tdMessageListClass = _useMessageClass.tdMessageListClass; return /* @__PURE__ */React.createElement("div", { ref: ref, className: classNames(tdMessageListClass, tdMessagePlacementClassGenerator(placement)), style: style }, children); }; function getAttachNodeMap(attachNode) { if (!MessageContainerMaps.has(attachNode)) { MessageContainerMaps.set(attachNode, /* @__PURE__ */new Map()); } return MessageContainerMaps.get(attachNode); } function createContainer(placement, attachNode) { var mGlobalConfig = ConfigProvider.getGlobalConfig(); var containerWrapper = document.createElement("div"); attachNode.appendChild(containerWrapper); render(/* @__PURE__ */React.createElement(PluginContainer, { globalConfig: mGlobalConfig }, /* @__PURE__ */React.createElement(MessageContainer, { placement: placement })), containerWrapper); return containerWrapper; } function renderContainer(containerInstance) { var mGlobalConfig = ConfigProvider.getGlobalConfig(); render(/* @__PURE__ */React.createElement(PluginContainer, { globalConfig: mGlobalConfig }, /* @__PURE__ */React.createElement(MessageContainer, { placement: containerInstance.placement }, containerInstance.messages.map(function (item) { return /* @__PURE__ */React.createElement(MessageComponent, _objectSpread(_objectSpread({ key: item.key, ref: item.ref }, item.config), {}, { theme: item.theme })); }))), containerInstance.container); } function destroyContainer(containerInstance, attachNode) { if (containerInstance.messages.length > 0) return; var container = containerInstance.container, placement = containerInstance.placement; render(null, container); if (container.parentNode) { container.parentNode.removeChild(container); } var attachNodeMap = MessageContainerMaps.get(attachNode); if (attachNodeMap) { attachNodeMap["delete"](placement); if (attachNodeMap.size === 0) { MessageContainerMaps["delete"](attachNode); } } } function renderElement(theme, config) { var attach = config.attach, _config$placement = config.placement, placement = _config$placement === void 0 ? "top" : _config$placement; var attachNode = getAttach(attach); var attachNodeMap = getAttachNodeMap(attachNode); var containerInstance = attachNodeMap.get(placement); if (!containerInstance) { var container = createContainer(placement, attachNode); containerInstance = { container: container, messages: [], placement: placement }; attachNodeMap.set(placement, containerInstance); } var style = _objectSpread({}, config.style); if (Array.isArray(config.offset) && config.offset.length === 2) { var _config$offset = _slicedToArray(config.offset, 2), left = _config$offset[0], top = _config$offset[1]; style = _objectSpread(_objectSpread({ left: left, top: top }, style), {}, { position: "relative" }); } messageKey += 1; var currentKey = messageKey; var messageRef = /*#__PURE__*/createRef(); var message = { key: currentKey, ref: messageRef, theme: theme, content: config.content, config: _objectSpread(_objectSpread({}, config), {}, { style: style, placement: placement, onClose: function onClose(context) { closeMessage(context); } }), close: function close() { var index = containerInstance.messages.indexOf(message); if (index === -1) return; fadeOut(messageRef.current, placement, function () { closeMessage(); }); } }; function closeMessage(context) { var index = containerInstance.messages.indexOf(message); if (index === -1) return; fadeOut(messageRef.current, placement, function () { containerInstance.messages.splice(index, 1); renderContainer(containerInstance); destroyContainer(containerInstance, attachNode); if (context) { var _config$onClose; (_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config, context); } }); } containerInstance.messages.push(message); renderContainer(containerInstance); return message; } function isConfig(content) { return Object.prototype.toString.call(content) === "[object Object]" && "content" in content; } var messageMethod = function messageMethod(theme, content, duration) { var config = {}; if (isConfig(content)) { config = _objectSpread({ duration: duration }, content); } else { config = { content: content, duration: duration }; } return Promise.resolve(renderElement(theme, getMessageConfig(config))); }; var MessagePlugin = function MessagePlugin(theme, message, duration) { return messageMethod(theme, message, duration); }; MessagePlugin.info = function (content, duration) { return messageMethod("info", content, duration); }; MessagePlugin.error = function (content, duration) { return messageMethod("error", content, duration); }; MessagePlugin.warning = function (content, duration) { return messageMethod("warning", content, duration); }; MessagePlugin.success = function (content, duration) { return messageMethod("success", content, duration); }; MessagePlugin.question = function (content, duration) { return messageMethod("question", content, duration); }; MessagePlugin.loading = function (content, duration) { return messageMethod("loading", content, duration); }; MessagePlugin.config = function (options) { return setGlobalConfig(options); }; MessagePlugin.close = function (messageInstance) { messageInstance.then(function (instance) { return instance.close(); }); }; MessagePlugin.closeAll = function () { MessageContainerMaps.forEach(function (placementMap, attachNode) { placementMap.forEach(function (container) { if (container.messages.length) { container.messages.splice(0, container.messages.length); destroyContainer(container, attachNode); } }); }); }; export { MessagePlugin }; //# sourceMappingURL=Message.js.map