@droppii-org/chat-sdk 0.1.1 → 0.1.3
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/sdk/sql-wasm.wasm +0 -0
- package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationBySessionItem.js +6 -2
- package/dist/components/mediaCollection/LinkCollection.js +1 -1
- package/dist/components/message/MediaPreviewIcon.d.ts +7 -0
- package/dist/components/message/MediaPreviewIcon.d.ts.map +1 -0
- package/dist/components/message/MediaPreviewIcon.js +24 -0
- package/dist/components/message/MessageHeader.js +1 -1
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +48 -5
- package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
- package/dist/components/message/footer/ActionBar.js +15 -86
- package/dist/components/message/footer/EmojiPicker.d.ts.map +1 -1
- package/dist/components/message/footer/EmojiPicker.js +9 -5
- package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
- package/dist/components/message/footer/EnterHandler.js +16 -5
- package/dist/components/message/footer/FilePreview.d.ts +5 -0
- package/dist/components/message/footer/FilePreview.d.ts.map +1 -1
- package/dist/components/message/footer/FilePreview.js +15 -12
- package/dist/components/message/footer/MediaActions.d.ts +10 -0
- package/dist/components/message/footer/MediaActions.d.ts.map +1 -0
- package/dist/components/message/footer/MediaActions.js +78 -0
- package/dist/components/message/footer/QuotedMessage.d.ts +2 -0
- package/dist/components/message/footer/QuotedMessage.d.ts.map +1 -0
- package/dist/components/message/footer/QuotedMessage.js +24 -0
- package/dist/components/message/footer/editorConfig.d.ts +24 -0
- package/dist/components/message/footer/editorConfig.d.ts.map +1 -0
- package/dist/components/message/footer/editorConfig.js +33 -0
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +6 -27
- package/dist/components/message/item/MessageStatusIndicator.d.ts +8 -0
- package/dist/components/message/item/MessageStatusIndicator.d.ts.map +1 -0
- package/dist/components/message/item/MessageStatusIndicator.js +16 -0
- package/dist/components/message/item/QuoteMessage.d.ts +9 -0
- package/dist/components/message/item/QuoteMessage.d.ts.map +1 -0
- package/dist/components/message/item/QuoteMessage.js +22 -0
- package/dist/components/message/item/RevokeMessage.d.ts +5 -0
- package/dist/components/message/item/RevokeMessage.d.ts.map +1 -0
- package/dist/components/message/item/RevokeMessage.js +8 -0
- package/dist/components/message/item/TextMessage.js +1 -1
- package/dist/components/message/item/UrlTextMessage.d.ts.map +1 -1
- package/dist/components/message/item/UrlTextMessage.js +3 -3
- package/dist/components/message/item/index.d.ts +6 -1
- package/dist/components/message/item/index.d.ts.map +1 -1
- package/dist/components/message/item/index.js +88 -25
- package/dist/components/richTextEditor/RichTextEditor.d.ts +12 -0
- package/dist/components/richTextEditor/RichTextEditor.d.ts.map +1 -0
- package/dist/components/richTextEditor/RichTextEditor.js +62 -0
- package/dist/components/searchConversation/SearchDrawer.js +1 -1
- package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts +3 -1
- package/dist/components/searchConversation/item/SearchItemAsMessage.d.ts.map +1 -1
- package/dist/components/searchConversation/item/SearchItemAsMessage.js +5 -2
- package/dist/components/thread/AssignConfirmModal.d.ts +12 -0
- package/dist/components/thread/AssignConfirmModal.d.ts.map +1 -0
- package/dist/components/thread/AssignConfirmModal.js +11 -0
- package/dist/components/thread/ManualAssignPopover.d.ts +14 -0
- package/dist/components/thread/ManualAssignPopover.d.ts.map +1 -0
- package/dist/components/thread/ManualAssignPopover.js +83 -0
- package/dist/components/thread/SessionSection.d.ts.map +1 -1
- package/dist/components/thread/SessionSection.js +11 -6
- package/dist/components/thread/UserSection.js +1 -1
- package/dist/hooks/message/useMessage.d.ts +1 -0
- package/dist/hooks/message/useMessage.d.ts.map +1 -1
- package/dist/hooks/message/useMessage.js +7 -0
- package/dist/hooks/message/useRevokeMessage.d.ts +5 -0
- package/dist/hooks/message/useRevokeMessage.d.ts.map +1 -0
- package/dist/hooks/message/useRevokeMessage.js +16 -0
- package/dist/hooks/message/useSendMessage.d.ts +6 -0
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.js +170 -32
- package/dist/hooks/session/useAssignSession.d.ts +8 -0
- package/dist/hooks/session/useAssignSession.d.ts.map +1 -0
- package/dist/hooks/session/useAssignSession.js +15 -0
- package/dist/hooks/session/useCreateNote.d.ts.map +1 -1
- package/dist/hooks/session/useCreateNote.js +2 -1
- package/dist/hooks/session/useGetTeamSupporters.d.ts +8 -0
- package/dist/hooks/session/useGetTeamSupporters.d.ts.map +1 -0
- package/dist/hooks/session/useGetTeamSupporters.js +20 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/locales/vi/common.json +49 -37
- package/dist/services/query.d.ts +2 -0
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +2 -0
- package/dist/services/routes.d.ts +2 -0
- package/dist/services/routes.d.ts.map +1 -1
- package/dist/services/routes.js +2 -0
- package/dist/store/conversation.d.ts.map +1 -1
- package/dist/store/conversation.js +7 -1
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/chat.d.ts +1 -1
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/dto.d.ts +26 -0
- package/dist/types/dto.d.ts.map +1 -1
- package/dist/utils/common.d.ts +3 -2
- package/dist/utils/common.d.ts.map +1 -1
- package/dist/utils/common.js +43 -19
- package/dist/utils/events.d.ts +1 -0
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/fileValidation.d.ts.map +1 -1
- package/dist/utils/fileValidation.js +2 -8
- package/dist/utils/queryHelpers.d.ts +3 -0
- package/dist/utils/queryHelpers.d.ts.map +1 -0
- package/dist/utils/queryHelpers.js +11 -0
- package/package.json +11 -10
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
import { MessageStatus, } from "@openim/wasm-client-sdk";
|
|
1
|
+
import { MessageStatus, MessageType, } from "@openim/wasm-client-sdk";
|
|
2
2
|
import { DChatSDK } from "../../constants/sdk";
|
|
3
3
|
import { v4 as uuidv4 } from "uuid";
|
|
4
4
|
import { useChatContext } from "../../context/ChatContext";
|
|
5
5
|
import { useCallback } from "react";
|
|
6
|
-
import {
|
|
6
|
+
import { useTranslation } from "react-i18next";
|
|
7
|
+
import { pushNewMessage, removeOneMessage, updateOneMessage, } from "./useMessage";
|
|
7
8
|
import { emit } from "../../utils/events";
|
|
8
9
|
import useConversationStore from "../../store/conversation";
|
|
9
10
|
import useAuthStore from "../../store/auth";
|
|
10
11
|
import { extractLinks, generateContentBasedOnMessageType, } from "../../utils/common";
|
|
12
|
+
const messageFileStore = new Map();
|
|
13
|
+
const MEDIA_CONTENT_TYPES = new Set([
|
|
14
|
+
MessageType.PictureMessage,
|
|
15
|
+
MessageType.VideoMessage,
|
|
16
|
+
MessageType.FileMessage,
|
|
17
|
+
]);
|
|
18
|
+
export const isMediaResendable = (message) => !MEDIA_CONTENT_TYPES.has(message.contentType) ||
|
|
19
|
+
messageFileStore.has(message.clientMsgID);
|
|
11
20
|
export const createTextMessage = async (text) => {
|
|
12
21
|
let textMessage = await DChatSDK.createTextMessage(text, new Date().getTime().toString())
|
|
13
22
|
.then(({ data }) => {
|
|
@@ -74,45 +83,152 @@ export const createUrlTextMessage = async (text, urls) => {
|
|
|
74
83
|
});
|
|
75
84
|
return textMessage;
|
|
76
85
|
};
|
|
86
|
+
export const createQuoteMessage = async (text, quotedMessage) => {
|
|
87
|
+
let textMessage = await DChatSDK.createQuoteMessage({
|
|
88
|
+
text,
|
|
89
|
+
message: JSON.stringify(quotedMessage),
|
|
90
|
+
})
|
|
91
|
+
.then(({ data }) => {
|
|
92
|
+
return data;
|
|
93
|
+
})
|
|
94
|
+
.catch(({ errCode, errMsg }) => {
|
|
95
|
+
console.error("createQuoteMessage", errCode, errMsg);
|
|
96
|
+
return null;
|
|
97
|
+
});
|
|
98
|
+
return textMessage;
|
|
99
|
+
};
|
|
77
100
|
export const useSendMessage = () => {
|
|
78
101
|
const { user } = useChatContext();
|
|
102
|
+
const { t } = useTranslation("common");
|
|
79
103
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
104
|
+
const quotedMessage = useConversationStore((state) => state.quotedMessage);
|
|
105
|
+
const setQuotedMessage = useConversationStore((state) => state.setQuotedMessage);
|
|
80
106
|
const { userID: recvID, groupID } = conversationData || {};
|
|
107
|
+
const dispatchMessage = useCallback(async (message) => {
|
|
108
|
+
var _a;
|
|
109
|
+
const desc = generateContentBasedOnMessageType(message.contentType, ((_a = message === null || message === void 0 ? void 0 : message.textElem) === null || _a === void 0 ? void 0 : _a.content) || "") || t("new_message");
|
|
110
|
+
const { data: successMessage } = await DChatSDK.sendMessage({
|
|
111
|
+
recvID: recvID || "",
|
|
112
|
+
groupID: groupID || "",
|
|
113
|
+
message,
|
|
114
|
+
offlinePushInfo: {
|
|
115
|
+
title: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
|
|
116
|
+
desc,
|
|
117
|
+
ex: JSON.stringify({
|
|
118
|
+
icon: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL) || "",
|
|
119
|
+
conversationId: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "",
|
|
120
|
+
title: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
|
|
121
|
+
desc,
|
|
122
|
+
}),
|
|
123
|
+
iOSPushSound: "default",
|
|
124
|
+
iOSBadgeCount: true,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
updateOneMessage(successMessage);
|
|
128
|
+
messageFileStore.delete(message.clientMsgID);
|
|
129
|
+
}, [recvID, groupID]);
|
|
81
130
|
const sendMessage = useCallback(async (message) => {
|
|
82
|
-
|
|
131
|
+
pushNewMessage(message);
|
|
132
|
+
emit("CHAT_LIST_SCROLL_TO_BOTTOM");
|
|
83
133
|
try {
|
|
84
|
-
|
|
85
|
-
emit("CHAT_LIST_SCROLL_TO_BOTTOM");
|
|
86
|
-
const { data: successMessage } = await DChatSDK.sendMessage({
|
|
87
|
-
recvID: recvID || "",
|
|
88
|
-
groupID: groupID || "",
|
|
89
|
-
message: message,
|
|
90
|
-
offlinePushInfo: {
|
|
91
|
-
title: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
|
|
92
|
-
desc: `${generateContentBasedOnMessageType(message.contentType, ((_a = message === null || message === void 0 ? void 0 : message.textElem) === null || _a === void 0 ? void 0 : _a.content) || "")}` || "Bạn có tin nhắn mới",
|
|
93
|
-
ex: JSON.stringify({
|
|
94
|
-
icon: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL) || "",
|
|
95
|
-
conversationId: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "",
|
|
96
|
-
title: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
|
|
97
|
-
desc: `${generateContentBasedOnMessageType(message.contentType, ((_b = message === null || message === void 0 ? void 0 : message.textElem) === null || _b === void 0 ? void 0 : _b.content) || "")}` || "Bạn có tin nhắn mới",
|
|
98
|
-
}),
|
|
99
|
-
iOSPushSound: "default",
|
|
100
|
-
iOSBadgeCount: true,
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
|
-
updateOneMessage(successMessage);
|
|
134
|
+
await dispatchMessage(message);
|
|
104
135
|
}
|
|
105
|
-
catch (
|
|
136
|
+
catch (_a) {
|
|
106
137
|
updateOneMessage(Object.assign(Object.assign({}, message), { status: MessageStatus.Failed }));
|
|
107
138
|
}
|
|
108
|
-
}, [
|
|
139
|
+
}, [dispatchMessage]);
|
|
140
|
+
const resendMessage = useCallback(async (failedMessage) => {
|
|
141
|
+
var _a;
|
|
142
|
+
const storedFiles = messageFileStore.get(failedMessage.clientMsgID);
|
|
143
|
+
if (!storedFiles) {
|
|
144
|
+
let newTextPayload = null;
|
|
145
|
+
const textContent = ((_a = failedMessage.textElem) === null || _a === void 0 ? void 0 : _a.content) || failedMessage.content || "";
|
|
146
|
+
if (failedMessage.contentType === MessageType.UrlTextMessage &&
|
|
147
|
+
failedMessage.urlTextElem) {
|
|
148
|
+
newTextPayload = await createUrlTextMessage(textContent, failedMessage.urlTextElem.urls);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
newTextPayload = await createTextMessage(textContent);
|
|
152
|
+
}
|
|
153
|
+
if (!newTextPayload) {
|
|
154
|
+
updateOneMessage(Object.assign(Object.assign({}, failedMessage), { status: MessageStatus.Failed }));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const conversationID = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "";
|
|
158
|
+
await DChatSDK.deleteMessageFromLocalStorage({
|
|
159
|
+
conversationID,
|
|
160
|
+
clientMsgID: failedMessage.clientMsgID,
|
|
161
|
+
});
|
|
162
|
+
removeOneMessage(failedMessage.clientMsgID);
|
|
163
|
+
await sendMessage(Object.assign(Object.assign({}, newTextPayload), { ex: failedMessage.ex }));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
let newPayload = null;
|
|
167
|
+
if (storedFiles.type === "image" && failedMessage.pictureElem) {
|
|
168
|
+
const { sourcePicture, bigPicture, snapshotPicture, sourcePath } = failedMessage.pictureElem;
|
|
169
|
+
newPayload = await createImageMessageByFile({
|
|
170
|
+
sourcePicture,
|
|
171
|
+
bigPicture,
|
|
172
|
+
snapshotPicture,
|
|
173
|
+
sourcePath,
|
|
174
|
+
file: storedFiles.file,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else if (storedFiles.type === "video" && failedMessage.videoElem) {
|
|
178
|
+
const elem = failedMessage.videoElem;
|
|
179
|
+
newPayload = await createVideoMessageByFile({
|
|
180
|
+
videoPath: elem.videoPath,
|
|
181
|
+
duration: elem.duration,
|
|
182
|
+
videoType: elem.videoType,
|
|
183
|
+
snapshotPath: elem.snapshotPath,
|
|
184
|
+
videoUUID: elem.videoUUID,
|
|
185
|
+
videoUrl: elem.videoUrl,
|
|
186
|
+
videoSize: elem.videoSize,
|
|
187
|
+
snapshotUUID: elem.snapshotUUID,
|
|
188
|
+
snapshotSize: elem.snapshotSize,
|
|
189
|
+
snapshotUrl: elem.snapshotUrl,
|
|
190
|
+
snapshotWidth: elem.snapshotWidth,
|
|
191
|
+
snapshotHeight: elem.snapshotHeight,
|
|
192
|
+
videoFile: storedFiles.videoFile,
|
|
193
|
+
snapshotFile: storedFiles.snapshotFile,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
else if (storedFiles.type === "file" && failedMessage.fileElem) {
|
|
197
|
+
const elem = failedMessage.fileElem;
|
|
198
|
+
newPayload = await createFileMessageByFile({
|
|
199
|
+
filePath: elem.filePath,
|
|
200
|
+
fileName: elem.fileName,
|
|
201
|
+
uuid: elem.uuid,
|
|
202
|
+
sourceUrl: elem.sourceUrl,
|
|
203
|
+
fileSize: elem.fileSize,
|
|
204
|
+
file: storedFiles.file,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (!newPayload) {
|
|
208
|
+
updateOneMessage(Object.assign(Object.assign({}, failedMessage), { status: MessageStatus.Failed }));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
messageFileStore.delete(failedMessage.clientMsgID);
|
|
212
|
+
messageFileStore.set(newPayload.clientMsgID, storedFiles);
|
|
213
|
+
const conversationID = (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "";
|
|
214
|
+
await DChatSDK.deleteMessageFromLocalStorage({
|
|
215
|
+
conversationID,
|
|
216
|
+
clientMsgID: failedMessage.clientMsgID,
|
|
217
|
+
});
|
|
218
|
+
removeOneMessage(failedMessage.clientMsgID);
|
|
219
|
+
await sendMessage(Object.assign(Object.assign({}, newPayload), { ex: failedMessage.ex }));
|
|
220
|
+
}, [sendMessage]);
|
|
109
221
|
const sendTextMessage = useCallback(async ({ plainText, richText, currentSession, }) => {
|
|
110
222
|
if (!recvID && !groupID)
|
|
111
223
|
return;
|
|
112
224
|
const urls = extractLinks(plainText);
|
|
113
225
|
const isUrlMessage = urls.length > 0;
|
|
114
226
|
let message = null;
|
|
115
|
-
if (
|
|
227
|
+
if (!!(quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID)) {
|
|
228
|
+
message = await createQuoteMessage(plainText, quotedMessage);
|
|
229
|
+
setQuotedMessage(null);
|
|
230
|
+
}
|
|
231
|
+
else if (isUrlMessage) {
|
|
116
232
|
message = await createUrlTextMessage(plainText, urls);
|
|
117
233
|
}
|
|
118
234
|
else {
|
|
@@ -126,7 +242,7 @@ export const useSendMessage = () => {
|
|
|
126
242
|
});
|
|
127
243
|
let messageItem = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}" });
|
|
128
244
|
sendMessage(messageItem);
|
|
129
|
-
}, [recvID, groupID, user, sendMessage]);
|
|
245
|
+
}, [recvID, groupID, user, sendMessage, quotedMessage, setQuotedMessage]);
|
|
130
246
|
const sendMergeMessage = useCallback(async ({ richText, plainText, files, currentSession, }) => {
|
|
131
247
|
if (!recvID && !groupID)
|
|
132
248
|
return;
|
|
@@ -159,6 +275,10 @@ export const useSendMessage = () => {
|
|
|
159
275
|
const imageMessage = await createImageMessageByFile(parsedImage);
|
|
160
276
|
if (!imageMessage)
|
|
161
277
|
continue;
|
|
278
|
+
messageFileStore.set(imageMessage.clientMsgID, {
|
|
279
|
+
type: "image",
|
|
280
|
+
file: file,
|
|
281
|
+
});
|
|
162
282
|
messageList.push(imageMessage);
|
|
163
283
|
}
|
|
164
284
|
else if (isVideo) {
|
|
@@ -185,10 +305,15 @@ export const useSendMessage = () => {
|
|
|
185
305
|
});
|
|
186
306
|
if (!videoMessage)
|
|
187
307
|
continue;
|
|
308
|
+
messageFileStore.set(videoMessage.clientMsgID, {
|
|
309
|
+
type: "video",
|
|
310
|
+
videoFile: file,
|
|
311
|
+
snapshotFile: thumbFile,
|
|
312
|
+
});
|
|
188
313
|
messageList.push(videoMessage);
|
|
189
314
|
}
|
|
190
315
|
else if (isDocument) {
|
|
191
|
-
const
|
|
316
|
+
const fileParams = {
|
|
192
317
|
filePath: "",
|
|
193
318
|
fileName: file.name,
|
|
194
319
|
uuid: uuidv4(),
|
|
@@ -196,9 +321,14 @@ export const useSendMessage = () => {
|
|
|
196
321
|
fileSize: file.size,
|
|
197
322
|
fileType: file.type,
|
|
198
323
|
file: file,
|
|
199
|
-
}
|
|
324
|
+
};
|
|
325
|
+
const fileMessage = await createFileMessageByFile(fileParams);
|
|
200
326
|
if (!fileMessage)
|
|
201
327
|
continue;
|
|
328
|
+
messageFileStore.set(fileMessage.clientMsgID, {
|
|
329
|
+
type: "file",
|
|
330
|
+
file: file,
|
|
331
|
+
});
|
|
202
332
|
messageList.push(fileMessage);
|
|
203
333
|
}
|
|
204
334
|
}
|
|
@@ -207,23 +337,31 @@ export const useSendMessage = () => {
|
|
|
207
337
|
}
|
|
208
338
|
}
|
|
209
339
|
if (!!plainText && plainText.trim() !== "") {
|
|
210
|
-
|
|
340
|
+
let textMessage = null;
|
|
341
|
+
if (quotedMessage) {
|
|
342
|
+
textMessage = await createQuoteMessage(plainText, quotedMessage);
|
|
343
|
+
setQuotedMessage(null);
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
textMessage = await createTextMessage(plainText);
|
|
347
|
+
}
|
|
211
348
|
if (!textMessage)
|
|
212
349
|
return;
|
|
213
350
|
messageList.push(textMessage);
|
|
214
351
|
}
|
|
215
352
|
for (const message of messageList) {
|
|
216
353
|
const extendMessageInfo = generateExtendMessageInfo({
|
|
217
|
-
richText,
|
|
354
|
+
richText: (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.TextMessage ? richText : "",
|
|
218
355
|
currentSession,
|
|
219
356
|
});
|
|
220
357
|
const mMessage = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}" });
|
|
221
358
|
await sendMessage(mMessage);
|
|
222
359
|
}
|
|
223
|
-
}, [recvID, groupID, sendMessage]);
|
|
360
|
+
}, [recvID, groupID, sendMessage, quotedMessage, setQuotedMessage]);
|
|
224
361
|
return {
|
|
225
362
|
sendTextMessage,
|
|
226
363
|
sendMergeMessage,
|
|
364
|
+
resendMessage,
|
|
227
365
|
};
|
|
228
366
|
};
|
|
229
367
|
export const generateExtendMessageInfo = ({ richText, currentSession, }) => {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseResponse } from "../../types/dto";
|
|
2
|
+
interface AssignSessionParams {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
supporterId: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const useAssignSession: () => import("@tanstack/react-query").UseMutationResult<BaseResponse<boolean>, Error, AssignSessionParams, unknown>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=useAssignSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAssignSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useAssignSession.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,qHAazB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useMutation } from "@tanstack/react-query";
|
|
2
|
+
import { QUERY_KEYS } from "../../services/query";
|
|
3
|
+
import { apiInstance } from "../../services/api";
|
|
4
|
+
import { ENDPOINTS } from "../../services/routes";
|
|
5
|
+
import useAuthStore from "../../store/auth";
|
|
6
|
+
export const useAssignSession = () => useMutation({
|
|
7
|
+
mutationKey: [QUERY_KEYS.ASSIGN_SESSION],
|
|
8
|
+
mutationFn: async ({ sessionId, supporterId }) => {
|
|
9
|
+
const res = await apiInstance.post(ENDPOINTS.chatService.assignSession(sessionId), {
|
|
10
|
+
applicationType: useAuthStore.getState().applicationType,
|
|
11
|
+
supporterId,
|
|
12
|
+
});
|
|
13
|
+
return res === null || res === void 0 ? void 0 : res.data;
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCreateNote.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useCreateNote.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"useCreateNote.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useCreateNote.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,eAAO,MAAM,aAAa;oBAQJ,MAAM;aACb,MAAM;cACL,MAAM;WAgBlB,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { useMutation } from "@tanstack/react-query";
|
|
|
2
2
|
import { QUERY_KEYS } from "../../services/query";
|
|
3
3
|
import { apiInstance } from "../../services/api";
|
|
4
4
|
import { ENDPOINTS } from "../../services/routes";
|
|
5
|
+
import { DChatApplicationType } from "../../types/chat";
|
|
5
6
|
export const useCreateNote = () => useMutation({
|
|
6
7
|
mutationKey: [QUERY_KEYS.CREATE_NOTE],
|
|
7
8
|
mutationFn: async ({ conversationId, content, targetId, }) => {
|
|
@@ -11,7 +12,7 @@ export const useCreateNote = () => useMutation({
|
|
|
11
12
|
targetId,
|
|
12
13
|
targetType: "USER",
|
|
13
14
|
}, {
|
|
14
|
-
params: { applicationType:
|
|
15
|
+
params: { applicationType: DChatApplicationType.OBEFE },
|
|
15
16
|
});
|
|
16
17
|
return res === null || res === void 0 ? void 0 : res.data;
|
|
17
18
|
},
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ISupporterResponse } from "../../types/dto";
|
|
2
|
+
interface UseGetTeamSupportersParams {
|
|
3
|
+
teamId: string;
|
|
4
|
+
search?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const useGetTeamSupporters: ({ teamId, search, }: UseGetTeamSupportersParams) => import("@tanstack/react-query").UseQueryResult<ISupporterResponse[], Error>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=useGetTeamSupporters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGetTeamSupporters.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetTeamSupporters.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGnE,UAAU,0BAA0B;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oBAAoB,GAAI,qBAGlC,0BAA0B,gFAiBzB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useQuery, keepPreviousData } from "@tanstack/react-query";
|
|
2
|
+
import { QUERY_KEYS } from "../../services/query";
|
|
3
|
+
import { apiInstance } from "../../services/api";
|
|
4
|
+
import { ENDPOINTS } from "../../services/routes";
|
|
5
|
+
import useAuthStore from "../../store/auth";
|
|
6
|
+
export const useGetTeamSupporters = ({ teamId, search, }) => useQuery({
|
|
7
|
+
queryKey: [QUERY_KEYS.GET_TEAM_SUPPORTERS, teamId, search],
|
|
8
|
+
queryFn: async () => {
|
|
9
|
+
var _a;
|
|
10
|
+
const res = await apiInstance.get(ENDPOINTS.chatService.getTeamSupporters(teamId), {
|
|
11
|
+
params: {
|
|
12
|
+
applicationType: useAuthStore.getState().applicationType,
|
|
13
|
+
search: search || null,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
return (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data;
|
|
17
|
+
},
|
|
18
|
+
enabled: !!teamId,
|
|
19
|
+
placeholderData: keepPreviousData,
|
|
20
|
+
});
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ export { default as qs } from "query-string";
|
|
|
12
12
|
export * from "antd/es/table";
|
|
13
13
|
export { ChatProvider, useChatContext } from "./context/ChatContext";
|
|
14
14
|
export { DChatDeskMessage, DChatBubble, Icon };
|
|
15
|
+
export { default as RichTextEditor } from "./components/richTextEditor/RichTextEditor";
|
|
15
16
|
export { useDChatAuth } from "./hooks/user/useAuth";
|
|
16
17
|
export { useUpdateFcmToken } from "./hooks/user/useUpdateFcmToken";
|
|
17
18
|
export { useUserStore, DChatApplicationType, useAuthStore };
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,cAAc,CAAC;AAC7C,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,CAAC;AAExB,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AACrD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,YAAY,MAAM,cAAc,CAAC;AACxC,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,cAAc,CAAC;AAC7C,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAGvF,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,CAAC;AAI5D,OAAO,EACL,QAAQ,IAAI,aAAa,EACzB,QAAQ,IAAI,aAAa,EACzB,WAAW,IAAI,gBAAgB,GAChC,CAAC;AAEF,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,7 @@ export * from "antd/es/table";
|
|
|
14
14
|
export { ChatProvider, useChatContext } from "./context/ChatContext";
|
|
15
15
|
//Components
|
|
16
16
|
export { DChatDeskMessage, DChatBubble, Icon };
|
|
17
|
+
export { default as RichTextEditor } from "./components/richTextEditor/RichTextEditor";
|
|
17
18
|
//Hooks
|
|
18
19
|
export { useDChatAuth } from "./hooks/user/useAuth";
|
|
19
20
|
export { useUpdateFcmToken } from "./hooks/user/useUpdateFcmToken";
|
|
@@ -42,41 +42,53 @@
|
|
|
42
42
|
"create_note_failed": "Thêm ghi chú thất bại",
|
|
43
43
|
"update_note_failed": "Cập nhật ghi chú thất bại",
|
|
44
44
|
"copied_to_clipboard": "Đã sao chép",
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
45
|
+
"message_send_failed": "Gửi tin nhắn thất bại, bạn vui lòng <bold>nhấn để gửi lại</bold>",
|
|
46
|
+
"message_send_failed_no_retry": "Gửi tin nhắn thất bại",
|
|
47
|
+
"context_menu_reply": "Trả lời",
|
|
48
|
+
"context_menu_revoke": "Thu hồi",
|
|
49
|
+
"revoke_message_confirm_title": "Thu hồi tin nhắn?",
|
|
50
|
+
"revoke_message_confirm_message": "Bạn có chắc chắn muốn thu hồi tin nhắn này?",
|
|
51
|
+
"revoke": "Thu hồi",
|
|
52
|
+
"revoked": "Đã thu hồi tin nhắn",
|
|
53
|
+
"manual_assign_search_placeholder": "Tìm kiếm",
|
|
54
|
+
"manual_assign_no_results": "Không có kết quả phù hợp",
|
|
55
|
+
"manual_assign_confirm_question": "Phân công lại cho <bold>{{name}}</bold>?",
|
|
56
|
+
"manual_assign_button_reassign": "Phân công lại",
|
|
57
|
+
"manual_assign_success": "Phân công thành công",
|
|
58
|
+
"manual_assign_failed": "Phân công thất bại",
|
|
59
|
+
"manual_assign_current": "Đang xử lý",
|
|
60
|
+
"video_limit_exceeded": "Chỉ được phép tải lên 1 video duy nhất",
|
|
61
|
+
"select_status": "Chọn trạng thái",
|
|
62
|
+
"invalid_file_format": "{{fileName}} không đúng định dạng JPG, JPEG, PNG hoặc VIDEO",
|
|
63
|
+
"file_size_exceeded": "{{fileName}} có kích thước tập tin vượt quá {{maxSize}}MB",
|
|
64
|
+
"file_processing_error": "Đã xảy ra lỗi khi xử lý tệp",
|
|
65
|
+
"invalid_document_format": "{{fileName}} không đúng định dạng (chỉ hỗ trợ PDF, DOC, DOCX)",
|
|
66
|
+
"view_message": "Xem tin nhắn",
|
|
67
|
+
"search_message_title": "Tìm kiếm tin nhắn",
|
|
68
|
+
"msg_type_image": "[Hình ảnh]",
|
|
69
|
+
"msg_type_voice": "[Tin nhắn thoại]",
|
|
70
|
+
"msg_type_file": "[File đính kèm]",
|
|
71
|
+
"msg_type_link": "[Liên kết]",
|
|
72
|
+
"msg_type_unsupported": "Tin nhắn không khả dụng",
|
|
73
|
+
"session_started": "Phiên chat đã bắt đầu",
|
|
74
|
+
"session_ended": "Phiên chat đã kết thúc",
|
|
75
|
+
"new_message": "Bạn có tin nhắn mới",
|
|
76
|
+
"close_session_success": "Đóng phiên chat thành công",
|
|
77
|
+
"close_session_failed": "Đóng phiên chat thất bại",
|
|
78
|
+
"session_active": "Đang hoạt động",
|
|
79
|
+
"session_add_tag_placeholder": "Thêm thẻ...",
|
|
80
|
+
"session_issue_detail_placeholder": "Vấn đề cụ thể...",
|
|
81
|
+
"session_note_placeholder": "Ghi chú...",
|
|
82
|
+
"session_close_button": "Đóng",
|
|
83
|
+
"member_count": "{{count}} thành viên",
|
|
84
|
+
"choose_emoji": "Chọn biểu tượng cảm xúc",
|
|
85
|
+
"emoji_smileys": "Mặt cười",
|
|
86
|
+
"emoji_nature": "Động vật",
|
|
87
|
+
"emoji_food": "Đồ ăn",
|
|
88
|
+
"emoji_activities": "Hoạt động",
|
|
89
|
+
"session_label": "Phiên {{order}}",
|
|
90
|
+
"sessions_heading": "PHIÊN HỖ TRỢ",
|
|
91
|
+
"reply_to": "Đang trả lời {{name}}",
|
|
92
|
+
"your_self": "chính mình",
|
|
93
|
+
"replied_to": "{{from}} đã trả lời {{to}}"
|
|
82
94
|
}
|
package/dist/services/query.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/services/query.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/services/query.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;CAgBtB,CAAC"}
|
package/dist/services/query.js
CHANGED
|
@@ -13,6 +13,8 @@ export declare const ENDPOINTS: {
|
|
|
13
13
|
updateSessionInfo: (sessionId: string) => string;
|
|
14
14
|
closeSession: (sessionId: string) => string;
|
|
15
15
|
getLabelSession: string;
|
|
16
|
+
getTeamSupporters: (teamId: string) => string;
|
|
17
|
+
assignSession: (sessionId: string) => string;
|
|
16
18
|
};
|
|
17
19
|
identityService: {
|
|
18
20
|
getToken: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/services/routes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;mCAMS,MAAM;;0CAGC,MAAM,UAAU,MAAM;6BAEnC,MAAM;;oDAEiB,MAAM;uCAEnB,MAAM;kCAEX,MAAM
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/services/routes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;mCAMS,MAAM;;0CAGC,MAAM,UAAU,MAAM;6BAEnC,MAAM;;oDAEiB,MAAM;uCAEnB,MAAM;kCAEX,MAAM;;oCAGJ,MAAM;mCAEP,MAAM;;;;;;;;CASpC,CAAC"}
|
package/dist/services/routes.js
CHANGED
|
@@ -13,6 +13,8 @@ export const ENDPOINTS = {
|
|
|
13
13
|
updateSessionInfo: (sessionId) => `chat-service/v1/crm/sessions/${sessionId}`,
|
|
14
14
|
closeSession: (sessionId) => `chat-service/v1/crm/sessions/${sessionId}/close`,
|
|
15
15
|
getLabelSession: "chat-service/v1/labels",
|
|
16
|
+
getTeamSupporters: (teamId) => `chat-service/v1/crm/teams/${teamId}/supporters`,
|
|
17
|
+
assignSession: (sessionId) => `chat-service/v1/crm/sessions/${sessionId}/assign`,
|
|
16
18
|
},
|
|
17
19
|
identityService: {
|
|
18
20
|
getToken: "/identity-service/v1/identity/get-token",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/store/conversation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/store/conversation.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAO3C,QAAA,MAAM,oBAAoB,gFA8JvB,CAAC;AAEJ,eAAe,oBAAoB,CAAC"}
|
|
@@ -15,7 +15,7 @@ const useConversationStore = create((set, get) => ({
|
|
|
15
15
|
searchClientMsgID: dataSearchClientMsgID,
|
|
16
16
|
}),
|
|
17
17
|
selectedConversationId: "",
|
|
18
|
-
setSelectedConversationId: (threadId) => set({ selectedConversationId: threadId }),
|
|
18
|
+
setSelectedConversationId: (threadId) => set({ selectedConversationId: threadId, quotedMessage: null }),
|
|
19
19
|
selectedSourceId: "",
|
|
20
20
|
// conversation
|
|
21
21
|
conversationList: [],
|
|
@@ -120,6 +120,7 @@ const useConversationStore = create((set, get) => ({
|
|
|
120
120
|
unreadCount: 0,
|
|
121
121
|
currentGroupInfo: undefined,
|
|
122
122
|
currentMemberInGroup: undefined,
|
|
123
|
+
quotedMessage: null,
|
|
123
124
|
});
|
|
124
125
|
},
|
|
125
126
|
//search
|
|
@@ -127,5 +128,10 @@ const useConversationStore = create((set, get) => ({
|
|
|
127
128
|
setSearchClientMsgID: (clientMsgID) => {
|
|
128
129
|
set({ searchClientMsgID: clientMsgID });
|
|
129
130
|
},
|
|
131
|
+
//quoted message
|
|
132
|
+
quotedMessage: null,
|
|
133
|
+
setQuotedMessage: (message) => {
|
|
134
|
+
set({ quotedMessage: message });
|
|
135
|
+
},
|
|
130
136
|
}));
|
|
131
137
|
export default useConversationStore;
|