@droppii-org/chat-sdk
Version:
Droppii React Chat SDK
31 lines (30 loc) • 1.81 kB
JavaScript
"use client";
import { jsx as _jsx } from "react/jsx-runtime";
import { MessageType } from "@openim/wasm-client-sdk";
import { useAuthStore } from "../../..";
import { sanitizeHtml } from "../../../utils/common";
const TextMessageItem = (props) => {
var _a, _b, _c;
const { message } = props;
const isCrm = useAuthStore((state) => state.isCrm);
let extendMessageInfo = null;
try {
extendMessageInfo = JSON.parse((message === null || message === void 0 ? void 0 : message.ex) || "{}");
}
catch (error) {
extendMessageInfo = {};
console.error("Failed to parse extendMessageInfo", error);
}
if ((message === null || message === void 0 ? void 0 : message.contentType) === MessageType.CustomMessage && !isCrm) {
return null;
}
if (Object.keys(extendMessageInfo).length > 0 &&
(extendMessageInfo === null || extendMessageInfo === void 0 ? void 0 : extendMessageInfo.messageInfo)) {
const htmlContent = ((_b = (_a = extendMessageInfo === null || extendMessageInfo === void 0 ? void 0 : extendMessageInfo.messageInfo) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.content) || "";
// 🔒 Sanitize HTML to prevent XSS attacks
const sanitizedContent = sanitizeHtml(htmlContent);
return (_jsx("div", { className: "!text-sm sm:text-base break-words whitespace-pre-line flex-1", style: { wordBreak: "break-word", overflowWrap: "anywhere" }, dangerouslySetInnerHTML: { __html: sanitizedContent } }));
}
return (_jsx("span", { className: "!text-sm sm:text-base whitespace-pre-wrap", children: ((_c = message === null || message === void 0 ? void 0 : message.textElem) === null || _c === void 0 ? void 0 : _c.content) || "" }));
};
export default TextMessageItem;