tdesign-react
Version:
TDesign Component for React
254 lines (250 loc) • 9.41 kB
JavaScript
/**
* 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