cometchat-react-ui-kit2
Version:
CometChat UI Kit for React App
134 lines (130 loc) • 6.69 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CometChatTextBubble = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _CometChatMessageConstants = require("../../CometChatMessageConstants");
var _ = require("../../..");
var _style = require("./style");
var _hooks = require("./hooks");
var CometChatTextBubble = function CometChatTextBubble(props) {
var _React$useState = _react["default"].useState(),
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
linkPreviewData = _React$useState2[0],
setLinkPreview = _React$useState2[1];
var theme = props.theme ? new _.CometChatTheme(props === null || props === void 0 ? void 0 : props.theme) : new _.CometChatTheme({});
function linkPreviewHandler(preview) {
var linkObject = preview["links"][0];
var linkText = linkObject["url"];
return /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.messagePreviewContainerStyle)(props, theme),
className: "message__preview"
}, /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.messagePreviewWrapperStyle)(),
className: "preview__card"
}, /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.previewImageStyle)(linkObject["image"]),
className: "card__image"
}), /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.previewDataStyle)(),
className: "card__info"
}, /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.previewTitleStyle)(props, theme),
className: "card__title"
}, /*#__PURE__*/_react["default"].createElement("span", null, linkObject["title"]))), /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.previewLinkStyle)(),
className: "card__link"
}, /*#__PURE__*/_react["default"].createElement("a", {
href: linkObject["url"],
target: "_blank",
rel: "noopener noreferrer",
style: (0, _style.linkSubtitleStyle)(props, theme)
}, linkText))));
}
var linkify = function linkify(messageText) {
var _outputStr, _outputStr2;
var outputStr = messageText === null || messageText === void 0 ? void 0 : messageText.replace(_CometChatMessageConstants.phoneNumPattern, "<a target='blank' rel='noopener noreferrer' href='tel:$&'>$&</a>");
outputStr = (_outputStr = outputStr) === null || _outputStr === void 0 ? void 0 : _outputStr.replace(_CometChatMessageConstants.emailPattern, "<a target='blank' rel='noopener noreferrer' href='mailto:$&'>$&</a>");
var results = (_outputStr2 = outputStr) === null || _outputStr2 === void 0 ? void 0 : _outputStr2.match(_CometChatMessageConstants.urlPattern);
results && (results === null || results === void 0 ? void 0 : results.forEach(function (url) {
url = url.trim();
var normalizedURL = url;
if (!url.startsWith("http")) {
normalizedURL = "//".concat(url);
}
outputStr = outputStr.replace(url, "<a target='blank' rel='noopener noreferrer' href=\"".concat(normalizedURL, "\">").concat(url, "</a>"));
}));
return outputStr;
};
(0, _hooks.Hooks)(props, setLinkPreview);
var getMessageText = function getMessageText() {
var _props$messageObject;
if (linkPreviewData && linkPreviewData !== null && linkPreviewData !== void 0 && linkPreviewData.links[0]) {
return linkPreviewHandler(linkPreviewData);
}
var messageText;
if (props.text && props.text.length) {
messageText = props.text;
}
if (props !== null && props !== void 0 && props.messageObject && props !== null && props !== void 0 && (_props$messageObject = props.messageObject) !== null && _props$messageObject !== void 0 && _props$messageObject.text) {
var _props$messageObject2;
messageText = props === null || props === void 0 ? void 0 : (_props$messageObject2 = props.messageObject) === null || _props$messageObject2 === void 0 ? void 0 : _props$messageObject2.text;
//xss extensions data
var xssData = (0, _.getExtensionsData)(props.messageObject, _.ExtensionConstants.xssFilter);
if (xssData && xssData.hasOwnProperty(_.ExtensionConstants.sanitizedText) && xssData.hasOwnProperty(_.ExtensionConstants.hasXSS) && xssData.hasXSS === "yes") {
messageText = xssData.sanitized_text;
}
//datamasking extensions data
var maskedData = (0, _.getExtensionsData)(props.messageObject, _.ExtensionConstants.dataMasking);
if (maskedData && maskedData.hasOwnProperty("data") && maskedData.data.hasOwnProperty(_.ExtensionConstants.sensitiveData) && maskedData.data.hasOwnProperty(_.ExtensionConstants.messageMasked) && maskedData.data.sensitive_data === "yes") {
messageText = maskedData.data.message_masked;
}
//profanity extensions data
var profaneData = (0, _.getExtensionsData)(props.messageObject, _.ExtensionConstants.profanityFilter);
if (profaneData && profaneData.hasOwnProperty(_.ExtensionConstants.profanity) && profaneData.hasOwnProperty(_.ExtensionConstants.messageClean) && profaneData.profanity === "yes") {
messageText = profaneData.message_clean;
}
}
var formattedText = linkify(messageText);
return /*#__PURE__*/_react["default"].createElement("div", {
style: (0, _style.messageKitTextBubbleBlockStyle)(props, theme),
className: "message_kit__blocks"
}, /*#__PURE__*/_react["default"].createElement("p", {
className: "message__message-blocks",
style: (0, _style.messageTextBubbleStyle)(props, theme, formattedText)
}, formattedText));
};
return getMessageText();
};
exports.CometChatTextBubble = CometChatTextBubble;
CometChatTextBubble.defaultProps = {
messageObject: null,
text: "",
linkPreviewTitle: "",
linkPreviewSubtitle: "",
style: {
width: "",
height: "",
border: "0 none",
background: "rgb(255,255,255)",
borderRadius: "8px",
textFont: "",
textColor: "",
linkPreviewTitleFont: "",
linkPreviewTitleColor: "",
linkPreviewSubtitleFont: "",
linkPreviewSubtitleColor: "",
linkPreviewBackgroundColor: ""
}
};
CometChatTextBubble.propTypes = {
messageObject: _propTypes["default"].object,
text: _propTypes["default"].string,
linkPreviewTitle: _propTypes["default"].string,
linkPreviewSubtitle: _propTypes["default"].string,
style: _propTypes["default"].object
};