UNPKG

@uimkit/uikit-react

Version:

<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>

138 lines (135 loc) 9.44 kB
import { __assign } from 'tslib'; import React__default, { useState, useRef } from 'react'; import { Plugins } from '../Plugins/index.js'; import { Icon } from '../Icon/Icon.js'; import { IconTypes } from '../Icon/type.js'; import { useTranslationContext } from '../../context/TranslationContext.js'; import '../../context/UIKitContext.js'; import '../../context/ComponentContext.js'; import '../../context/ChatActionContext.js'; import '../../context/MessageInputContext.js'; import { useUIMessageContext } from '../../context/UIMessageContext.js'; import { useChatStateContext } from '../../context/ChatStateContext.js'; import { useMessagePluginElement } from './hooks/useMessagePluginElement.js'; import { useMessageHandler } from './hooks/useMessageHandler.js'; import { MessageType } from '../../types/models.js'; import '../../types/events.js'; import { MESSAGE_STATUS, MESSAGE_FLOW } from '../../constants.js'; import 'i18next'; var PluginsNameEnum; (function (PluginsNameEnum) { PluginsNameEnum["quote"] = "quote"; PluginsNameEnum["forward"] = "forward"; PluginsNameEnum["copy"] = "copy"; PluginsNameEnum["delete"] = "delete"; PluginsNameEnum["resend"] = "resend"; PluginsNameEnum["revoke"] = "revoke"; })(PluginsNameEnum || (PluginsNameEnum = {})); function MessagePlugins(props) { var _a, _b, _c, _d, _e, _f; var propsPlugins = props.plugins, propsShowNumber = props.showNumber, propsMoreIcon = props.MoreIcon, propsPluginConfig = props.config; var _g = useState(''), className = _g[0], setClassName = _g[1]; var pluginsRef = useRef(null); var _h = useUIMessageContext('MessagePlugins'), message = _h.message, contextPlugin = _h.plugin; var messageListRef = useChatStateContext().messageListRef; var _j = useMessageHandler({ message: message }), handleDelMessage = _j.handleDelMessage, handleRevokeMessage = _j.handleRevokeMessage, handleReplyMessage = _j.handleReplyMessage, handleCopyMessage = _j.handleCopyMessage, handleResendMessage = _j.handleResendMessage, handleForWardMessage = _j.handleForWardMessage; var pluginConfig = { quote: __assign(__assign({ isShow: true }, propsPluginConfig === null || propsPluginConfig === void 0 ? void 0 : propsPluginConfig.quote), (_a = contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.config) === null || _a === void 0 ? void 0 : _a.quote), forward: __assign(__assign({ isShow: true }, propsPluginConfig === null || propsPluginConfig === void 0 ? void 0 : propsPluginConfig.forward), (_b = contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.config) === null || _b === void 0 ? void 0 : _b.forward), copy: __assign(__assign({ isShow: true, relateMessageType: [MessageType.Text] }, propsPluginConfig === null || propsPluginConfig === void 0 ? void 0 : propsPluginConfig.copy), (_c = contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.config) === null || _c === void 0 ? void 0 : _c.copy), delete: __assign(__assign({ isShow: true }, propsPluginConfig === null || propsPluginConfig === void 0 ? void 0 : propsPluginConfig.delete), (_d = contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.config) === null || _d === void 0 ? void 0 : _d.delete), revoke: __assign(__assign({ isShow: true }, propsPluginConfig === null || propsPluginConfig === void 0 ? void 0 : propsPluginConfig.revoke), (_e = contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.config) === null || _e === void 0 ? void 0 : _e.revoke), resend: __assign(__assign({ isShow: true }, propsPluginConfig === null || propsPluginConfig === void 0 ? void 0 : propsPluginConfig.resend), (_f = contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.config) === null || _f === void 0 ? void 0 : _f.resend), }; var t = useTranslationContext('MessagePlugins').t; var handleVisible = function (data) { setClassName("".concat(!data.top && 'message-plugin-top', " ").concat(!data.left && 'message-plugin-left')); }; var RevokeElement = useMessagePluginElement({ children: (React__default.createElement("div", { className: "message-plugin-item" }, React__default.createElement("span", null, t('message.action.revoke')), React__default.createElement(Icon, { width: 20, height: 20, type: IconTypes.REVOCATION }))), handle: function (e) { pluginsRef.current.closeMore(); handleRevokeMessage(e); }, message: message, isShow: pluginConfig.revoke.isShow && ((message === null || message === void 0 ? void 0 : message.status) === MESSAGE_STATUS.SUCCESS && message.flow === MESSAGE_FLOW.OUT), relateMessageType: pluginConfig.revoke.relateMessageType, }); var DeleteElement = useMessagePluginElement({ children: (React__default.createElement("div", { className: "message-plugin-item" }, React__default.createElement("span", { className: "del" }, t('message.action.delete')), React__default.createElement(Icon, { width: 20, height: 20, type: IconTypes.DEL }))), handle: function (e) { pluginsRef.current.closeMore(); handleDelMessage(e); }, message: message, isShow: pluginConfig.delete.isShow /* TODO && message?.status === MESSAGE_STATUS.SUCCESS*/, relateMessageType: pluginConfig.delete.relateMessageType, }); var ReplyElement = useMessagePluginElement({ children: (React__default.createElement("div", { className: "message-plugin-item" }, React__default.createElement("span", null, t('message.action.quote')), React__default.createElement(Icon, { width: 20, height: 20, type: IconTypes.QUOTE }))), handle: function (e) { pluginsRef.current.closeMore(); handleReplyMessage(e); }, message: message, isShow: pluginConfig.quote.isShow && (message === null || message === void 0 ? void 0 : message.status) === MESSAGE_STATUS.SUCCESS, relateMessageType: pluginConfig.quote.relateMessageType, }); var CopyElement = useMessagePluginElement({ children: (React__default.createElement("div", { className: "message-plugin-item" }, React__default.createElement("span", null, t('message.action.copy')), React__default.createElement(Icon, { width: 20, height: 20, type: IconTypes.COPY }))), handle: function (e) { pluginsRef.current.closeMore(); handleCopyMessage(e); }, message: message, isShow: pluginConfig.copy.isShow && (message === null || message === void 0 ? void 0 : message.status) === MESSAGE_STATUS.SUCCESS, relateMessageType: pluginConfig.copy.relateMessageType, }); var ResendElement = useMessagePluginElement({ children: (React__default.createElement("div", { className: "message-plugin-item" }, React__default.createElement("span", null, "\u91CD\u53D1"), React__default.createElement(Icon, { width: 20, height: 20, type: IconTypes.REPLY }))), handle: function (e) { pluginsRef.current.closeMore(); handleResendMessage(e); }, message: message, isShow: pluginConfig.resend.isShow && (message === null || message === void 0 ? void 0 : message.status) !== MESSAGE_STATUS.SUCCESS, relateMessageType: pluginConfig.resend.relateMessageType, }); var ForWardElement = useMessagePluginElement({ children: (React__default.createElement("div", { className: "message-plugin-item" }, React__default.createElement("span", null, t('message.action.forward')), React__default.createElement(Icon, { width: 20, height: 20, type: IconTypes.FORWARD }))), handle: function (e) { pluginsRef.current.closeMore(); handleForWardMessage(e); }, message: message, isShow: pluginConfig.forward.isShow && (message === null || message === void 0 ? void 0 : message.status) === MESSAGE_STATUS.SUCCESS, relateMessageType: pluginConfig.forward.relateMessageType, }); var defaultPlugins = [ RevokeElement, ReplyElement, ForWardElement, DeleteElement, ResendElement, CopyElement, ]; var plugins = (propsPlugins || (contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.plugins) || defaultPlugins).filter(function (item) { return item; }); var MoreIcon = propsMoreIcon || (contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.MoreIcon) || React__default.createElement(Icon, { className: "icon-more", width: 16, height: 16, type: IconTypes.MORE }); var showNumber = propsShowNumber || (contextPlugin === null || contextPlugin === void 0 ? void 0 : contextPlugin.showNumber) || 0; return (message === null || message === void 0 ? void 0 : message.status) !== MESSAGE_STATUS.UNSEND && (React__default.createElement(Plugins, { className: "message-plugin", customClass: className, ref: pluginsRef, plugins: plugins, showNumber: showNumber, MoreIcon: MoreIcon, root: messageListRef === null || messageListRef === void 0 ? void 0 : messageListRef.current, handleVisible: handleVisible })); } export { MessagePlugins }; //# sourceMappingURL=MessagePlugins.js.map