@droppii-org/chat-sdk 0.1.49 → 0.1.51
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/expand.d.ts +7 -0
- package/dist/assets/svg/expand.d.ts.map +1 -0
- package/dist/assets/svg/expand.js +2 -0
- package/dist/assets/svg/expand.tsx +44 -0
- package/dist/assets/svg/index.ts +1 -1
- package/dist/components/biz-inbox/BizThreadCard.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadCard.js +3 -11
- package/dist/components/biz-thread-detail/BizAttachmentPreview.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizAttachmentPreview.js +1 -5
- package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts +3 -2
- package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizLinkMessageCard.js +4 -8
- package/dist/components/biz-thread-detail/BizMessageContent.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizMessageContent.js +59 -5
- package/dist/components/biz-thread-detail/BizMessageList.js +2 -2
- package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizThreadDetailInput.js +20 -17
- package/dist/components/biz-thread-detail/BizVideoViewer.d.ts +8 -0
- package/dist/components/biz-thread-detail/BizVideoViewer.d.ts.map +1 -0
- package/dist/components/biz-thread-detail/BizVideoViewer.js +103 -0
- 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 +11 -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 +19 -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 +4 -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 +38 -41
- 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/hooks/message/useSendMessage.d.ts +7 -13
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.js +87 -113
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/chat.d.ts +8 -1
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/utils/bizMessage.d.ts +1 -14
- package/dist/utils/bizMessage.d.ts.map +1 -1
- package/dist/utils/bizMessage.js +1 -26
- package/dist/utils/common.d.ts +3 -1
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +16 -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 +126 -127
package/dist/types/chat.d.ts
CHANGED
|
@@ -46,14 +46,21 @@ export interface ChatProviderProps {
|
|
|
46
46
|
children: React.ReactNode;
|
|
47
47
|
config: DChatInitAndLoginConfig | null;
|
|
48
48
|
}
|
|
49
|
+
export interface UrlMetadataInfo {
|
|
50
|
+
url: string;
|
|
51
|
+
title?: string;
|
|
52
|
+
description?: string;
|
|
53
|
+
image?: string;
|
|
54
|
+
}
|
|
49
55
|
export interface ExtendMessageInfo {
|
|
50
56
|
messageInfo?: {
|
|
51
57
|
type: "MESSAGE_INFO";
|
|
52
58
|
data: {
|
|
53
|
-
type: "rich_text"
|
|
59
|
+
type: "rich_text";
|
|
54
60
|
content: string;
|
|
55
61
|
};
|
|
56
62
|
};
|
|
63
|
+
urlMetadata?: UrlMetadataInfo;
|
|
57
64
|
sessionId: string;
|
|
58
65
|
applicationType: DChatApplicationType;
|
|
59
66
|
}
|
package/dist/types/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/types/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAElC,oBAAY,oBAAoB;IAC9B,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,aAAa;IACvB,YAAY,IAAI;IAChB,SAAS,IAAI;IACb,UAAU,IAAI;CACf;AAED,oBAAY,UAAU;IACpB,OAAO,IAAI;IACX,OAAO,IAAI;IACX,MAAM,IAAI;CACX;AAED,oBAAY,UAAU;IACpB,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,aAAa,MAAM;CACpB;AAED,oBAAY,iBAAiB;IAC3B,GAAG,MAAM;CACV;AAED,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,WAAW,CAAC;AAE/D,oBAAY,WAAW;IACrB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,KAAK,UAAU;IACf,KAAK,UAAU;IACf,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,mBAAmB,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IACrD,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CAChD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,cAAc,CAAC;QACrB,IAAI,EAAE;YACJ,IAAI,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/types/chat.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ConversationItem,
|
|
1
|
+
import { ConversationItem, MessageType } from "@openim/wasm-client-sdk";
|
|
2
2
|
import type { TFunction } from "i18next";
|
|
3
3
|
import type { IPulledRawMessage } from "../types/dto";
|
|
4
4
|
export declare const shouldHideBizMessage: (message: {
|
|
@@ -12,17 +12,4 @@ export declare const resolveBizLatestPreview: (lastMessage: IPulledRawMessage |
|
|
|
12
12
|
latestMsgSendTime: number;
|
|
13
13
|
};
|
|
14
14
|
export declare const parseBizLatestMessage: (latestMsg: string, currentUserId: string | undefined, t: TFunction, peerFullName?: string | null) => string;
|
|
15
|
-
export declare const getBizMessageContent: (message: MessageItem) => string;
|
|
16
|
-
export interface BizMessageDisplay {
|
|
17
|
-
isMine: boolean;
|
|
18
|
-
showAvatar: boolean;
|
|
19
|
-
showSenderName: boolean;
|
|
20
|
-
showTimeBreak: boolean;
|
|
21
|
-
showTip: boolean;
|
|
22
|
-
content: string;
|
|
23
|
-
senderName: string;
|
|
24
|
-
senderFaceUrl: string;
|
|
25
|
-
sendTime: number;
|
|
26
|
-
}
|
|
27
|
-
export declare const getBizMessageDisplay: (message: MessageItem, allMessages: MessageItem[], userID: string, isGroupChat?: boolean) => BizMessageDisplay;
|
|
28
15
|
//# sourceMappingURL=bizMessage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bizMessage.d.ts","sourceRoot":"","sources":["../../src/utils/bizMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"bizMessage.d.ts","sourceRoot":"","sources":["../../src/utils/bizMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAe,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAarD,eAAO,MAAM,oBAAoB,GAAI,SAAS;IAC5C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,YAKA,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,WAAW,MAAM,KAAG,OAQ5D,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,aAAa,iBAAiB,GAAG,IAAI,KACpC,MAGF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,aAAa,iBAAiB,GAAG,IAAI,EACrC,iBAAiB,gBAAgB,GAAG,SAAS,EAC7C,gBAAgB,OAAO;;;CAoBxB,CAAC;AAgDF,eAAO,MAAM,qBAAqB,GAChC,WAAW,MAAM,EACjB,eAAe,MAAM,GAAG,SAAS,EACjC,GAAG,SAAS,EACZ,eAAe,MAAM,GAAG,IAAI,WAe7B,CAAC"}
|
package/dist/utils/bizMessage.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { MessageType } from "@openim/wasm-client-sdk";
|
|
2
|
-
import { getVisibleNeighbor } from "../hooks/message/useMessage";
|
|
3
|
-
import dayjs from "dayjs";
|
|
4
2
|
import { generateContentBasedOnMessageType } from "./common";
|
|
5
3
|
import { isSystemLogMessageType } from "./messageLog";
|
|
6
4
|
import { transformPulledMessage } from "./messageTransform";
|
|
@@ -67,6 +65,7 @@ const getBizPreviewContent = (msgData, t) => {
|
|
|
67
65
|
case MessageType.UrlTextMessage:
|
|
68
66
|
return generateContentBasedOnMessageType(MessageType.TextMessage, ((_c = msgData.urlTextElem) === null || _c === void 0 ? void 0 : _c.content) || "", t);
|
|
69
67
|
case MessageType.PictureMessage:
|
|
68
|
+
case MessageType.MergeMessage:
|
|
70
69
|
case MessageType.VoiceMessage:
|
|
71
70
|
case MessageType.VideoMessage:
|
|
72
71
|
case MessageType.FileMessage:
|
|
@@ -92,27 +91,3 @@ export const parseBizLatestMessage = (latestMsg, currentUserId, t, peerFullName)
|
|
|
92
91
|
return "";
|
|
93
92
|
}
|
|
94
93
|
};
|
|
95
|
-
export const getBizMessageContent = (message) => {
|
|
96
|
-
var _a, _b, _c, _d, _e;
|
|
97
|
-
return (_e = (_d = (_b = (_a = message.textElem) === null || _a === void 0 ? void 0 : _a.content) !== null && _b !== void 0 ? _b : (_c = message.urlTextElem) === null || _c === void 0 ? void 0 : _c.content) !== null && _d !== void 0 ? _d : message.content) !== null && _e !== void 0 ? _e : "";
|
|
98
|
-
};
|
|
99
|
-
export const getBizMessageDisplay = (message, allMessages, userID, isGroupChat = false) => {
|
|
100
|
-
const isMine = message.sendID === userID;
|
|
101
|
-
const previousMessage = getVisibleNeighbor(allMessages, message, "prev");
|
|
102
|
-
const nextMessage = getVisibleNeighbor(allMessages, message, "next");
|
|
103
|
-
const prevSameUser = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.sendID) === message.sendID;
|
|
104
|
-
const nextSameUser = (nextMessage === null || nextMessage === void 0 ? void 0 : nextMessage.sendID) === message.sendID;
|
|
105
|
-
const showTimeBreak = !previousMessage ||
|
|
106
|
-
!dayjs(message.sendTime).isSame(previousMessage.sendTime, "days");
|
|
107
|
-
return {
|
|
108
|
-
isMine,
|
|
109
|
-
showAvatar: isGroupChat && !isMine && !nextSameUser,
|
|
110
|
-
showSenderName: isGroupChat && !isMine && !prevSameUser,
|
|
111
|
-
showTimeBreak,
|
|
112
|
-
showTip: !nextSameUser,
|
|
113
|
-
content: getBizMessageContent(message),
|
|
114
|
-
senderName: message.senderNickname,
|
|
115
|
-
senderFaceUrl: message.senderFaceUrl,
|
|
116
|
-
sendTime: message.sendTime,
|
|
117
|
-
};
|
|
118
|
-
};
|
package/dist/utils/common.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MessageType } from "@openim/wasm-client-sdk";
|
|
2
2
|
import { TFunction } from "i18next";
|
|
3
|
+
export declare function formatDuration(seconds: number): string;
|
|
3
4
|
export declare function renderFileSize(bytes: number): string;
|
|
4
5
|
export declare const generateContentBasedOnMessageType: (contentType: MessageType, plainText?: string, t?: TFunction) => string;
|
|
5
6
|
export declare const parseLatestMessage: (latestMsg: string, currentUserId?: string, t?: TFunction) => string;
|
|
@@ -10,9 +11,10 @@ interface FormatOptions {
|
|
|
10
11
|
}
|
|
11
12
|
export declare function formatTimestamp(timestamp: number, options?: FormatOptions): string;
|
|
12
13
|
export declare const urlRegex: RegExp;
|
|
13
|
-
export declare function extractLinks(text: string): string[];
|
|
14
14
|
export declare function wrapLinksInHtml(htmlContent: string): string;
|
|
15
15
|
export declare const getHostFromUrl: (url: string) => string | null;
|
|
16
|
+
export declare const htmlHasFormatting: (html: string) => boolean;
|
|
17
|
+
export declare const stripHtml: (html: string) => string;
|
|
16
18
|
/**
|
|
17
19
|
* Sanitizes HTML content to prevent XSS attacks
|
|
18
20
|
* Uses DOMPurify to remove all potentially malicious code
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAkBpC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,eAAO,MAAM,iCAAiC,GAC5C,aAAa,WAAW,EACxB,YAAY,MAAM,EAClB,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGnE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAkBpC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,eAAO,MAAM,iCAAiC,GAC5C,aAAa,WAAW,EACxB,YAAY,MAAM,EAClB,IAAI,SAAS,WAuBd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,WAAW,MAAM,EACjB,gBAAgB,MAAM,EACtB,IAAI,SAAS,WAkDd,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,kBAAc,WA2Cf,CAAC;AAEF,UAAU,aAAa;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAqBR;AAED,eAAO,MAAM,QAAQ,QAAkD,CAAC;AAExE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAqC3D;AAED,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,IAOrD,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,OACf,CAAC;AAEnC,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAO9B,CAAC;AAEZ;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgEjD"}
|
package/dist/utils/common.js
CHANGED
|
@@ -13,6 +13,11 @@ const getSenderLabelForLatestPreview = (msgData, currentUserId, t) => {
|
|
|
13
13
|
}
|
|
14
14
|
return String(t("message_sender_unnamed"));
|
|
15
15
|
};
|
|
16
|
+
export function formatDuration(seconds) {
|
|
17
|
+
const minutes = Math.floor(seconds / 60);
|
|
18
|
+
const secs = Math.floor(seconds % 60);
|
|
19
|
+
return `${String(minutes).padStart(2, "0")}:${String(secs).padStart(2, "0")}`;
|
|
20
|
+
}
|
|
16
21
|
export function renderFileSize(bytes) {
|
|
17
22
|
if (!bytes || bytes <= 0)
|
|
18
23
|
return "0 B";
|
|
@@ -32,6 +37,7 @@ export const generateContentBasedOnMessageType = (contentType, plainText, t) =>
|
|
|
32
37
|
case MessageType.LogTextMessage:
|
|
33
38
|
return plainText || "";
|
|
34
39
|
case MessageType.PictureMessage:
|
|
40
|
+
case MessageType.MergeMessage:
|
|
35
41
|
return t ? t("msg_type_image") : "[Hình ảnh]";
|
|
36
42
|
case MessageType.VoiceMessage:
|
|
37
43
|
return t ? t("msg_type_voice") : "[Tin nhắn thoại]";
|
|
@@ -62,6 +68,7 @@ export const parseLatestMessage = (latestMsg, currentUserId, t) => {
|
|
|
62
68
|
case MessageType.QuoteMessage:
|
|
63
69
|
return `${sender}: ${generateContentBasedOnMessageType(contentType, ((_a = msgData === null || msgData === void 0 ? void 0 : msgData.textElem) === null || _a === void 0 ? void 0 : _a.content) || ((_b = msgData === null || msgData === void 0 ? void 0 : msgData.quoteElem) === null || _b === void 0 ? void 0 : _b.text) || "")}`;
|
|
64
70
|
case MessageType.PictureMessage:
|
|
71
|
+
case MessageType.MergeMessage:
|
|
65
72
|
case MessageType.VoiceMessage:
|
|
66
73
|
case MessageType.VideoMessage:
|
|
67
74
|
case MessageType.FileMessage:
|
|
@@ -140,9 +147,6 @@ export function formatTimestamp(timestamp, options) {
|
|
|
140
147
|
: date.format(`${dateMonthFormat} YYYY`);
|
|
141
148
|
}
|
|
142
149
|
export const urlRegex = /\bhttps?:\/\/[^\s<>"']*[^\s<>"',.!?()\[\]{}]/g;
|
|
143
|
-
export function extractLinks(text) {
|
|
144
|
-
return text.match(urlRegex) || [];
|
|
145
|
-
}
|
|
146
150
|
export function wrapLinksInHtml(htmlContent) {
|
|
147
151
|
var _a;
|
|
148
152
|
// Regex để kiểm tra xem link có nằm trong thẻ <a> không
|
|
@@ -181,6 +185,15 @@ export const getHostFromUrl = (url) => {
|
|
|
181
185
|
return null;
|
|
182
186
|
}
|
|
183
187
|
};
|
|
188
|
+
const HTML_FORMATTING_REGEX = /<(strong|b|em|i|u|s|del|ins|mark|ul|ol|li|a|blockquote|h[1-6]|code|pre|table)\b/i;
|
|
189
|
+
export const htmlHasFormatting = (html) => HTML_FORMATTING_REGEX.test(html);
|
|
190
|
+
export const stripHtml = (html) => html
|
|
191
|
+
.replace(/<[^>]*>/g, "")
|
|
192
|
+
.replace(/ /g, " ")
|
|
193
|
+
.replace(/&/g, "&")
|
|
194
|
+
.replace(/</g, "<")
|
|
195
|
+
.replace(/>/g, ">")
|
|
196
|
+
.trim();
|
|
184
197
|
/**
|
|
185
198
|
* Sanitizes HTML content to prevent XSS attacks
|
|
186
199
|
* Uses DOMPurify to remove all potentially malicious code
|
|
@@ -20,6 +20,7 @@ export declare const validateFile: (file: File, t: TFunction) => FileValidationR
|
|
|
20
20
|
* Validates video count limit (max 1 video)
|
|
21
21
|
*/
|
|
22
22
|
export declare const validateVideoLimit: (newFiles: File[], currentUploadedFiles: UploadFile[], t: TFunction) => FileValidationResult;
|
|
23
|
+
export declare const createUploadFile: (file: File) => UploadFile;
|
|
23
24
|
export declare const processAndValidateDocuments: (files: File[], t: TFunction) => UploadFile[];
|
|
24
25
|
/**
|
|
25
26
|
* Process and validate multiple files, converting to UploadFile format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileValidation.d.ts","sourceRoot":"","sources":["../../src/utils/fileValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAO,MAAM,oBAAoB,UAA2C,CAAC;AAC7E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,mBAAmB,UAI/B,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,CAAC,EAAE,SAAS,CAAC;IACb,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,IAAI,EACV,GAAG,SAAS,KACX,oBAuBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,IAAI,EAAE,EAChB,sBAAsB,UAAU,EAAE,EAClC,GAAG,SAAS,KACX,oBAYF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,OAAO,IAAI,EAAE,EACb,GAAG,SAAS,KACX,UAAU,
|
|
1
|
+
{"version":3,"file":"fileValidation.d.ts","sourceRoot":"","sources":["../../src/utils/fileValidation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,UAAU,EAAE,MAAM,MAAM,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAO,MAAM,oBAAoB,UAA2C,CAAC;AAC7E,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,mBAAmB,UAI/B,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,CAAC,EAAE,SAAS,CAAC;IACb,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,IAAI,EACV,GAAG,SAAS,KACX,oBAuBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,IAAI,EAAE,EAChB,sBAAsB,UAAU,EAAE,EAClC,GAAG,SAAS,KACX,oBAYF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,MAAM,IAAI,KAAG,UAO5C,CAAC;AAEH,eAAO,MAAM,2BAA2B,GACtC,OAAO,IAAI,EAAE,EACb,GAAG,SAAS,KACX,UAAU,EAkBZ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,IAAI,EAAE,EACb,SAAS,qBAAqB,KAC7B,UAAU,EA+BZ,CAAC"}
|
|
@@ -42,6 +42,14 @@ export const validateVideoLimit = (newFiles, currentUploadedFiles, t) => {
|
|
|
42
42
|
}
|
|
43
43
|
return { isValid: true };
|
|
44
44
|
};
|
|
45
|
+
export const createUploadFile = (file) => ({
|
|
46
|
+
uid: `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
|
|
47
|
+
name: file.name,
|
|
48
|
+
status: "done",
|
|
49
|
+
type: file.type,
|
|
50
|
+
size: file.size,
|
|
51
|
+
originFileObj: file,
|
|
52
|
+
});
|
|
45
53
|
export const processAndValidateDocuments = (files, t) => {
|
|
46
54
|
try {
|
|
47
55
|
return files
|
|
@@ -52,14 +60,7 @@ export const processAndValidateDocuments = (files, t) => {
|
|
|
52
60
|
}
|
|
53
61
|
return true;
|
|
54
62
|
})
|
|
55
|
-
.map(
|
|
56
|
-
uid: `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
|
|
57
|
-
name: file.name,
|
|
58
|
-
status: "done",
|
|
59
|
-
type: file.type,
|
|
60
|
-
size: file.size,
|
|
61
|
-
originFileObj: file,
|
|
62
|
-
}));
|
|
63
|
+
.map(createUploadFile);
|
|
63
64
|
}
|
|
64
65
|
catch (error) {
|
|
65
66
|
console.error("Error processing documents:", error);
|
|
@@ -84,15 +85,7 @@ export const processAndValidateFiles = (files, options) => {
|
|
|
84
85
|
files.forEach((file) => {
|
|
85
86
|
const validation = validateFile(file, t);
|
|
86
87
|
if (validation.isValid) {
|
|
87
|
-
|
|
88
|
-
uid: `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
|
|
89
|
-
name: file.name,
|
|
90
|
-
status: "done",
|
|
91
|
-
type: file.type,
|
|
92
|
-
size: file.size,
|
|
93
|
-
originFileObj: file,
|
|
94
|
-
};
|
|
95
|
-
validFiles.push(uploadFile);
|
|
88
|
+
validFiles.push(createUploadFile(file));
|
|
96
89
|
}
|
|
97
90
|
else {
|
|
98
91
|
antdMessage.error(validation.error);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const normalizeLinkUrl: (link: string) => string;
|
|
2
|
+
export declare const extractLinkUrls: (text: string) => string[];
|
|
3
|
+
export type TextSegment = {
|
|
4
|
+
type: "text";
|
|
5
|
+
value: string;
|
|
6
|
+
} | {
|
|
7
|
+
type: "link";
|
|
8
|
+
value: string;
|
|
9
|
+
url: string;
|
|
10
|
+
};
|
|
11
|
+
export declare const parseTextWithLinks: (text: string) => TextSegment[];
|
|
12
|
+
export declare const getHostLabel: (url: string) => string;
|
|
13
|
+
//# sourceMappingURL=link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../src/utils/link.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAK/C,CAAC;AA+BF,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,MAAM,EAYpD,CAAC;AAEF,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,KAAG,WAAW,EAwB5D,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,KAAG,MAM1C,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
const PROTOCOL_URL_REGEX = /\bhttps?:\/\/[^\s<>"']*[^\s<>"',.!?()[\]{}]/gi;
|
|
2
|
+
const BARE_DOMAIN_REGEX = /\b(?!(?:https?:\/\/))(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z0-9-]{0,62}(?:\/[^\s<>"',.!?()[\]{}]*)?\b/gi;
|
|
3
|
+
export const normalizeLinkUrl = (link) => {
|
|
4
|
+
const trimmed = link.trim();
|
|
5
|
+
if (!trimmed)
|
|
6
|
+
return trimmed;
|
|
7
|
+
if (/^https?:\/\//i.test(trimmed))
|
|
8
|
+
return trimmed;
|
|
9
|
+
return `https://${trimmed}`;
|
|
10
|
+
};
|
|
11
|
+
const findLinkRanges = (text) => {
|
|
12
|
+
const ranges = [];
|
|
13
|
+
const addMatches = (regex) => {
|
|
14
|
+
const re = new RegExp(regex.source, regex.flags);
|
|
15
|
+
let match;
|
|
16
|
+
while ((match = re.exec(text)) !== null) {
|
|
17
|
+
ranges.push({
|
|
18
|
+
text: match[0],
|
|
19
|
+
start: match.index,
|
|
20
|
+
end: match.index + match[0].length,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
addMatches(PROTOCOL_URL_REGEX);
|
|
25
|
+
addMatches(BARE_DOMAIN_REGEX);
|
|
26
|
+
ranges.sort((a, b) => a.start - b.start);
|
|
27
|
+
const deduped = [];
|
|
28
|
+
for (const range of ranges) {
|
|
29
|
+
if (deduped.some((r) => range.start < r.end && r.start < range.end))
|
|
30
|
+
continue;
|
|
31
|
+
deduped.push(range);
|
|
32
|
+
}
|
|
33
|
+
return deduped;
|
|
34
|
+
};
|
|
35
|
+
export const extractLinkUrls = (text) => {
|
|
36
|
+
const seen = new Set();
|
|
37
|
+
const urls = [];
|
|
38
|
+
for (const { text: raw } of findLinkRanges(text)) {
|
|
39
|
+
const url = normalizeLinkUrl(raw);
|
|
40
|
+
if (seen.has(url))
|
|
41
|
+
continue;
|
|
42
|
+
seen.add(url);
|
|
43
|
+
urls.push(url);
|
|
44
|
+
}
|
|
45
|
+
return urls;
|
|
46
|
+
};
|
|
47
|
+
export const parseTextWithLinks = (text) => {
|
|
48
|
+
const ranges = findLinkRanges(text);
|
|
49
|
+
if (!ranges.length)
|
|
50
|
+
return [{ type: "text", value: text }];
|
|
51
|
+
const segments = [];
|
|
52
|
+
let cursor = 0;
|
|
53
|
+
for (const { text: raw, start, end } of ranges) {
|
|
54
|
+
if (start > cursor) {
|
|
55
|
+
segments.push({ type: "text", value: text.slice(cursor, start) });
|
|
56
|
+
}
|
|
57
|
+
segments.push({
|
|
58
|
+
type: "link",
|
|
59
|
+
value: raw,
|
|
60
|
+
url: normalizeLinkUrl(raw),
|
|
61
|
+
});
|
|
62
|
+
cursor = end;
|
|
63
|
+
}
|
|
64
|
+
if (cursor < text.length) {
|
|
65
|
+
segments.push({ type: "text", value: text.slice(cursor) });
|
|
66
|
+
}
|
|
67
|
+
return segments;
|
|
68
|
+
};
|
|
69
|
+
export const getHostLabel = (url) => {
|
|
70
|
+
var _a;
|
|
71
|
+
try {
|
|
72
|
+
return new URL(normalizeLinkUrl(url)).host;
|
|
73
|
+
}
|
|
74
|
+
catch (_b) {
|
|
75
|
+
return (_a = url.replace(/^https?:\/\//i, "").split("/")[0]) !== null && _a !== void 0 ? _a : url;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openLink.d.ts","sourceRoot":"","sources":["../../src/utils/openLink.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,GAAG,SAAS,KAAG,OAepD,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { message as antdMessage } from "antd";
|
|
2
|
+
import { normalizeLinkUrl } from "./link";
|
|
3
|
+
export const openLink = (url, t) => {
|
|
4
|
+
if (!url || typeof window === "undefined")
|
|
5
|
+
return false;
|
|
6
|
+
try {
|
|
7
|
+
const opened = window.open(normalizeLinkUrl(url), "_blank");
|
|
8
|
+
if (!opened) {
|
|
9
|
+
antdMessage.error(t("link_open_error"));
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
opened.opener = null;
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch (_a) {
|
|
16
|
+
antdMessage.error(t("link_open_error"));
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
};
|