UNPKG

cometchat-react-ui-kit2

Version:

CometChat UI Kit for React App

796 lines (773 loc) 42.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.CometChatMessageBubble = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _ = require("../.."); var _2 = require("../../.."); var _style = require("./style"); var _Shared = require("../../../Shared"); var _3 = require(".."); var _downloadIcon = _interopRequireDefault(require("./resources/download-icon.svg")); var _whiteboard = _interopRequireDefault(require("./resources/whiteboard.svg")); var _collaborative = _interopRequireDefault(require("./resources/collaborative.svg")); var _closeChat = _interopRequireDefault(require("./resources/close-chat.svg")); var _unsafeContent = _interopRequireDefault(require("./resources/unsafe-content.svg")); var _MessageReactionsConfiguration = require("../../CometChatMessageReactions/MessageReactionsConfiguration"); var _DateConfiguration = require("../../../Shared/PrimaryComponents/CometChatConfiguration/DateConfiguration"); var _TextBubbleConfiguration = require("../CometChatTextBubble/TextBubbleConfiguration"); var _FileBubbleConfiguration = require("../CometChatFileBubble/FileBubbleConfiguration"); var _ImageBubbleConfiguration = require("../CometChatImageBubble/ImageBubbleConfiguration"); var _AudioBubbleConfiguration = require("../CometChatAudioBubble/AudioBubbleConfiguration"); var _VideoBubbleConfiguration = require("../CometChatVideoBubble/VideoBubbleConfiguration"); var _PollBubbleConfiguration = require("../CometChatPollBubble/PollBubbleConfiguration"); var _StickerBubbleConfiguration = require("../CometChatStickerBubble/StickerBubbleConfiguration"); var _DeletedBubbleConfiguration = require("../CometChatDeletedMessageBubble/DeletedBubbleConfiguration"); var _CollaborativeDocumentConfiguration = require("../CometChatDocumentBubble/CollaborativeDocumentConfiguration"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } /** *CometChatMessageBubble handles the display and functionality for all types of messages in a message list. *It renders different bubbles according to the message type provided to it by the parent. * * @version 1.0.0 * @author CometChatTeam * @copyright © 2022 CometChat Inc. */ var CometChatMessageBubble = function CometChatMessageBubble(props) { var messageKey = props.messageKey, customView = props.customView, messageBubbleData = props.messageBubbleData, timeAlignment = props.timeAlignment, messageOptions = props.messageOptions, messageObject = props.messageObject, alignment = props.alignment, updateReaction = props.updateReaction, loggedInUser = props.loggedInUser, style = props.style, theme = props.theme, avatarConfiguration = props.avatarConfiguration, messageReceiptConfiguration = props.messageReceiptConfiguration, messageReactionsConfiguration = props.messageReactionsConfiguration, dateConfiguration = props.dateConfiguration; var _React$useState = _react["default"].useState(null), _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2), isHovering = _React$useState2[0], setIsHovering = _React$useState2[1]; var _theme = new _2.CometChatTheme(theme || {}); var _avatarConfiguration = avatarConfiguration || new _2.AvatarConfiguration({}); var _messageReactionsConfiguration = messageReactionsConfiguration || new _MessageReactionsConfiguration.MessageReactionsConfiguration({}); /** * * @returns ID for each Bubble rendered */ var getId = function getId() { return messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.id && messageObject.id ? messageObject.id : null; }; /** * * @returns Avatar, if the user enabled thumbnail of messageBubbleData */ var getAvatar = function getAvatar() { var _avatarConfiguration$, _avatarConfiguration$2, _avatarConfiguration$3, _avatarConfiguration$4, _avatarConfiguration$5, _theme$palette, _theme$palette2, _avatarConfiguration$6, _theme$typography, _theme$palette3, _theme$palette4, _avatarConfiguration$7, _avatarConfiguration$8, _avatarConfiguration$9, _theme$palette5, _theme$palette6; var outerViewWidth = _avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : _avatarConfiguration.outerViewWidth; var outerView = "".concat(outerViewWidth, " solid ").concat(_theme.palette.primary[_theme.palette.mode]); var avatarStyle = new _Shared.AvatarStyles({ width: _avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$ = _avatarConfiguration.style) === null || _avatarConfiguration$ === void 0 ? void 0 : _avatarConfiguration$.width, height: _avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$2 = _avatarConfiguration.style) === null || _avatarConfiguration$2 === void 0 ? void 0 : _avatarConfiguration$2.height, outerViewSpacing: _avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$3 = _avatarConfiguration.style) === null || _avatarConfiguration$3 === void 0 ? void 0 : _avatarConfiguration$3.outerViewSpacing, outerView: (_avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$4 = _avatarConfiguration.style) === null || _avatarConfiguration$4 === void 0 ? void 0 : _avatarConfiguration$4.outerViewSpacing) || outerView, textColor: (_avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$5 = _avatarConfiguration.style) === null || _avatarConfiguration$5 === void 0 ? void 0 : _avatarConfiguration$5.textColor) || (_theme === null || _theme === void 0 ? void 0 : (_theme$palette = _theme.palette) === null || _theme$palette === void 0 ? void 0 : _theme$palette.accent900[_theme === null || _theme === void 0 ? void 0 : (_theme$palette2 = _theme.palette) === null || _theme$palette2 === void 0 ? void 0 : _theme$palette2.mode]), textFont: (_avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$6 = _avatarConfiguration.style) === null || _avatarConfiguration$6 === void 0 ? void 0 : _avatarConfiguration$6.textFont) || (0, _2.fontHelper)(_theme === null || _theme === void 0 ? void 0 : (_theme$typography = _theme.typography) === null || _theme$typography === void 0 ? void 0 : _theme$typography.name), border: "1px solid ".concat(_theme === null || _theme === void 0 ? void 0 : (_theme$palette3 = _theme.palette) === null || _theme$palette3 === void 0 ? void 0 : _theme$palette3.accent600[_theme === null || _theme === void 0 ? void 0 : (_theme$palette4 = _theme.palette) === null || _theme$palette4 === void 0 ? void 0 : _theme$palette4.mode]), borderRadius: _avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$7 = _avatarConfiguration.style) === null || _avatarConfiguration$7 === void 0 ? void 0 : _avatarConfiguration$7.borderRadius, backgroundSize: _avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$8 = _avatarConfiguration.style) === null || _avatarConfiguration$8 === void 0 ? void 0 : _avatarConfiguration$8.backgroundSize, backgroundColor: (_avatarConfiguration === null || _avatarConfiguration === void 0 ? void 0 : (_avatarConfiguration$9 = _avatarConfiguration.style) === null || _avatarConfiguration$9 === void 0 ? void 0 : _avatarConfiguration$9.backgroundColor) || (_theme === null || _theme === void 0 ? void 0 : (_theme$palette5 = _theme.palette) === null || _theme$palette5 === void 0 ? void 0 : _theme$palette5.accent600[_theme === null || _theme === void 0 ? void 0 : (_theme$palette6 = _theme.palette) === null || _theme$palette6 === void 0 ? void 0 : _theme$palette6.mode]) }); // if messageObject has thumbnail key if (messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.thumbnail) { var _messageObject$sender, _messageObject$sender2; if (messageObject !== null && messageObject !== void 0 && (_messageObject$sender = messageObject.sender) !== null && _messageObject$sender !== void 0 && _messageObject$sender.avatar) { // If Icon provided return /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageAvatarStyle)(), className: "message_kit__avatar" }, /*#__PURE__*/_react["default"].createElement(_2.CometChatAvatar, (0, _extends2["default"])({}, avatarStyle, { image: messageObject.sender.avatar }))); } else if (messageObject !== null && messageObject !== void 0 && (_messageObject$sender2 = messageObject.sender) !== null && _messageObject$sender2 !== void 0 && _messageObject$sender2.name) { // show initials for name return /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageAvatarStyle)(), className: "message_kit__avatar" }, /*#__PURE__*/_react["default"].createElement(_2.CometChatAvatar, (0, _extends2["default"])({}, avatarStyle, { name: messageObject.sender.name }))); } } return null; }; /** * * @param {*} customView * @returns custom Bubble set by The user */ var getCustomView = function getCustomView(customView) { return /*#__PURE__*/_react["default"].createElement(customView, _objectSpread({ key: messageObject.key, messageBubbleData: messageBubbleData, alignment: alignment, timeAlignment: timeAlignment, messageObject: messageObject, messageOptions: messageOptions, loggedInUser: loggedInUser }, style)); }; /** * Displays message options of a bubble when mouse is hovered on it */ var getMessageOptions = function getMessageOptions() { return isHovering && messageObject && !messageObject.deletedAt ? /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_2.CometChatMenuList, { isOpen: true, key: messageObject.id, data: messageObject, list: messageOptions, style: (0, _style.messageOptionStyle)(alignment, loggedInUser, messageObject, _theme) })) : null; }; /** * * @returns Message text in a bubble of type based on the message itself */ var getMessage = function getMessage() { /** * Returns a bubble based on messageObject type */ if (customView) { return getCustomView(customView); } else if (messageObject.category === _2.MessageCategoryConstants.message) { var messageStyle = {}; /** emoji font according to number of emoji to be display */ var emojiFont = function emojiFont(str) { var strLength = str === null || str === void 0 ? void 0 : str.length; var fontSize = null; if (strLength) { var emojiRE = str === null || str === void 0 ? void 0 : str.match(/(?:[\xA9\xAE\u2122\u23E9-\u23EF\u23F3\u23F8-\u23FA\u24C2\u25B6\u2600-\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDE51\uDF00-\uDFFF]|\uD83D[\uDC00-\uDE4F\uDE80-\uDEFF]|\uD83E[\uDD00-\uDDFF])/g); var numbers = emojiRE === null || emojiRE === void 0 ? void 0 : emojiRE.length; if (numbers === 1 && parseInt(strLength / 2) === numbers) { fontSize = "32px"; } else if (numbers === 2 && parseInt(strLength / 2) === numbers) { fontSize = "24px"; } else if (numbers === 3 && parseInt(strLength / 2) === numbers) { fontSize = "16px"; } } return fontSize; }; switch (messageObject.type) { case _2.MessageTypeConstants.text: { var textColor; if (alignment === _2.MessageBubbleAlignmentConstants.right) { textColor = { textColor: _theme.palette.accent900["light"] }; } else { textColor = { textColor: _theme.palette.accent900["dark"] }; } messageStyle = _objectSpread(_objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "", height: "", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { textFont: emojiFont(messageObject.text) || (0, _2.fontHelper)(_theme.typography.subtitle1) }, textColor), {}, { linkPreviewTitleFont: (0, _2.fontHelper)(_theme.typography.title2), linkPreviewTitleColor: _theme.palette.accent[_theme.palette.mode], linkPreviewSubtitleFont: (0, _2.fontHelper)(_theme.typography.subtitle2), linkPreviewSubtitleColor: _theme.palette.accent600[_theme.palette.mode], linkPreviewBackgroundColor: _theme.palette.background[_theme.palette.mode] }); return /*#__PURE__*/_react["default"].createElement(_.CometChatTextBubble, { key: messageObject.id, messageObject: messageObject, overlayImageURL: _unsafeContent["default"], text: "", linkPreviewTitle: "", linkPreviewSubtitle: "", theme: _theme, style: messageStyle }); } case _2.MessageTypeConstants.image: { messageStyle = _objectSpread({}, new _Shared.BaseStyles({ width: "100%", height: "168px", background: "none", border: "none", borderRadius: "12px", activeBackground: "" })); return /*#__PURE__*/_react["default"].createElement(_.CometChatImageBubble, { key: messageObject.id, messageObject: messageObject, style: messageStyle }); } case _2.MessageTypeConstants.video: { messageStyle = _objectSpread({}, new _Shared.BaseStyles({ width: "250px", height: "200px", background: "none", border: "none", borderRadius: "12px", activeBackground: "" })); return /*#__PURE__*/_react["default"].createElement(_.CometChatVideoBubble, { key: messageObject.id, messageObject: messageObject, style: messageStyle }); } case _2.MessageTypeConstants.audio: { messageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "250px", height: "auto", background: "none", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { iconTint: _theme.palette.primary[_theme.palette.mode] }); return /*#__PURE__*/_react["default"].createElement(_.CometChatAudioBubble, { key: messageObject.id, messageObject: messageObject, style: messageStyle }); } case _2.MessageTypeConstants.file: { messageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "190px", height: "56px", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { titleFont: (0, _2.fontHelper)(_theme.typography.title2), subTitleFont: (0, _2.fontHelper)(_theme.typography.subtitle2), iconTint: _theme.palette.primary[_theme.palette.mode], titleColor: _theme.palette.accent[_theme.palette.mode], subTitleColor: _theme.palette.accent600[_theme.palette.mode] }); return /*#__PURE__*/_react["default"].createElement(_.CometChatFileBubble, { key: messageObject.id, messageObject: messageObject, iconURL: _downloadIcon["default"], style: messageStyle, theme: _theme }); } default: } } else if (props.messageObject.category === _2.MessageCategoryConstants.custom) { var customMessageStyle = {}; switch (messageObject.type) { case _2.MessageTypeConstants.poll: { if (alignment === _2.MessageBubbleAlignmentConstants.right) { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "100%", height: "100%", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { votePercentTextFont: (0, _2.fontHelper)(_theme.typography.subtitle1), //not in skecth votePercentTextColor: _theme.palette.background[_theme.palette.mode], //not in sketch pollQuestionTextFont: (0, _2.fontHelper)(_theme.typography.subtitle1), pollQuestionTextColor: _theme.palette.accent[_theme.palette.mode], pollOptionTextFont: (0, _2.fontHelper)(_theme.typography.subtitle1), pollOptionTextColor: _theme.palette.accent[_theme.palette.mode], pollOptionsBackground: _theme.palette.background[_theme.palette.mode], optionIconTint: style.optionsIconTint || _theme.palette.accent500[_theme.palette.mode], totalVoteCountTextFont: (0, _2.fontHelper)(_theme.typography.subtitle2), totalVoteCountTextColor: _theme.palette.accent600[_theme.palette.mode], selectedPollOptionBackground: style.selectedPollOptionBackground || _theme.palette.primary[_theme.palette.mode] }); } else { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "100%", height: "100%", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { background: "transparent", votePercentTextFont: (0, _2.fontHelper)(_theme.typography.subtitle1), votePercentTextColor: _theme.palette.background[_theme.palette.mode], pollQuestionTextColor: _theme.palette.accent[_theme.palette.mode], pollQuestionTextFont: (0, _2.fontHelper)(_theme.typography.subtitle1), pollOptionTextFont: (0, _2.fontHelper)(_theme.typography.subtitle1), pollOptionTextColor: _theme.palette.accent[_theme.palette.mode], pollOptionsBackground: _theme.palette.background[_theme.palette.mode], totalVoteCountTextFont: (0, _2.fontHelper)(_theme.typography.subtitle2), totalVoteCountTextColor: _theme.palette.accent600[_theme.palette.mode], optionIconTint: style.optionsIconTint || _theme.palette.accent500[_theme.palette.mode], pollOptionBorder: "none", selectedPollOptionBackground: style.selectedPollOptionBackground || _theme.palette.primary[_theme.palette.mode] }); } return /*#__PURE__*/_react["default"].createElement(_.CometChatPollBubble, { key: messageObject.id, messageObject: messageObject, pollQuestion: "", options: null, totalVoteCount: null, optionIconURL: null, loggedInUser: loggedInUser || loggedInUser, theme: _theme, style: customMessageStyle }); } case _2.MessageTypeConstants.sticker: { if (alignment === _2.MessageBubbleAlignmentConstants.right || alignment === _2.MessageBubbleAlignmentConstants.left) { customMessageStyle = _objectSpread({}, new _Shared.BaseStyles({ width: "150px", height: "auto", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })); } return /*#__PURE__*/_react["default"].createElement(_.CometChatStickerBubble, { key: messageKey, messageObject: messageObject, style: customMessageStyle }); } case _2.MessageTypeConstants.whiteboard: { if (alignment === _2.MessageBubbleAlignmentConstants.right) { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "228px", height: "134px", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { titleFont: (0, _2.fontHelper)(_theme.typography.title2), iconTint: _theme.palette.accent700[_theme.palette.mode], titleColor: _theme.palette.accent[_theme.palette.mode], subTitleColor: _theme.palette.accent600[_theme.palette.mode], subTitleFont: (0, _2.fontHelper)(_theme.typography.subtitle2), buttonTextColor: _theme.palette.primary[_theme.palette.mode], buttonTextFont: (0, _2.fontHelper)(_theme.typography.title2), buttonBackground: "transparent" }); } else { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "228px", height: "134px", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { titleFont: (0, _2.fontHelper)(_theme.typography.title2), iconTint: _theme.palette.accent700[_theme.palette.mode], titleColor: _theme.palette.accent[_theme.palette.mode], subTitleColor: _theme.palette.accent600[_theme.palette.mode], subTitleFont: (0, _2.fontHelper)(_theme.typography.subtitle2), buttonTextColor: _theme.palette.primary[_theme.palette.mode], buttonTextFont: (0, _2.fontHelper)(_theme.typography.title2), buttonBackground: "transparent" }); } return /*#__PURE__*/_react["default"].createElement(_.CometChatWhiteboardBubble, { whiteboardURL: "", key: messageKey, messageObject: messageObject, subTitle: (0, _2.localize)("WHITEBOARD_SUBTITLE_MESSAGE"), iconURL: _whiteboard["default"], title: (0, _2.localize)("SHARED_COLLABORATIVE_WHITEBOARD"), buttonText: (0, _2.localize)("OPEN_WHITEBOARD"), theme: _theme, style: customMessageStyle }); } case _2.MessageTypeConstants.document: { if (alignment === _2.MessageBubbleAlignmentConstants.right) { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "228px", height: "134px", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { titleFont: (0, _2.fontHelper)(_theme.typography.title2), iconTint: _theme.palette.accent700[_theme.palette.mode], titleColor: _theme.palette.accent[_theme.palette.mode], subTitleColor: _theme.palette.accent600[_theme.palette.mode], subTitleFont: (0, _2.fontHelper)(_theme.typography.subtitle2), buttonTextColor: _theme.palette.primary[_theme.palette.mode], buttonTextFont: (0, _2.fontHelper)(_theme.typography.title2), buttonBackground: "transparent" }); } else { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "228px", height: "134px", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { titleFont: (0, _2.fontHelper)(_theme.typography.title2), iconTint: _theme.palette.accent700[_theme.palette.mode], titleColor: _theme.palette.accent[_theme.palette.mode], subTitleColor: _theme.palette.accent600[_theme.palette.mode], subTitleFont: (0, _2.fontHelper)(_theme.typography.subtitle2), buttonTextColor: _theme.palette.primary[_theme.palette.mode], buttonTextFont: (0, _2.fontHelper)(_theme.typography.title2), buttonBackground: "transparent" }); } return /*#__PURE__*/_react["default"].createElement(_.CometChatDocumentBubble, { key: messageKey, messageObject: messageObject, iconURL: _collaborative["default"], title: (0, _2.localize)("SHARED_COLLABORATIVE_DOCUMENT"), subTitle: (0, _2.localize)("DOCUMENT_SUBTITLE_MESSAGE"), buttonText: (0, _2.localize)("OPEN_DOCUMENT"), theme: _theme, style: customMessageStyle }); } default: { if (alignment === _2.MessageBubbleAlignmentConstants.right) { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "auto", height: "auto", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { textColor: _theme.palette.primary[_theme.palette.mode], textFont: (0, _2.fontHelper)(_theme.typography.subtitle1) }); } else { customMessageStyle = _objectSpread(_objectSpread({}, new _Shared.BaseStyles({ width: "auto", height: "auto", background: "transparent", border: "none", borderRadius: "12px", activeBackground: "" })), {}, { textColor: _theme.palette.accent[_theme.palette.mode], textFont: (0, _2.fontHelper)(_theme.typography.subtitle1) }); } return /*#__PURE__*/_react["default"].createElement(_.CometChatPlaceholderBubble, { key: messageKey, style: customMessageStyle, text: messageObject.type + "message is not supported" }); } } } }; /** * Returns delete bubble view if a message is deleted */ var getDeleteBubble = function getDeleteBubble() { return /*#__PURE__*/_react["default"].createElement(_.CometChatDeletedMessageBubble, { text: (0, _2.localize)("MESSAGE_IS_DELETED"), style: (0, _style.deleteBubbleStyle)(_theme) }); }; /** * * @returns Reactions on a message */ var messageReactions = function messageReactions() { var reactionsData = (0, _2.getExtensionsData)(messageObject, _2.ExtensionConstants.reactions); if (reactionsData && Object.keys(reactionsData).length) { return /*#__PURE__*/_react["default"].createElement(_.CometChatMessageReactions, { messageObject: messageObject, loggedInUser: loggedInUser, addReactionIconURL: _messageReactionsConfiguration.addReactionIconURL, style: (0, _style.reactionsStyle)(_theme, alignment, messageObject), updateReaction: updateReaction }); } return null; }; /** * * @returns translated text on using text translate */ var getTranslatedMessage = function getTranslatedMessage() { var _messageObject$metada; if (messageObject !== null && messageObject !== void 0 && (_messageObject$metada = messageObject.metadata) !== null && _messageObject$metada !== void 0 && _messageObject$metada.translatedText) { return /*#__PURE__*/_react["default"].createElement("div", { className: "message_translate__block", style: (0, _style.translatedTextBlockStyle)(alignment, _theme) }, /*#__PURE__*/_react["default"].createElement("p", { className: "message_translate__text", style: (0, _style.translateTextStyle)() }, messageObject.metadata.translatedText), /*#__PURE__*/_react["default"].createElement("p", { className: "message_translate__label", style: (0, _style.translateLabelText)(alignment, _theme) }, (0, _2.localize)("TRANSLATED_MESSAGE"))); } }; /** * Displays a component when Mouse Hovers on a bubble */ var showMessageOptions = function showMessageOptions() { if (!isHovering) { setIsHovering(true); } }; /** * Hides the component when Mouse doesn't hover anymore on the bubble */ var hideMessageOptions = function hideMessageOptions() { if (isHovering) { setIsHovering(false); } }; /** * * @returns name of the sender */ var getSenderName = function getSenderName() { var _messageObject$sender3; return messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.title && messageObject !== null && messageObject !== void 0 && (_messageObject$sender3 = messageObject.sender) !== null && _messageObject$sender3 !== void 0 && _messageObject$sender3.name ? /*#__PURE__*/_react["default"].createElement("span", { style: (0, _style.messageSenderStyle)(style, _theme), className: "message_kit__sender" }, messageObject.sender.name) : null; }; /** * * @returns time of message sent */ var getMessageTime = function getMessageTime() { var _dateConfiguration = dateConfiguration || new _DateConfiguration.DateConfiguration({}); return messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.timestamp && messageObject !== null && messageObject !== void 0 && messageObject.sentAt ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageTimestampStyle)(style, _theme), className: "message_kit__time_bar" }, /*#__PURE__*/_react["default"].createElement(_2.CometChatDate, { timestamp: messageObject.sentAt || _dateConfiguration.timeStamp, pattern: "timeFormat" || _dateConfiguration.pattern, style: { textFont: style.timestampFont || (0, _2.fontHelper)(_theme.typography.caption1), textColor: style.timestampColor || _theme.palette.accent[_theme.palette.mode] } })) : null; }; var getMessageReceipt = function getMessageReceipt() { var _messageReceiptConfiguration = messageReceiptConfiguration || new _2.MessageReceiptConfiguration({}); return messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.readReceipt ? /*#__PURE__*/_react["default"].createElement(_2.CometChatMessageReceipt, { messageObject: messageObject, loggedInUser: loggedInUser, messageDeliveredIcon: _messageReceiptConfiguration.messageDeliveredIcon, messageErrorIcon: _messageReceiptConfiguration.messageErrorIcon, messageSentIcon: _messageReceiptConfiguration.messageSentIcon, messageWaitIcon: _messageReceiptConfiguration.messageWaitIcon, messageReadIcon: _messageReceiptConfiguration.messageReadIcon }) : null; }; var getLeftView = function getLeftView() { //if the message bubble is aligned to the left if (alignment === _2.MessageBubbleAlignmentConstants.left) { return messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.thumbnail ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageLeftGutterStyle)(), className: "message_kit__gutter__left" }, getAvatar()) : null; //if the message bubble is aligned to the right } else { var _messageObject$sender4; var topBar = null; var bottomBar = null; //if loggedin user is the sender if ((loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.uid) === (messageObject === null || messageObject === void 0 ? void 0 : (_messageObject$sender4 = messageObject.sender) === null || _messageObject$sender4 === void 0 ? void 0 : _messageObject$sender4.uid)) { //if timestamp is to be shown on the top of the message bubble i.e. similar to slack if (timeAlignment.toLowerCase() === _2.MessageTimeAlignmentConstants.top) { topBar = messageBubbleData.timestamp || messageBubbleData.title ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageSenderStyle)(style, _theme), className: "message_kit__username_bar" }, getMessageTime(), "\xA0", getSenderName()) : null; bottomBar = messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.readReceipt ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageKitReceiptStyle)(), className: "message_kit__receipt_bar" }, getMessageReceipt()) : null; } else if (timeAlignment.toLowerCase() === _2.MessageTimeAlignmentConstants.bottom) { topBar = messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.title ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageSenderStyle)(style, _theme), className: "message_kit__username_bar" }, getSenderName()) : null; bottomBar = messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.timestamp || messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.readReceipt ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageKitReceiptStyle)(), className: "message_kit__receipt_bar" }, getMessageTime(), "\xA0", getMessageReceipt()) : null; } } return /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageLeftGutterStyle)(), className: "message_kit__gutter__left" }, topBar, /*#__PURE__*/_react["default"].createElement("div", { "data-id": getId(), className: "message_kit__hover", onMouseEnter: showMessageOptions, onMouseLeave: hideMessageOptions }, /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageBlockStyle)(alignment, style, messageObject, _theme), className: "messageBlockStyle" }, messageObject && messageObject.deletedAt ? getDeleteBubble() : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, getMessageOptions(), getMessage(), getTranslatedMessage(), messageReactions()))), bottomBar); } }; var getRightview = function getRightview() { //if the message bubble is aligned to left if (alignment === _2.MessageBubbleAlignmentConstants.left) { var topBar = getSenderName(); var bottomBar = null; //if timestamp is to be shown on the top of the message bubble i.e. similar to slack if (timeAlignment.toLowerCase() === _2.MessageTimeAlignmentConstants.top) { var _messageObject$sender5; topBar = messageBubbleData.title || messageBubbleData.timestamp ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageNameTimestampStyle)(), className: "message_kit__username_bar" }, getSenderName(), "\xA0", getMessageTime()) : null; //if loggedin user is the sender of the message if ((loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.uid) === (messageObject === null || messageObject === void 0 ? void 0 : (_messageObject$sender5 = messageObject.sender) === null || _messageObject$sender5 === void 0 ? void 0 : _messageObject$sender5.uid) && messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.readReceipt) { bottomBar = /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageKitReceiptStyle)(), className: "message_kit__receipt_bar" }, getMessageReceipt()); } //if timestamp is to be shown at the bottom of the message bubble i.e. similar to slack } else if (timeAlignment.toLowerCase() === _2.MessageTimeAlignmentConstants.bottom) { var _messageObject$sender6; //if loggedin user is the sender of the message if ((loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.uid) === (messageObject === null || messageObject === void 0 ? void 0 : (_messageObject$sender6 = messageObject.sender) === null || _messageObject$sender6 === void 0 ? void 0 : _messageObject$sender6.uid)) { bottomBar = messageBubbleData.timestamp || messageBubbleData.readReceipt ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageKitReceiptStyle)(), className: "message_kit__receipt_bar" }, getMessageTime(), "\xA0", getMessageReceipt()) : null; } else { bottomBar = /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageKitReceiptStyle)(), className: "message_kit__receipt_bar" }, getMessageTime()); } } return /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageRightGutterStyle)(), className: "message_kit__gutter__right" }, topBar, /*#__PURE__*/_react["default"].createElement("div", { "data-id": getId(), className: "message_kit__hover", onMouseEnter: showMessageOptions, onMouseLeave: hideMessageOptions }, /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageBlockStyle)(alignment, style, messageObject, _theme), className: "messageBlockStyle" }, messageObject !== null && messageObject !== void 0 && messageObject.deletedAt ? getDeleteBubble() : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, getMessageOptions(), getMessage(), getTranslatedMessage(), messageReactions()))), bottomBar); } else { var _messageObject$sender7; //if loggedin user is the sender of the message if ((loggedInUser === null || loggedInUser === void 0 ? void 0 : loggedInUser.uid) === (messageObject === null || messageObject === void 0 ? void 0 : (_messageObject$sender7 = messageObject.sender) === null || _messageObject$sender7 === void 0 ? void 0 : _messageObject$sender7.uid)) { return messageBubbleData !== null && messageBubbleData !== void 0 && messageBubbleData.thumbnail ? /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageLeftGutterStyle)(), className: "message_kit__gutter__right" }, getAvatar()) : null; } } }; return /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageActionsStyle)(props, _theme), className: "message_kit__actions" }, /*#__PURE__*/_react["default"].createElement("div", { style: (0, _style.messageGutterStyle)(), className: "c-message_kit__gutter" }, getLeftView(), getRightview())); }; exports.CometChatMessageBubble = CometChatMessageBubble; CometChatMessageBubble.defaultProps = { messageBubbleData: { id: true, thumbnail: true, title: false, timestamp: true, readReceipt: true }, timeAlignment: "bottom", messageOptions: [], messageObject: null, alignment: "standard", loggedInUser: null, style: { width: "", height: "", nameTextFont: "", nameTextColor: "", border: "", background: "", borderRadius: "", timestampFont: "", timestampColor: "" } }; CometChatMessageBubble.propTypes = { messageBubbleData: _propTypes["default"].object, timeAlignment: _propTypes["default"].string, messageOptions: _propTypes["default"].array, messageObject: _propTypes["default"].object, alignment: _propTypes["default"].string, loggedInUser: _propTypes["default"].object, style: _propTypes["default"].object, avatarConfiguration: _propTypes["default"].object, messageReceiptConfiguration: _propTypes["default"].object, messageReactionsConfiguration: _propTypes["default"].object, dateConfiguration: _propTypes["default"].object, textBubbleConfiguration: _propTypes["default"].object, fileBubbleConfiguration: _propTypes["default"].object, imageBubbleConfiguration: _propTypes["default"].object, audioBubbleConfiguration: _propTypes["default"].object, videoBubbleConfiguration: _propTypes["default"].object, pollBubbleConfiguration: _propTypes["default"].object, stickerBubbleConfiguration: _propTypes["default"].object, deletedBubbleConfiguration: _propTypes["default"].object, collaborativeWhiteboardConfiguration: _propTypes["default"].object, collaborativeDocumentConfiguration: _propTypes["default"].object };