@droppii-org/chat-sdk 0.1.50 → 0.1.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/svg/index.d.ts +0 -1
- package/dist/assets/svg/index.d.ts.map +1 -1
- package/dist/assets/svg/index.js +0 -1
- package/dist/assets/svg/index.ts +1 -2
- package/dist/components/biz-inbox/BizInboxHeader.js +1 -1
- package/dist/components/biz-inbox/BizThreadAvatar.js +2 -2
- package/dist/components/biz-inbox/BizThreadCard.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadCard.js +3 -11
- package/dist/components/biz-inbox/BizThreadTitle.js +1 -1
- package/dist/components/biz-thread-detail/BizMessageList.js +2 -2
- package/dist/components/biz-thread-detail/BizMoreOptionItem.js +2 -2
- package/dist/components/biz-thread-detail/BizThreadDetailHeader.js +2 -2
- package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizThreadDetailInput.js +12 -21
- package/dist/components/biz-thread-detail/index.d.ts +0 -4
- package/dist/components/biz-thread-detail/index.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/index.js +0 -2
- package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationBySessionItem.js +6 -5
- package/dist/components/conversation/ThreadCard.d.ts +14 -0
- package/dist/components/conversation/ThreadCard.d.ts.map +1 -0
- package/dist/components/conversation/ThreadCard.js +16 -0
- package/dist/components/media-collection/ImageCollection.d.ts.map +1 -1
- package/dist/components/media-collection/ImageCollection.js +3 -17
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +1 -7
- package/dist/components/message/footer/ComposerTextSyncPlugin.d.ts +6 -0
- package/dist/components/message/footer/ComposerTextSyncPlugin.d.ts.map +1 -0
- package/dist/components/message/footer/ComposerTextSyncPlugin.js +16 -0
- package/dist/components/message/footer/FilePreview.d.ts +3 -2
- package/dist/components/message/footer/FilePreview.d.ts.map +1 -1
- package/dist/components/message/footer/FilePreview.js +61 -21
- package/dist/components/message/footer/LinkInputPreview.d.ts +7 -0
- package/dist/components/message/footer/LinkInputPreview.d.ts.map +1 -0
- package/dist/components/message/footer/LinkInputPreview.js +16 -0
- package/dist/components/message/footer/MediaActions.d.ts.map +1 -1
- package/dist/components/message/footer/MediaActions.js +8 -5
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +48 -35
- package/dist/components/message/item/FileMessage.d.ts +2 -2
- package/dist/components/message/item/FileMessage.d.ts.map +1 -1
- package/dist/components/message/item/FileMessage.js +20 -12
- package/dist/components/message/item/ImageMessage.d.ts.map +1 -1
- package/dist/components/message/item/ImageMessage.js +17 -15
- package/dist/components/message/item/LinkCard.d.ts +7 -0
- package/dist/components/message/item/LinkCard.d.ts.map +1 -0
- package/dist/components/message/item/LinkCard.js +17 -0
- package/dist/components/message/item/LinkText.d.ts +6 -0
- package/dist/components/message/item/LinkText.d.ts.map +1 -0
- package/dist/components/message/item/LinkText.js +13 -0
- package/dist/components/message/item/MergeImageMessage.d.ts +7 -0
- package/dist/components/message/item/MergeImageMessage.d.ts.map +1 -0
- package/dist/components/message/item/MergeImageMessage.js +30 -0
- package/dist/components/message/item/MessageBubble.d.ts +13 -0
- package/dist/components/message/item/MessageBubble.d.ts.map +1 -0
- package/dist/components/message/item/MessageBubble.js +23 -0
- package/dist/components/message/item/RevokeMessage.js +1 -1
- package/dist/components/message/item/TextMessage.d.ts.map +1 -1
- package/dist/components/message/item/TextMessage.js +20 -9
- package/dist/components/message/item/UrlTextMessage.d.ts.map +1 -1
- package/dist/components/message/item/UrlTextMessage.js +19 -17
- package/dist/components/message/item/VideoMessage.d.ts.map +1 -1
- package/dist/components/message/item/VideoMessage.js +10 -12
- package/dist/components/message/item/imagePreviewToolbar.d.ts +5 -0
- package/dist/components/message/item/imagePreviewToolbar.d.ts.map +1 -0
- package/dist/components/message/item/imagePreviewToolbar.js +14 -0
- package/dist/components/message/item/index.d.ts +2 -1
- package/dist/components/message/item/index.d.ts.map +1 -1
- package/dist/components/message/item/index.js +40 -44
- package/dist/components/message/item/mediaSize.d.ts +16 -0
- package/dist/components/message/item/mediaSize.d.ts.map +1 -0
- package/dist/components/message/item/mediaSize.js +20 -0
- package/dist/components/message/item/textStyle.d.ts +2 -0
- package/dist/components/message/item/textStyle.d.ts.map +1 -0
- package/dist/components/message/item/textStyle.js +1 -0
- package/dist/components/thread/ManualAssignPopover.js +1 -1
- package/dist/hooks/message/useSendMessage.d.ts +3 -10
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.js +27 -44
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/bizConversation.d.ts +1 -1
- package/dist/utils/bizConversation.js +2 -2
- package/dist/utils/bizMessage.d.ts +1 -14
- package/dist/utils/bizMessage.d.ts.map +1 -1
- package/dist/utils/bizMessage.js +0 -26
- package/dist/utils/common.d.ts +2 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +9 -3
- package/dist/utils/fileValidation.d.ts +1 -0
- package/dist/utils/fileValidation.d.ts.map +1 -1
- package/dist/utils/fileValidation.js +10 -17
- package/dist/utils/link.d.ts +13 -0
- package/dist/utils/link.d.ts.map +1 -0
- package/dist/utils/link.js +77 -0
- package/dist/utils/openLink.d.ts +3 -0
- package/dist/utils/openLink.d.ts.map +1 -0
- package/dist/utils/openLink.js +19 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/TextMessage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/TextMessage.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAe,MAAM,yBAAyB,CAAC;AAQnE,UAAU,oBAAoB;IAC5B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,eAAe,GAAI,OAAO,oBAAoB,mDAiDnD,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import clsx from "clsx";
|
|
3
4
|
import { MessageType } from "@openim/wasm-client-sdk";
|
|
4
5
|
import useAuthStore from "../../../store/auth";
|
|
5
|
-
import { sanitizeHtml } from "../../../utils/common";
|
|
6
|
+
import { htmlHasFormatting, sanitizeHtml, stripHtml } from "../../../utils/common";
|
|
7
|
+
import { extractLinkUrls } from "../../../utils/link";
|
|
8
|
+
import LinkText from "./LinkText";
|
|
9
|
+
import { MESSAGE_TEXT_CLASS } from "./textStyle";
|
|
6
10
|
const TextMessageItem = (props) => {
|
|
7
|
-
var _a, _b, _c;
|
|
11
|
+
var _a, _b, _c, _d;
|
|
8
12
|
const { message } = props;
|
|
9
13
|
const isCrm = useAuthStore((state) => state.isCrm);
|
|
10
14
|
let extendMessageInfo = null;
|
|
@@ -18,13 +22,20 @@ const TextMessageItem = (props) => {
|
|
|
18
22
|
if ((message === null || message === void 0 ? void 0 : message.contentType) === MessageType.CustomMessage && !isCrm) {
|
|
19
23
|
return null;
|
|
20
24
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
const sanitizedContent = sanitizeHtml(htmlContent);
|
|
26
|
-
return (_jsx("div", { className: "!text-sm sm:text-base break-normal whitespace-pre-line flex-1", style: { overflowWrap: "anywhere" }, dangerouslySetInnerHTML: { __html: sanitizedContent } }));
|
|
25
|
+
const richHtmlContent = ((_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) || "";
|
|
26
|
+
if (richHtmlContent && htmlHasFormatting(richHtmlContent)) {
|
|
27
|
+
const sanitizedContent = sanitizeHtml(richHtmlContent);
|
|
28
|
+
return (_jsx("div", { className: clsx("break-normal whitespace-pre-line flex-1", MESSAGE_TEXT_CLASS), style: { overflowWrap: "anywhere" }, dangerouslySetInnerHTML: { __html: sanitizedContent } }));
|
|
27
29
|
}
|
|
28
|
-
|
|
30
|
+
const text = ((_c = message === null || message === void 0 ? void 0 : message.textElem) === null || _c === void 0 ? void 0 : _c.content) ||
|
|
31
|
+
((_d = message === null || message === void 0 ? void 0 : message.quoteElem) === null || _d === void 0 ? void 0 : _d.text) ||
|
|
32
|
+
stripHtml(richHtmlContent) ||
|
|
33
|
+
"";
|
|
34
|
+
if (!text)
|
|
35
|
+
return null;
|
|
36
|
+
if (extractLinkUrls(text).length > 0) {
|
|
37
|
+
return _jsx(LinkText, { text: text });
|
|
38
|
+
}
|
|
39
|
+
return (_jsx("p", { className: clsx("whitespace-pre-wrap break-words", MESSAGE_TEXT_CLASS), children: text }));
|
|
29
40
|
};
|
|
30
41
|
export default TextMessageItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UrlTextMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/UrlTextMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"UrlTextMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/UrlTextMessage.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAatD,UAAU,uBAAuB;IAC/B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,kBAAkB,GAAI,OAAO,uBAAuB,4CA6DzD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
3
|
+
import { wrapLinksInHtml, sanitizeHtml, htmlHasFormatting, stripHtml, } from "../../../utils/common";
|
|
4
|
+
import clsx from "clsx";
|
|
5
|
+
import LinkText from "./LinkText";
|
|
6
|
+
import LinkCard from "./LinkCard";
|
|
7
|
+
import { MESSAGE_TEXT_CLASS } from "./textStyle";
|
|
6
8
|
const UrlTextMessageItem = (props) => {
|
|
7
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
9
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
8
10
|
const { message } = props;
|
|
9
|
-
const { data: externalLinkData } = useFetchExternalLink(((_b = (_a = message === null || message === void 0 ? void 0 : message.urlTextElem) === null || _a === void 0 ? void 0 : _a.urls) === null || _b === void 0 ? void 0 : _b[0]) || "");
|
|
10
11
|
let extendMessageInfo = null;
|
|
11
|
-
const onPressExternalLink = (url) => {
|
|
12
|
-
if (!url)
|
|
13
|
-
return;
|
|
14
|
-
window.open(url, "_blank", "noopener,noreferrer");
|
|
15
|
-
};
|
|
16
12
|
try {
|
|
17
13
|
extendMessageInfo = JSON.parse((message === null || message === void 0 ? void 0 : message.ex) || "{}");
|
|
18
14
|
}
|
|
@@ -20,13 +16,19 @@ const UrlTextMessageItem = (props) => {
|
|
|
20
16
|
extendMessageInfo = {};
|
|
21
17
|
console.error("Failed to parse extendMessageInfo", error);
|
|
22
18
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
const sanitizedContent = sanitizeHtml(wrapLinksInHtml(htmlContent));
|
|
28
|
-
return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("div", { className: "!text-sm sm:text-base break-normal whitespace-pre-line flex-1", style: { overflowWrap: "anywhere" }, dangerouslySetInnerHTML: { __html: sanitizedContent } }), !!externalLinkData && (_jsxs("div", { className: "flex items-center rounded-md px-3 py-2 border-l-4 border-l-blue-500 bg-blue-50 gap-2 cursor-pointer overflow-hidden", style: { wordBreak: "break-word", overflowWrap: "anywhere" }, onClick: () => onPressExternalLink((externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.url) || ""), children: [_jsxs("div", { className: "flex flex-1 flex-col gap-1", children: [(externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.title) && (_jsx("span", { className: "!text-sm font-semibold truncate break-normal", children: externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.title })), (externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.description) && (_jsx("span", { className: "!text-sm text-gray-500 line-clamp-2", children: externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.description })), (externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.url) && (_jsx("span", { className: "!text-sm font-medium text-blue-500", children: getHostFromUrl(externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.url) }))] }), ((_e = externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.logo) === null || _e === void 0 ? void 0 : _e.url) && (_jsx(Image, { src: (_f = externalLinkData === null || externalLinkData === void 0 ? void 0 : externalLinkData.logo) === null || _f === void 0 ? void 0 : _f.url, width: 48, height: 48 }))] }))] }));
|
|
19
|
+
const richHtmlContent = ((_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) || "";
|
|
20
|
+
if (richHtmlContent && htmlHasFormatting(richHtmlContent)) {
|
|
21
|
+
const sanitizedContent = sanitizeHtml(wrapLinksInHtml(richHtmlContent));
|
|
22
|
+
return (_jsx("div", { className: clsx("break-normal whitespace-pre-line flex-1", MESSAGE_TEXT_CLASS), style: { overflowWrap: "anywhere" }, dangerouslySetInnerHTML: { __html: sanitizedContent } }));
|
|
29
23
|
}
|
|
30
|
-
|
|
24
|
+
const text = (_h = (_g = (_f = (_d = (_c = message === null || message === void 0 ? void 0 : message.textElem) === null || _c === void 0 ? void 0 : _c.content) !== null && _d !== void 0 ? _d : (_e = message === null || message === void 0 ? void 0 : message.urlTextElem) === null || _e === void 0 ? void 0 : _e.content) !== null && _f !== void 0 ? _f : message === null || message === void 0 ? void 0 : message.content) !== null && _g !== void 0 ? _g : stripHtml(richHtmlContent)) !== null && _h !== void 0 ? _h : "";
|
|
25
|
+
const urlMetadata = extendMessageInfo === null || extendMessageInfo === void 0 ? void 0 : extendMessageInfo.urlMetadata;
|
|
26
|
+
if (urlMetadata === null || urlMetadata === void 0 ? void 0 : urlMetadata.url) {
|
|
27
|
+
return (_jsxs("div", { className: "flex max-w-[292px] flex-col gap-2", children: [text && _jsx(LinkText, { text: text }), _jsx(LinkCard, { metadata: urlMetadata })] }));
|
|
28
|
+
}
|
|
29
|
+
if (text) {
|
|
30
|
+
return _jsx(LinkText, { text: text });
|
|
31
|
+
}
|
|
32
|
+
return (_jsx("span", { className: clsx("break-normal whitespace-pre-line flex-1", MESSAGE_TEXT_CLASS), style: { overflowWrap: "anywhere" }, children: ((_k = (_j = message === null || message === void 0 ? void 0 : message.urlTextElem) === null || _j === void 0 ? void 0 : _j.urls) === null || _k === void 0 ? void 0 : _k[0]) || "" }));
|
|
31
33
|
};
|
|
32
34
|
export default UrlTextMessageItem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/VideoMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoMessage.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/VideoMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,yBAAyB,CAAC;AAIrE,UAAU,qBAAqB;IAC7B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,QAAA,MAAM,gBAAgB,GAAI,OAAO,qBAAqB,4CAyBrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { MessageStatus } from "@openim/wasm-client-sdk";
|
|
3
3
|
import { Spin } from "antd";
|
|
4
|
-
|
|
4
|
+
import { getVideoMessageMinStyle } from "./mediaSize";
|
|
5
5
|
const VideoMessageItem = (props) => {
|
|
6
6
|
const { message } = props;
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
const videoElem = message.videoElem;
|
|
8
|
+
const videoUrl = (videoElem === null || videoElem === void 0 ? void 0 : videoElem.videoUrl) || "";
|
|
9
|
+
const posterUrl = (videoElem === null || videoElem === void 0 ? void 0 : videoElem.snapshotUrl) || "";
|
|
10
|
+
const minStyle = getVideoMessageMinStyle({
|
|
11
|
+
imageWidth: videoElem === null || videoElem === void 0 ? void 0 : videoElem.snapshotWidth,
|
|
12
|
+
imageHeight: videoElem === null || videoElem === void 0 ? void 0 : videoElem.snapshotHeight,
|
|
13
|
+
snapshotHeight: videoElem === null || videoElem === void 0 ? void 0 : videoElem.snapshotHeight,
|
|
14
|
+
});
|
|
13
15
|
const isSending = message.status === MessageStatus.Sending;
|
|
14
|
-
|
|
15
|
-
minHeight: `${adaptedHight}px`,
|
|
16
|
-
minWidth: `${adaptedWidth}px`,
|
|
17
|
-
};
|
|
18
|
-
return (_jsx(Spin, { spinning: isSending, children: _jsx("div", { className: "relative max-w-[200px]", style: minStyle, children: _jsx("video", { className: "rounded-md", src: sourceUrl, controls: true }) }) }));
|
|
16
|
+
return (_jsx(Spin, { spinning: isSending, children: _jsx("div", { className: "relative max-w-[200px]", style: minStyle, children: _jsx("video", { src: videoUrl, poster: posterUrl, controls: true, className: "rounded-xl object-cover", style: { width: minStyle.width } }) }) }));
|
|
19
17
|
};
|
|
20
18
|
export default VideoMessageItem;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { TFunction } from "i18next";
|
|
3
|
+
export declare const downloadImage: (imageUrl?: string) => void;
|
|
4
|
+
export declare const renderImagePreviewToolbar: (originalNode: ReactNode, imageUrl: string | undefined, t: TFunction) => ReactNode;
|
|
5
|
+
//# sourceMappingURL=imagePreviewToolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imagePreviewToolbar.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/imagePreviewToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIzC,eAAO,MAAM,aAAa,GAAI,WAAW,MAAM,SAQ9C,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,cAAc,SAAS,EACvB,UAAU,MAAM,GAAG,SAAS,EAC5B,GAAG,SAAS,KACX,SAcF,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Button } from "antd";
|
|
3
|
+
import { Icon } from "../../../components/icon";
|
|
4
|
+
export const downloadImage = (imageUrl) => {
|
|
5
|
+
if (!imageUrl)
|
|
6
|
+
return;
|
|
7
|
+
const link = document.createElement("a");
|
|
8
|
+
link.href = imageUrl;
|
|
9
|
+
link.download = imageUrl.substring(imageUrl.lastIndexOf("/") + 1);
|
|
10
|
+
document.body.appendChild(link);
|
|
11
|
+
link.click();
|
|
12
|
+
document.body.removeChild(link);
|
|
13
|
+
};
|
|
14
|
+
export const renderImagePreviewToolbar = (originalNode, imageUrl, t) => (_jsxs("div", { className: "flex flex-col justify-center gap-2", children: [originalNode, imageUrl && (_jsx(Button, { type: "primary", icon: _jsx(Icon, { icon: "download-o", size: 16, className: "text-white" }), className: "self-center", onClick: () => downloadImage(imageUrl), children: t("download") }))] }));
|
|
@@ -2,12 +2,13 @@ import { MessageItem as MessageItemType } from "@openim/wasm-client-sdk";
|
|
|
2
2
|
interface MessageItemProps {
|
|
3
3
|
message: MessageItemType;
|
|
4
4
|
allMessages: MessageItemType[];
|
|
5
|
+
isGroupChat?: boolean;
|
|
5
6
|
contextMenuOpen?: boolean;
|
|
6
7
|
onContextMenuOpenChange?: (open: boolean) => void;
|
|
7
8
|
onRevokeMessage?: (clientMsgID: string) => void;
|
|
8
9
|
onQuoteMessage?: (message: MessageItemType) => void;
|
|
9
10
|
onPressQuoteMessage?: (clientMsgID: string) => void;
|
|
10
11
|
}
|
|
11
|
-
declare const MessageItem: ({ message, allMessages, contextMenuOpen, onContextMenuOpenChange, onRevokeMessage, onQuoteMessage, onPressQuoteMessage, }: MessageItemProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
12
|
+
declare const MessageItem: ({ message, allMessages, isGroupChat, contextMenuOpen, onContextMenuOpenChange, onRevokeMessage, onQuoteMessage, onPressQuoteMessage, }: MessageItemProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
12
13
|
export default MessageItem;
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,IAAI,eAAe,EAG/B,MAAM,yBAAyB,CAAC;AA6BjC,UAAU,gBAAgB;IACxB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IACpD,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,IAAI,eAAe,EAG/B,MAAM,yBAAyB,CAAC;AA6BjC,UAAU,gBAAgB;IACxB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uBAAuB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IACpD,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;CACrD;AAeD,QAAA,MAAM,WAAW,GAAI,wIASlB,gBAAgB,mDA+QlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { createElement as _createElement } from "react";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import dayjs from "dayjs";
|
|
4
4
|
import clsx from "clsx";
|
|
5
|
-
import {
|
|
5
|
+
import { Dropdown } from "antd";
|
|
6
6
|
import { MessageStatus, MessageType, } from "@openim/wasm-client-sdk";
|
|
7
7
|
import TextMessageItem from "./TextMessage";
|
|
8
8
|
import ImageMessageItem from "./ImageMessage";
|
|
9
9
|
import FileMessageItem from "./FileMessage";
|
|
10
10
|
import VideoMessageItem from "./VideoMessage";
|
|
11
|
+
import MergeImageMessageItem from "./MergeImageMessage";
|
|
12
|
+
import MessageBubble from "./MessageBubble";
|
|
11
13
|
import { getVisibleNeighbor, visibleTypeMessage, } from "../../../hooks/message/useMessage";
|
|
12
14
|
import { MSG_ITEM_CONTENT_PREFIX, MSG_ITEM_PREFIX } from "../../../constants";
|
|
13
15
|
import { formatTimestamp } from "../../../utils/common";
|
|
@@ -23,35 +25,37 @@ import RevokeMessageItem from "./RevokeMessage";
|
|
|
23
25
|
import QuoteMessageItem from "./QuoteMessage";
|
|
24
26
|
import SystemLogMessageItem from "./SystemLogMessage";
|
|
25
27
|
import { isSystemLogMessageType } from "../../../utils/messageLog";
|
|
26
|
-
const
|
|
27
|
-
const MessageItem = ({ message, allMessages, contextMenuOpen, onContextMenuOpenChange, onRevokeMessage, onQuoteMessage, onPressQuoteMessage, }) => {
|
|
28
|
-
var _a
|
|
28
|
+
const MessageAvatar = ({ avatarUrl }) => avatarUrl ? (_jsx("img", { src: avatarUrl, alt: "", className: "h-6 w-6 shrink-0 self-end rounded-full object-cover" })) : (_jsx("div", { className: "flex h-6 w-6 shrink-0 items-center justify-center self-end rounded-full bg-chat-avatar", children: _jsx(Icon, { icon: "droppii-o-1", size: 14, className: "text-white" }) }));
|
|
29
|
+
const MessageItem = ({ message, allMessages, isGroupChat = false, contextMenuOpen, onContextMenuOpenChange, onRevokeMessage, onQuoteMessage, onPressQuoteMessage, }) => {
|
|
30
|
+
var _a;
|
|
29
31
|
const { t } = useTranslation();
|
|
30
32
|
const { resendMessage } = useSendMessage();
|
|
31
33
|
const userID = useAuthStore((state) => state.userID);
|
|
32
34
|
const isCrm = useAuthStore((state) => state.isCrm);
|
|
33
35
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
34
|
-
const renderMessageByType = useCallback((
|
|
35
|
-
switch (
|
|
36
|
+
const renderMessageByType = useCallback((item) => {
|
|
37
|
+
switch (item === null || item === void 0 ? void 0 : item.contentType) {
|
|
36
38
|
case MessageType.TextMessage:
|
|
37
39
|
case MessageType.QuoteMessage:
|
|
38
|
-
return _jsx(TextMessageItem, { message:
|
|
40
|
+
return _jsx(TextMessageItem, { message: item });
|
|
39
41
|
case MessageType.PictureMessage:
|
|
40
|
-
return _jsx(ImageMessageItem, { message:
|
|
42
|
+
return _jsx(ImageMessageItem, { message: item });
|
|
41
43
|
case MessageType.FileMessage:
|
|
42
|
-
return _jsx(FileMessageItem, { message:
|
|
44
|
+
return _jsx(FileMessageItem, { message: item });
|
|
43
45
|
case MessageType.VideoMessage:
|
|
44
|
-
return _jsx(VideoMessageItem, { message:
|
|
46
|
+
return _jsx(VideoMessageItem, { message: item });
|
|
47
|
+
case MessageType.MergeMessage:
|
|
48
|
+
return _jsx(MergeImageMessageItem, { message: item });
|
|
45
49
|
case MessageType.UrlTextMessage:
|
|
46
|
-
return _jsx(UrlTextMessageItem, { message:
|
|
50
|
+
return _jsx(UrlTextMessageItem, { message: item });
|
|
47
51
|
case MessageType.LogTextMessage:
|
|
48
|
-
return _jsx(SystemLogMessageItem, { message:
|
|
52
|
+
return _jsx(SystemLogMessageItem, { message: item });
|
|
49
53
|
case MessageType.RevokeMessage:
|
|
50
54
|
return _jsx(RevokeMessageItem, {});
|
|
51
55
|
default:
|
|
52
|
-
return _jsx(TextMessageItem, { message:
|
|
56
|
+
return _jsx(TextMessageItem, { message: item });
|
|
53
57
|
}
|
|
54
|
-
}, [
|
|
58
|
+
}, []);
|
|
55
59
|
const { isReplyable, isRevocable, isMine } = useMemo(() => {
|
|
56
60
|
const isMyMessage = (message === null || message === void 0 ? void 0 : message.sendID) === userID;
|
|
57
61
|
const isOlderThanOneDay = dayjs().diff(dayjs(message === null || message === void 0 ? void 0 : message.sendTime), "days", true) >= 1;
|
|
@@ -69,22 +73,22 @@ const MessageItem = ({ message, allMessages, contextMenuOpen, onContextMenuOpenC
|
|
|
69
73
|
return [];
|
|
70
74
|
}
|
|
71
75
|
return [
|
|
72
|
-
...(isReplyable
|
|
76
|
+
...(isReplyable && onQuoteMessage
|
|
73
77
|
? [
|
|
74
78
|
{
|
|
75
79
|
key: "TB01",
|
|
76
80
|
label: t("context_menu_reply"),
|
|
77
|
-
icon: (_jsx(Icon, { icon: "arrow-reply-alt-o", size: 18,
|
|
81
|
+
icon: (_jsx(Icon, { icon: "arrow-reply-alt-o", size: 18, className: "text-chat-focus" })),
|
|
78
82
|
onClick: () => onQuoteMessage === null || onQuoteMessage === void 0 ? void 0 : onQuoteMessage(message),
|
|
79
83
|
},
|
|
80
84
|
]
|
|
81
85
|
: []),
|
|
82
|
-
...(isRevocable
|
|
86
|
+
...(isRevocable && onRevokeMessage
|
|
83
87
|
? [
|
|
84
88
|
{
|
|
85
89
|
key: "TB05",
|
|
86
90
|
label: t("context_menu_revoke"),
|
|
87
|
-
icon: _jsx(Icon, { icon: "arrow-reload-o", size: 18,
|
|
91
|
+
icon: (_jsx(Icon, { icon: "arrow-reload-o", size: 18, className: "text-chat-focus" })),
|
|
88
92
|
onClick: () => onRevokeMessage === null || onRevokeMessage === void 0 ? void 0 : onRevokeMessage((message === null || message === void 0 ? void 0 : message.clientMsgID) || ""),
|
|
89
93
|
},
|
|
90
94
|
]
|
|
@@ -95,20 +99,20 @@ const MessageItem = ({ message, allMessages, contextMenuOpen, onContextMenuOpenC
|
|
|
95
99
|
isRevocable,
|
|
96
100
|
t,
|
|
97
101
|
onRevokeMessage,
|
|
98
|
-
message
|
|
99
|
-
message === null || message === void 0 ? void 0 : message.clientMsgID,
|
|
102
|
+
message,
|
|
100
103
|
onQuoteMessage,
|
|
101
104
|
]);
|
|
102
105
|
const showSenderInfo = useMemo(() => {
|
|
103
106
|
var _a, _b, _c;
|
|
104
107
|
try {
|
|
105
108
|
const isChatSupport = (_c = (_b = (_a = JSON.parse((conversationData === null || conversationData === void 0 ? void 0 : conversationData.ex) || "{}")) === null || _a === void 0 ? void 0 : _a.sessionInfo) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.botId;
|
|
106
|
-
return isChatSupport && isCrm &&
|
|
109
|
+
return Boolean(isChatSupport && isCrm && (message === null || message === void 0 ? void 0 : message.sendID) !== userID);
|
|
107
110
|
}
|
|
108
111
|
catch (_d) {
|
|
109
112
|
console.log("Failed to parse conversationData.ex");
|
|
113
|
+
return false;
|
|
110
114
|
}
|
|
111
|
-
}, [conversationData === null || conversationData === void 0 ? void 0 : conversationData.ex, isCrm,
|
|
115
|
+
}, [conversationData === null || conversationData === void 0 ? void 0 : conversationData.ex, isCrm, message === null || message === void 0 ? void 0 : message.sendID, userID]);
|
|
112
116
|
const isInternalMessage = Boolean(message === null || message === void 0 ? void 0 : message.isInternal);
|
|
113
117
|
const isSystemLogMessage = isSystemLogMessageType(message === null || message === void 0 ? void 0 : message.contentType);
|
|
114
118
|
const hasContextMenu = contextMenuItems.length > 0;
|
|
@@ -118,11 +122,12 @@ const MessageItem = ({ message, allMessages, contextMenuOpen, onContextMenuOpenC
|
|
|
118
122
|
const nextMessage = getVisibleNeighbor(allMessages, message, "next");
|
|
119
123
|
const prevSameUser = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.sendID) === (message === null || message === void 0 ? void 0 : message.sendID);
|
|
120
124
|
const nextSameUser = (nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.sendID) === (message === null || message === void 0 ? void 0 : message.sendID);
|
|
121
|
-
const
|
|
125
|
+
const showTimeBreak = !previousMessage ||
|
|
122
126
|
!dayjs(message.sendTime).isSame(previousMessage.sendTime, "days");
|
|
123
|
-
const
|
|
124
|
-
const
|
|
125
|
-
const showSenderName = !
|
|
127
|
+
const showPeerInfo = isGroupChat || showSenderInfo;
|
|
128
|
+
const showAvatar = showPeerInfo && !isMine && !nextSameUser;
|
|
129
|
+
const showSenderName = showPeerInfo && !isMine && !prevSameUser;
|
|
130
|
+
const showTip = !nextSameUser;
|
|
126
131
|
if (!isCrm && isInternalMessage) {
|
|
127
132
|
return null;
|
|
128
133
|
}
|
|
@@ -136,29 +141,20 @@ const MessageItem = ({ message, allMessages, contextMenuOpen, onContextMenuOpenC
|
|
|
136
141
|
className: "flex flex-col gap-2 py-1 px-3 sm:px-4 min-w-0",
|
|
137
142
|
id: `${MSG_ITEM_PREFIX}${message === null || message === void 0 ? void 0 : message.clientMsgID}`,
|
|
138
143
|
};
|
|
139
|
-
const timeBreakNode = showTimeBreak ? (_jsx("div", { className: "flex justify-center", children: _jsx("span", { className: "
|
|
140
|
-
dateMonthFormat: "DD MMMM",
|
|
141
|
-
}) }) })) : null;
|
|
144
|
+
const timeBreakNode = showTimeBreak ? (_jsx("div", { className: "flex justify-center", children: _jsx("span", { className: "rounded-full bg-neutral-100 px-2 py-1 text-center text-xs text-gray-600", children: formatTimestamp(message.sendTime, { hasTime: true }) }) })) : null;
|
|
142
145
|
if (isSystemLogMessage) {
|
|
143
146
|
return (_createElement("div", Object.assign({}, messageContainerProps, { key: message === null || message === void 0 ? void 0 : message.clientMsgID }),
|
|
144
147
|
timeBreakNode,
|
|
145
148
|
_jsx(SystemLogMessageItem, { message: message })));
|
|
146
149
|
}
|
|
150
|
+
const bubbleNode = (_jsx(MessageBubble, { isMine: isMine, isInternal: isInternalMessage, senderName: message === null || message === void 0 ? void 0 : message.senderNickname, showSenderName: showSenderName, showTip: showTip, id: `${MSG_ITEM_CONTENT_PREFIX}${message === null || message === void 0 ? void 0 : message.clientMsgID}`, content: (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.MergeMessage ? (_jsxs(_Fragment, { children: [_jsx(MergeImageMessageItem, { message: message }), (message === null || message === void 0 ? void 0 : message.textElem) && _jsx(TextMessageItem, { message: message })] })) : (renderMessageByType(message)) }));
|
|
151
|
+
const wrappedBubble = hasContextMenu ? (_jsx(Dropdown, { menu: { items: contextMenuItems }, trigger: ["contextMenu"], open: contextMenuOpen, onOpenChange: onContextMenuOpenChange, children: _jsx("div", { className: "min-w-0", children: bubbleNode }) })) : (bubbleNode);
|
|
147
152
|
return (_createElement("div", Object.assign({}, messageContainerProps, { key: message === null || message === void 0 ? void 0 : message.clientMsgID }),
|
|
148
153
|
timeBreakNode,
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
? "bg-orange-100"
|
|
155
|
-
: "bg-white"), style: {
|
|
156
|
-
wordBreak: "break-word",
|
|
157
|
-
overflowWrap: "anywhere",
|
|
158
|
-
}, id: `${MSG_ITEM_CONTENT_PREFIX}${message === null || message === void 0 ? void 0 : message.clientMsgID}`, children: [(message === null || message === void 0 ? void 0 : message.contentType) === MessageType.MergeMessage ? (_jsxs("div", { children: [(_e = (_d = message === null || message === void 0 ? void 0 : message.mergeElem) === null || _d === void 0 ? void 0 : _d.multiMessage) === null || _e === void 0 ? void 0 : _e.map((item) => {
|
|
159
|
-
return renderMessageByType(item);
|
|
160
|
-
}), (message === null || message === void 0 ? void 0 : message.textElem) && (_jsx(TextMessageItem, { message: message }))] })) : (renderMessageByType(message)), _jsx("span", { className: clsx("text-xs text-gray-500 text-right"), children: dayjs(message === null || message === void 0 ? void 0 : message.sendTime).format("HH:mm") })] }) })] })] }), isMine && message.status === MessageStatus.Failed && (_jsx("span", { className: "text-red-500 text-xs mt-1", children: isMediaResendable(message) ? (_jsx(Trans, { i18nKey: "message_send_failed", components: {
|
|
161
|
-
bold: (_jsx("strong", { className: "cursor-pointer", onClick: () => resendMessage(message) })),
|
|
162
|
-
} })) : (t("message_send_failed_no_retry")) }))] })] }) })));
|
|
154
|
+
_jsxs("div", { className: clsx("flex min-w-0 items-end gap-1", isMine ? "justify-end pl-12 pr-3" : "justify-start pl-3 pr-12"), children: [!isMine &&
|
|
155
|
+
showPeerInfo &&
|
|
156
|
+
(showAvatar ? (_jsx(MessageAvatar, { avatarUrl: message === null || message === void 0 ? void 0 : message.senderFaceUrl })) : (_jsx("div", { className: "h-6 w-6 shrink-0 self-end" }))), _jsxs("div", { className: clsx("flex min-w-0 max-w-[75%] flex-col gap-1", isMine ? "items-end" : "items-start"), children: [(message === null || message === void 0 ? void 0 : message.quoteElem) && (_jsx(QuoteMessageItem, { message: message, isMine: isMine, onPressQuoteMessage: onPressQuoteMessage })), _jsxs("div", { className: "flex items-end gap-1.5", children: [isMine && (_jsx(MessageStatusIndicator, { message: message, isLatest: isLatestMine })), wrappedBubble] }), isMine && message.status === MessageStatus.Failed && (_jsx("span", { className: "mt-1 text-xs text-red-500", children: isMediaResendable(message) ? (_jsx(Trans, { i18nKey: "message_send_failed", components: {
|
|
157
|
+
bold: (_jsx("strong", { className: "cursor-pointer", onClick: () => resendMessage(message) })),
|
|
158
|
+
} })) : (t("message_send_failed_no_retry")) }))] })] })));
|
|
163
159
|
};
|
|
164
160
|
export default MessageItem;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ImageMessageMinStyleOptions {
|
|
2
|
+
imageWidth?: number;
|
|
3
|
+
imageHeight?: number;
|
|
4
|
+
snapshotHeight?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare const getImageMessageMinStyle: ({ imageWidth, imageHeight, snapshotHeight, }: ImageMessageMinStyleOptions) => {
|
|
7
|
+
minHeight: string;
|
|
8
|
+
minWidth: string;
|
|
9
|
+
width: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const getVideoMessageMinStyle: ({ imageWidth, imageHeight, snapshotHeight, }: ImageMessageMinStyleOptions) => {
|
|
12
|
+
minHeight: string;
|
|
13
|
+
minWidth: string;
|
|
14
|
+
width: number;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=mediaSize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediaSize.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/mediaSize.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,uBAAuB,GAAI,8CAIrC,2BAA2B;;;;CAoB7B,CAAC;AAEF,eAAO,MAAM,uBAAuB,iDAtBjC,2BAA2B;;;;CAsBgC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const IMAGE_MAX_WIDTH = 200;
|
|
2
|
+
export const getImageMessageMinStyle = ({ imageWidth, imageHeight, snapshotHeight, }) => {
|
|
3
|
+
if (!imageWidth || !imageHeight || imageWidth <= 0 || imageHeight <= 0) {
|
|
4
|
+
return {
|
|
5
|
+
minHeight: "210px",
|
|
6
|
+
minWidth: "210px",
|
|
7
|
+
width: IMAGE_MAX_WIDTH,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const snapshotMaxHeight = snapshotHeight !== null && snapshotHeight !== void 0 ? snapshotHeight : imageHeight;
|
|
11
|
+
const minHeight = Math.min(IMAGE_MAX_WIDTH, imageWidth) * (imageHeight / imageWidth) + 2;
|
|
12
|
+
const adaptedHeight = Math.min(minHeight, snapshotMaxHeight) + 10;
|
|
13
|
+
const adaptedWidth = Math.min(imageWidth, IMAGE_MAX_WIDTH) + 10;
|
|
14
|
+
return {
|
|
15
|
+
minHeight: `${adaptedHeight}px`,
|
|
16
|
+
minWidth: `${adaptedWidth}px`,
|
|
17
|
+
width: Math.min(imageWidth, IMAGE_MAX_WIDTH),
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export const getVideoMessageMinStyle = getImageMessageMinStyle;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textStyle.d.ts","sourceRoot":"","sources":["../../../../src/components/message/item/textStyle.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,+DAC+B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const MESSAGE_TEXT_CLASS = "text-[16px] leading-[160%] tracking-[0.16px] text-gray-900";
|
|
@@ -94,7 +94,7 @@ const ManualAssignPopover = ({ sessionId, supporter, teamId: propTeamId, childre
|
|
|
94
94
|
};
|
|
95
95
|
const popoverContent = (_jsxs("div", { className: "w-64", children: [_jsxs("button", { type: "button", className: clsx("flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors", isAutoAssignDisabled
|
|
96
96
|
? "cursor-not-allowed text-gray-400"
|
|
97
|
-
: "text-gray-700 hover:bg-gray-50"), onClick: handleAutoAssign, disabled: isAutoAssignDisabled, children: [isAutoAssigning ? (_jsx(Spin, { size: "small" })) : (_jsx("span", { className: "text-blue-500", children: _jsx(Icon, { icon: "refresh-b", size: 20 }) })), _jsx("span", { children: t("manual_assign_button_auto_reassign") })] }), _jsx(Divider, { className: "my-2" }), _jsx("div", { className: "mb-2", children: _jsx(Input, { autoFocus: true, placeholder: t("manual_assign_search_placeholder"), value: searchText, onChange: (e) => setSearchText(e.target.value), prefix: _jsx(Icon, { icon: "search-o", size: 16, className: "text-gray-400" }), className: "rounded-lg border-gray-300 focus-within:border-
|
|
97
|
+
: "text-gray-700 hover:bg-gray-50"), onClick: handleAutoAssign, disabled: isAutoAssignDisabled, children: [isAutoAssigning ? (_jsx(Spin, { size: "small" })) : (_jsx("span", { className: "text-blue-500", children: _jsx(Icon, { icon: "refresh-b", size: 20 }) })), _jsx("span", { children: t("manual_assign_button_auto_reassign") })] }), _jsx(Divider, { className: "my-2" }), _jsx("div", { className: "mb-2", children: _jsx(Input, { autoFocus: true, placeholder: t("manual_assign_search_placeholder"), value: searchText, onChange: (e) => setSearchText(e.target.value), prefix: _jsx(Icon, { icon: "search-o", size: 16, className: "text-gray-400" }), className: "rounded-lg border-gray-300 focus-within:border-chat-focus focus-within:shadow-chat-focus-ring", allowClear: true }) }), _jsx("div", { className: "max-h-72 overflow-y-auto", role: "listbox", children: isLoading ? (_jsx("div", { className: "flex items-center justify-center py-8", children: _jsx(Spin, {}) })) : supporters && supporters.length > 0 ? (_jsx("div", { className: clsx("flex flex-col transition-opacity duration-200", isFetching && "opacity-50 pointer-events-none"), children: [...supporters]
|
|
98
98
|
.filter((item) => item.memberId !== (supporter === null || supporter === void 0 ? void 0 : supporter.id))
|
|
99
99
|
.filter((item) => !excludeCurrentUser || item.memberId !== authUserID)
|
|
100
100
|
.sort((supporterA, supporterB) => {
|
|
@@ -20,27 +20,20 @@ export interface OfflinePushMeta {
|
|
|
20
20
|
conversationId: string;
|
|
21
21
|
}
|
|
22
22
|
export interface UseSendMessageOptions {
|
|
23
|
-
extractUrls?: (text: string) => string[];
|
|
24
23
|
scrollEvent?: SendMessageScrollEvent;
|
|
25
24
|
resolveOfflinePushMeta?: (params: {
|
|
26
25
|
desc: string;
|
|
27
26
|
}) => OfflinePushMeta;
|
|
28
27
|
}
|
|
29
28
|
export declare const useSendMessage: (options?: UseSendMessageOptions) => {
|
|
30
|
-
|
|
31
|
-
plainText: string;
|
|
29
|
+
sendMergeMessage: ({ richText, plainText, files, currentSession, isInternal, urlMetadata, }: {
|
|
32
30
|
richText: string;
|
|
31
|
+
plainText: string;
|
|
32
|
+
files?: UploadFile[];
|
|
33
33
|
currentSession?: ISessionResponse;
|
|
34
34
|
isInternal: boolean;
|
|
35
35
|
urlMetadata?: UrlMetadataInfo;
|
|
36
36
|
}) => Promise<boolean>;
|
|
37
|
-
sendMergeMessage: ({ richText, plainText, files, currentSession, isInternal, }: {
|
|
38
|
-
richText: string;
|
|
39
|
-
plainText: string;
|
|
40
|
-
files: UploadFile[];
|
|
41
|
-
currentSession?: ISessionResponse;
|
|
42
|
-
isInternal: boolean;
|
|
43
|
-
}) => Promise<void>;
|
|
44
37
|
resendMessage: (failedMessage: MessageItem) => Promise<void>;
|
|
45
38
|
};
|
|
46
39
|
export declare const generateExtendMessageInfo: ({ richText, urlMetadata, currentSession, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useSendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"useSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useSendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EAGZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,OAAO,EAAgB,gBAAgB,EAAyB,MAAM,aAAa,CAAC;AAkBpF,eAAO,MAAM,iBAAiB,GAAI,SAAS;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,YAE0C,CAAC;AAE5C,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,gCAanD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,iBAAiB,eAAe,gCAazE,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAU,MAAM,oBAAoB,gCAaxE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAU,MAAM,mBAAmB,gCAatE,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAU,MAAM,MAAM,EAAE,MAAM,MAAM,EAAE,gCActE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,eAAe,WAAW,gCAc3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B,4BAA4B,GAC5B,wCAAwC,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,eAAe,CAAC;CACxE;AAED,eAAO,MAAM,cAAc,GAAI,UAAU,qBAAqB;iGAgPvD;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;QACrB,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,CAAC,EAAE,eAAe,CAAC;KAC/B,KAAG,OAAO,CAAC,OAAO,CAAC;mCAtHE,WAAW;CA2SpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,4CAIvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,sBAuBA,CAAC"}
|