@droppii-org/chat-sdk 0.1.34 → 0.1.35
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/components/biz-inbox/BizThreadAvatar.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadAvatar.js +3 -0
- package/dist/components/biz-inbox/BizThreadCard.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadCard.js +7 -2
- package/dist/components/biz-thread-detail/BizMessageList.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizMessageList.js +7 -7
- package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizThreadDetailInput.js +39 -12
- package/dist/context/ChatContext.d.ts.map +1 -1
- package/dist/context/ChatContext.js +2 -0
- package/dist/hooks/biz/index.d.ts +0 -1
- package/dist/hooks/biz/index.d.ts.map +1 -1
- package/dist/hooks/biz/index.js +0 -1
- package/dist/hooks/biz/useBizConversationListItems.d.ts.map +1 -1
- package/dist/hooks/biz/useBizConversationListItems.js +27 -2
- package/dist/hooks/biz/useBizGlobalEvent.d.ts.map +1 -1
- package/dist/hooks/biz/useBizGlobalEvent.js +17 -5
- package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
- package/dist/hooks/global/useGlobalEvent.js +7 -4
- package/dist/hooks/message/useSendMessage.d.ts +15 -2
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.js +43 -18
- package/dist/hooks/user/useAuth.d.ts.map +1 -1
- package/dist/hooks/user/useAuth.js +3 -0
- package/dist/store/bizMessageDraft.d.ts +3 -2
- package/dist/store/bizMessageDraft.d.ts.map +1 -1
- package/dist/store/bizMessageDraft.js +19 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/biz.d.ts +2 -1
- package/dist/types/biz.d.ts.map +1 -1
- package/dist/types/biz.js +1 -0
- package/dist/utils/bizConversation.d.ts +1 -0
- package/dist/utils/bizConversation.d.ts.map +1 -1
- package/dist/utils/bizConversation.js +15 -8
- package/dist/utils/bizMessage.d.ts +4 -1
- package/dist/utils/bizMessage.d.ts.map +1 -1
- package/dist/utils/bizMessage.js +10 -7
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizThreadAvatar.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadAvatar.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,eAAe,GAAI,uDAKtB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"BizThreadAvatar.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadAvatar.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,eAAe,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,eAAe,GAAI,uDAKtB,oBAAoB,4CAoDtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -6,6 +6,9 @@ import { BizChatCategory } from "../../types/biz";
|
|
|
6
6
|
import { resolveBizBadgeColor } from "../../utils/bizConversation";
|
|
7
7
|
const BizThreadAvatar = ({ chatCategory, displayName, avatarUrl, badgeLabel, }) => {
|
|
8
8
|
if (chatCategory === BizChatCategory.BIZ_BOT_CRM) {
|
|
9
|
+
if (avatarUrl) {
|
|
10
|
+
return (_jsx("div", { className: "relative h-12 w-12 shrink-0", children: _jsx("img", { src: avatarUrl, alt: displayName, className: "h-12 w-12 rounded-xl object-cover" }) }));
|
|
11
|
+
}
|
|
9
12
|
return (_jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-xl bg-[#607CFB] p-2.5 shadow-[inset_2px_3px_8px_0_rgba(0,0,0,0.40)]", children: _jsx(Icon, { icon: "head-phone-o1", size: 28, className: "text-white" }) }));
|
|
10
13
|
}
|
|
11
14
|
return (_jsxs("div", { className: "relative h-12 w-12 shrink-0", children: [avatarUrl ? (_jsx("img", { src: avatarUrl, alt: displayName, className: "h-12 w-12 rounded-full object-cover" })) : (_jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded-full bg-[#0C5CFF] text-white", children: chatCategory === BizChatCategory.GROUP ? (_jsx(Icon, { icon: "user-two-b", size: 20 })) : chatCategory === BizChatCategory.BIZ_BOT_PDP ? (_jsx(Icon, { icon: "droppii-o-1", size: 20 })) : (_jsx(Icon, { icon: "user-o", size: 20 })) })), badgeLabel && (_jsx("span", { className: clsx("absolute -bottom-px -right-px flex h-[17px] items-center justify-center gap-2 rounded-md border border-white px-1 text-[10px] font-semibold leading-3 text-white shadow-[inset_2px_6px_8px_0_rgba(0,0,0,0.40)]", resolveBizBadgeColor(chatCategory)), children: badgeLabel }))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizThreadCard.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadCard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BizThreadCard.d.ts","sourceRoot":"","sources":["../../../src/components/biz-inbox/BizThreadCard.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAavF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;CAClD;AAwBD,QAAA,MAAM,aAAa,GAAI,mBAAmB,kBAAkB,4CAkE3D,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import clsx from "clsx";
|
|
4
|
+
import dayjs from "dayjs";
|
|
4
5
|
import { useTranslation } from "react-i18next";
|
|
5
6
|
import { useChatContext } from "../../context/ChatContext";
|
|
6
7
|
import { formatTimestamp } from "../../utils/common";
|
|
@@ -11,7 +12,8 @@ import BizThreadTitle from "./BizThreadTitle";
|
|
|
11
12
|
const formatLatestMessageTime = (sendTime) => {
|
|
12
13
|
if (!sendTime)
|
|
13
14
|
return "";
|
|
14
|
-
|
|
15
|
+
const isToday = dayjs(sendTime).isSame(dayjs(), "day");
|
|
16
|
+
return formatTimestamp(sendTime, { hasTime: isToday });
|
|
15
17
|
};
|
|
16
18
|
const formatUnreadCount = (count) => (count > 99 ? "99+" : count);
|
|
17
19
|
const UnreadBadge = ({ count }) => {
|
|
@@ -27,7 +29,10 @@ const BizThreadCard = ({ item, onClick }) => {
|
|
|
27
29
|
const displayName = resolveBizDisplayName(item, t);
|
|
28
30
|
const avatarUrl = resolveBizAvatarUrl(item);
|
|
29
31
|
const badgeLabel = resolveBizBadgeLabel(item.chatCategory, t);
|
|
30
|
-
const latestMessagePreview = parseBizLatestMessage(item.latestMsg, user === null || user === void 0 ? void 0 : user.userID, tCommon,
|
|
32
|
+
const latestMessagePreview = parseBizLatestMessage(item.latestMsg, user === null || user === void 0 ? void 0 : user.userID, tCommon, {
|
|
33
|
+
peerFullName: item.peer.fullName,
|
|
34
|
+
isGroupChat: isBizGroupChat(item),
|
|
35
|
+
});
|
|
31
36
|
const latestMessageTime = formatLatestMessageTime(item.latestMsgSendTime || null);
|
|
32
37
|
const unreadCount = (_a = item.unreadCount) !== null && _a !== void 0 ? _a : 0;
|
|
33
38
|
return (_jsxs("button", { type: "button", onClick: () => onClick(item), "data-testid": "biz-inbox-thread-card", className: "flex w-full shrink-0 items-start gap-2 border-b border-[#EFEFEF] bg-white p-3 text-left transition-colors hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-[#1677ff]", children: [_jsx(BizThreadAvatar, { chatCategory: item.chatCategory, displayName: displayName, avatarUrl: avatarUrl, badgeLabel: badgeLabel }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsxs("div", { className: "flex min-h-[25.6px] items-center justify-between gap-1", children: [_jsx("div", { className: "min-w-0 flex-1", children: _jsx(BizThreadTitle, { chatCategory: item.chatCategory, displayName: displayName, hasUnread: unreadCount > 0 }) }), latestMessageTime && (_jsx("span", { className: "shrink-0 text-[12px] font-normal leading-[160%] text-[#747B7E] [font-feature-settings:'liga'_off,'clig'_off]", children: latestMessageTime }))] }), _jsxs("div", { className: "flex items-center justify-between gap-2", children: [_jsx("p", { className: clsx("min-w-0 flex-1 truncate text-[14px] leading-[160%] [font-feature-settings:'liga'_off,'clig'_off]", unreadCount > 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/biz-thread-detail/BizMessageList.tsx"],"names":[],"mappings":"AAgBA,QAAA,MAAM,cAAc,+
|
|
1
|
+
{"version":3,"file":"BizMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/biz-thread-detail/BizMessageList.tsx"],"names":[],"mappings":"AAgBA,QAAA,MAAM,cAAc,+CA6EnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -9,22 +9,22 @@ import { useMessage } from "../../hooks/message/useMessage";
|
|
|
9
9
|
import { useMessageListScroll } from "../../hooks/message/useMessageListScroll";
|
|
10
10
|
import useBizConversationStore from "../../store/bizConversation";
|
|
11
11
|
import useConversationStore from "../../store/conversation";
|
|
12
|
-
import { ConnectStatus
|
|
12
|
+
import { ConnectStatus } from "../../types/chat";
|
|
13
13
|
import { isBizGroupChat } from "../../utils/bizConversation";
|
|
14
14
|
import emitter from "../../utils/events";
|
|
15
15
|
import BizMessageItem from "./item/BizMessageItem";
|
|
16
16
|
const BizMessageList = () => {
|
|
17
17
|
const { t } = useTranslation("biz-inbox");
|
|
18
|
-
const { user, connectStatus
|
|
18
|
+
const { user, connectStatus } = useChatContext();
|
|
19
19
|
const conversation = useBizConversationStore((state) => state.conversationData);
|
|
20
20
|
const selectedConversationId = useConversationStore((state) => state.selectedConversationId);
|
|
21
|
+
const conversationId = selectedConversationId || (conversation === null || conversation === void 0 ? void 0 : conversation.conversationId) || "";
|
|
21
22
|
const isGroupChat = conversation ? isBizGroupChat(conversation) : false;
|
|
22
|
-
const isSdkReady = connectStatus === ConnectStatus.Connected
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
const { scrollRef, loadMoreOldMessage, handleInfiniteScroll, scrollToBottomIfAtBottom, } = useMessageListScroll(Object.assign({ conversationId: selectedConversationId, userId: user === null || user === void 0 ? void 0 : user.userID }, messageController));
|
|
23
|
+
const isSdkReady = connectStatus === ConnectStatus.Connected;
|
|
24
|
+
const messageController = useMessage(conversationId, undefined, isSdkReady && !!conversationId);
|
|
25
|
+
const { scrollRef, loadMoreOldMessage, handleInfiniteScroll, scrollToBottomIfAtBottom, } = useMessageListScroll(Object.assign({ conversationId, userId: user === null || user === void 0 ? void 0 : user.userID }, messageController));
|
|
26
26
|
const { loadState, moreOldLoading } = messageController;
|
|
27
|
-
const isMessageLoading = !
|
|
27
|
+
const isMessageLoading = !conversationId || !isSdkReady || loadState.initLoading;
|
|
28
28
|
useEffect(() => {
|
|
29
29
|
emitter.on("BIZ_CHAT_SCROLL_TO_BOTTOM_IF_AT_BOTTOM", scrollToBottomIfAtBottom);
|
|
30
30
|
return () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BizThreadDetailInput.d.ts","sourceRoot":"","sources":["../../../src/components/biz-thread-detail/BizThreadDetailInput.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BizThreadDetailInput.d.ts","sourceRoot":"","sources":["../../../src/components/biz-thread-detail/BizThreadDetailInput.tsx"],"names":[],"mappings":"AAsBA,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,oBAAoB,GAAI,gDAI3B,yBAAyB,4CAiQ3B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -4,9 +4,12 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
|
4
4
|
import { useTranslation } from "react-i18next";
|
|
5
5
|
import clsx from "clsx";
|
|
6
6
|
import { Icon } from "../../components/icon";
|
|
7
|
-
import {
|
|
7
|
+
import { useSendMessage } from "../../hooks/message/useSendMessage";
|
|
8
|
+
import useAuthStore from "../../store/auth";
|
|
8
9
|
import useBizConversationStore from "../../store/bizConversation";
|
|
10
|
+
import useConversationStore from "../../store/conversation";
|
|
9
11
|
import useBizMessageDraftStore from "../../store/bizMessageDraft";
|
|
12
|
+
import { resolveBizAvatarUrl, resolveBizDisplayName, } from "../../utils/bizConversation";
|
|
10
13
|
import { emit } from "../../utils/events";
|
|
11
14
|
import { extractBizLinkUrls } from "../../utils/bizLink";
|
|
12
15
|
import BizLinkInputPreview from "./BizLinkInputPreview";
|
|
@@ -14,8 +17,28 @@ const MAX_LINES = 5;
|
|
|
14
17
|
const CONTAINER_MIN_HEIGHT = 48;
|
|
15
18
|
const BizThreadDetailInput = ({ placeholder, onSendMessage, onInputChange, }) => {
|
|
16
19
|
const { t } = useTranslation("biz-inbox");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
20
|
+
const bizConversation = useBizConversationStore((state) => state.conversationData);
|
|
21
|
+
const conversationData = useConversationStore((state) => state.conversationData);
|
|
22
|
+
const selectedConversationId = useConversationStore((state) => state.selectedConversationId);
|
|
23
|
+
const conversationId = selectedConversationId || (bizConversation === null || bizConversation === void 0 ? void 0 : bizConversation.conversationId) || "";
|
|
24
|
+
const isConversationReady = !!conversationData && (!!conversationData.userID || !!conversationData.groupID);
|
|
25
|
+
const sendMessageOptions = useMemo(() => ({
|
|
26
|
+
extractUrls: extractBizLinkUrls,
|
|
27
|
+
scrollEvent: "BIZ_CHAT_SCROLL_TO_BOTTOM_IF_AT_BOTTOM",
|
|
28
|
+
resolveOfflinePushMeta: () => ({
|
|
29
|
+
title: bizConversation
|
|
30
|
+
? resolveBizDisplayName(bizConversation, t)
|
|
31
|
+
: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
|
|
32
|
+
icon: (bizConversation && resolveBizAvatarUrl(bizConversation)) ||
|
|
33
|
+
(conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL) ||
|
|
34
|
+
"",
|
|
35
|
+
conversationId: (bizConversation === null || bizConversation === void 0 ? void 0 : bizConversation.conversationId) ||
|
|
36
|
+
(conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) ||
|
|
37
|
+
"",
|
|
38
|
+
}),
|
|
39
|
+
}), [bizConversation, conversationData, t]);
|
|
40
|
+
const { sendTextMessage } = useSendMessage(sendMessageOptions);
|
|
41
|
+
const userID = useAuthStore((state) => state.userID);
|
|
19
42
|
const setDraft = useBizMessageDraftStore((state) => state.setDraft);
|
|
20
43
|
const clearDraft = useBizMessageDraftStore((state) => state.clearDraft);
|
|
21
44
|
const containerRef = useRef(null);
|
|
@@ -32,7 +55,7 @@ const BizThreadDetailInput = ({ placeholder, onSendMessage, onInputChange, }) =>
|
|
|
32
55
|
useEffect(() => {
|
|
33
56
|
setPreviewDismissed(false);
|
|
34
57
|
}, [previewUrl]);
|
|
35
|
-
const canSend = value.trim().length > 0 && !isSending;
|
|
58
|
+
const canSend = value.trim().length > 0 && !isSending && isConversationReady;
|
|
36
59
|
const getTextareaHeights = useCallback(() => {
|
|
37
60
|
const textarea = textareaRef.current;
|
|
38
61
|
if (!textarea)
|
|
@@ -57,14 +80,14 @@ const BizThreadDetailInput = ({ placeholder, onSendMessage, onInputChange, }) =>
|
|
|
57
80
|
}, [getTextareaHeights]);
|
|
58
81
|
useEffect(() => {
|
|
59
82
|
var _a;
|
|
60
|
-
if (!conversationId) {
|
|
83
|
+
if (!conversationId || !userID) {
|
|
61
84
|
setValue("");
|
|
62
85
|
return;
|
|
63
86
|
}
|
|
64
|
-
const draft = (_a = useBizMessageDraftStore.getState().drafts[conversationId]) !== null && _a !== void 0 ? _a : "";
|
|
87
|
+
const draft = (_a = useBizMessageDraftStore.getState().drafts[`${userID}:${conversationId}`]) !== null && _a !== void 0 ? _a : "";
|
|
65
88
|
setValue(draft);
|
|
66
89
|
requestAnimationFrame(adjustTextareaHeight);
|
|
67
|
-
}, [conversationId, adjustTextareaHeight]);
|
|
90
|
+
}, [conversationId, userID, adjustTextareaHeight]);
|
|
68
91
|
useEffect(() => {
|
|
69
92
|
adjustTextareaHeight();
|
|
70
93
|
}, [value, adjustTextareaHeight]);
|
|
@@ -94,8 +117,8 @@ const BizThreadDetailInput = ({ placeholder, onSendMessage, onInputChange, }) =>
|
|
|
94
117
|
}, []);
|
|
95
118
|
const handleChange = (nextValue) => {
|
|
96
119
|
setValue(nextValue);
|
|
97
|
-
if (conversationId) {
|
|
98
|
-
setDraft(conversationId, nextValue);
|
|
120
|
+
if (conversationId && userID) {
|
|
121
|
+
setDraft(userID, conversationId, nextValue);
|
|
99
122
|
}
|
|
100
123
|
onInputChange === null || onInputChange === void 0 ? void 0 : onInputChange(nextValue);
|
|
101
124
|
};
|
|
@@ -109,13 +132,17 @@ const BizThreadDetailInput = ({ placeholder, onSendMessage, onInputChange, }) =>
|
|
|
109
132
|
onSendMessage(text);
|
|
110
133
|
}
|
|
111
134
|
else {
|
|
112
|
-
const sent = await sendTextMessage(
|
|
135
|
+
const sent = await sendTextMessage({
|
|
136
|
+
plainText: text,
|
|
137
|
+
richText: "",
|
|
138
|
+
isInternal: false,
|
|
139
|
+
});
|
|
113
140
|
if (!sent)
|
|
114
141
|
return;
|
|
115
142
|
}
|
|
116
143
|
setValue("");
|
|
117
|
-
if (conversationId) {
|
|
118
|
-
clearDraft(conversationId);
|
|
144
|
+
if (conversationId && userID) {
|
|
145
|
+
clearDraft(userID, conversationId);
|
|
119
146
|
}
|
|
120
147
|
requestAnimationFrame(adjustTextareaHeight);
|
|
121
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatContext.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,iBAAiB,EAGlB,MAAM,cAAc,CAAC;AAStB,eAAO,MAAM,WAAW,0CAOtB,CAAC;AAEH,eAAO,MAAM,cAAc,uBAAgC,CAAC;AAE5D,eAAO,MAAM,YAAY,GAAI,sBAAsB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatContext.tsx"],"names":[],"mappings":"AAEA,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,iBAAiB,EAGlB,MAAM,cAAc,CAAC;AAStB,eAAO,MAAM,WAAW,0CAOtB,CAAC;AAEH,eAAO,MAAM,cAAc,uBAAgC,CAAC;AAE5D,eAAO,MAAM,YAAY,GAAI,sBAAsB,iBAAiB,4CA2DnE,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export { useBizConversationList } from "./useBizConversationList";
|
|
2
2
|
export { useBizConversationListItems } from "./useBizConversationListItems";
|
|
3
3
|
export { useCreateBizConversation } from "./useCreateBizConversation";
|
|
4
|
-
export { useBizSendMessage } from "./useBizSendMessage";
|
|
5
4
|
export { useBizGlobalEvent } from "./useBizGlobalEvent";
|
|
6
5
|
export { useBizActiveConversation } from "./useBizActiveConversation";
|
|
7
6
|
export type { BizConversationListItem } from "./useBizConversationListItems";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC7E,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/hooks/biz/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { useBizConversationList } from "./useBizConversationList";
|
|
2
2
|
export { useBizConversationListItems } from "./useBizConversationListItems";
|
|
3
3
|
export { useCreateBizConversation } from "./useCreateBizConversation";
|
|
4
|
-
export { useBizSendMessage } from "./useBizSendMessage";
|
|
5
4
|
export { useBizGlobalEvent } from "./useBizGlobalEvent";
|
|
6
5
|
export { useBizActiveConversation } from "./useBizActiveConversation";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBizConversationListItems.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizConversationListItems.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBizConversationListItems.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizConversationListItems.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvD,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AA8BD,eAAO,MAAM,2BAA2B,GACtC,UAAU,mBAAmB,EAAE,KAC9B,uBAAuB,EAuBzB,CAAC"}
|
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
import { useMemo } from "react";
|
|
2
2
|
import useBizConversationStore from "../../store/bizConversation";
|
|
3
|
+
import { transformPulledMessage } from "../../utils/messageTransform";
|
|
4
|
+
const toLatestMsgPreview = (lastMessage) => {
|
|
5
|
+
if (!lastMessage)
|
|
6
|
+
return "";
|
|
7
|
+
return JSON.stringify(transformPulledMessage(lastMessage));
|
|
8
|
+
};
|
|
9
|
+
const resolveBizLatestPreview = (lastMessage, sdkConversation) => {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
const apiLatestMsgSendTime = (_a = lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.sendTime) !== null && _a !== void 0 ? _a : 0;
|
|
12
|
+
const apiLatestMsg = toLatestMsgPreview(lastMessage);
|
|
13
|
+
const sdkLatestMsgSendTime = (_b = sdkConversation === null || sdkConversation === void 0 ? void 0 : sdkConversation.latestMsgSendTime) !== null && _b !== void 0 ? _b : 0;
|
|
14
|
+
const sdkLatestMsg = (_c = sdkConversation === null || sdkConversation === void 0 ? void 0 : sdkConversation.latestMsg) !== null && _c !== void 0 ? _c : "";
|
|
15
|
+
const sdkIsNewer = sdkLatestMsgSendTime > apiLatestMsgSendTime;
|
|
16
|
+
if (sdkIsNewer) {
|
|
17
|
+
return {
|
|
18
|
+
latestMsg: sdkLatestMsg || apiLatestMsg,
|
|
19
|
+
latestMsgSendTime: sdkLatestMsgSendTime,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
latestMsg: apiLatestMsg || sdkLatestMsg,
|
|
24
|
+
latestMsgSendTime: apiLatestMsgSendTime || sdkLatestMsgSendTime,
|
|
25
|
+
};
|
|
26
|
+
};
|
|
3
27
|
export const useBizConversationListItems = (apiItems) => {
|
|
4
28
|
const sdkConversations = useBizConversationStore((state) => state.sdkConversations);
|
|
5
29
|
return useMemo(() => apiItems.map((item) => {
|
|
6
|
-
var _a
|
|
30
|
+
var _a;
|
|
7
31
|
const sdkConversation = sdkConversations[item.conversationId];
|
|
8
|
-
|
|
32
|
+
const { latestMsg, latestMsgSendTime } = resolveBizLatestPreview(item.lastMessage, sdkConversation);
|
|
33
|
+
return Object.assign(Object.assign({}, item), { latestMsg, unreadCount: (_a = sdkConversation === null || sdkConversation === void 0 ? void 0 : sdkConversation.unreadCount) !== null && _a !== void 0 ? _a : 0, latestMsgSendTime });
|
|
9
34
|
}), [apiItems, sdkConversations]);
|
|
10
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBizGlobalEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizGlobalEvent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBizGlobalEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizGlobalEvent.ts"],"names":[],"mappings":"AA2BA,eAAO,MAAM,iBAAiB,YA2C7B,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { useEffect } from "react";
|
|
2
2
|
import { CbEvents } from "@openim/wasm-client-sdk";
|
|
3
3
|
import { DChatSDK } from "../../constants/sdk";
|
|
4
|
+
import { useChatContext } from "../../context/ChatContext";
|
|
5
|
+
import { ConnectStatus } from "../../types/chat";
|
|
4
6
|
import useBizConversationStore from "../../store/bizConversation";
|
|
5
7
|
const CONVERSATION_SPLIT_COUNT = 500;
|
|
6
8
|
const fetchAllSdkConversations = async () => {
|
|
@@ -19,11 +21,20 @@ const fetchAllSdkConversations = async () => {
|
|
|
19
21
|
return conversations;
|
|
20
22
|
};
|
|
21
23
|
export const useBizGlobalEvent = () => {
|
|
24
|
+
const { connectStatus } = useChatContext();
|
|
22
25
|
const updateSdkConversations = useBizConversationStore((state) => state.updateSdkConversations);
|
|
23
26
|
useEffect(() => {
|
|
24
27
|
const conversationChangeHandler = ({ data, }) => {
|
|
25
28
|
updateSdkConversations(data);
|
|
26
29
|
};
|
|
30
|
+
DChatSDK.on(CbEvents.OnConversationChanged, conversationChangeHandler);
|
|
31
|
+
return () => {
|
|
32
|
+
DChatSDK.off(CbEvents.OnConversationChanged, conversationChangeHandler);
|
|
33
|
+
};
|
|
34
|
+
}, [updateSdkConversations]);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (connectStatus !== ConnectStatus.Connected)
|
|
37
|
+
return;
|
|
27
38
|
const bootstrapSdkConversations = async () => {
|
|
28
39
|
try {
|
|
29
40
|
const conversations = await fetchAllSdkConversations();
|
|
@@ -33,12 +44,13 @@ export const useBizGlobalEvent = () => {
|
|
|
33
44
|
console.error("bootstrapSdkConversations", error);
|
|
34
45
|
}
|
|
35
46
|
};
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
const onSyncFinish = () => {
|
|
48
|
+
void bootstrapSdkConversations();
|
|
49
|
+
};
|
|
50
|
+
DChatSDK.on(CbEvents.OnSyncServerFinish, onSyncFinish);
|
|
38
51
|
void bootstrapSdkConversations();
|
|
39
52
|
return () => {
|
|
40
|
-
DChatSDK.off(CbEvents.
|
|
41
|
-
DChatSDK.off(CbEvents.OnSyncServerFinish, bootstrapSdkConversations);
|
|
53
|
+
DChatSDK.off(CbEvents.OnSyncServerFinish, onSyncFinish);
|
|
42
54
|
};
|
|
43
|
-
}, [updateSdkConversations]);
|
|
55
|
+
}, [connectStatus, updateSdkConversations]);
|
|
44
56
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGlobalEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/global/useGlobalEvent.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"useGlobalEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/global/useGlobalEvent.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,cAAc,YAuT1B,CAAC"}
|
|
@@ -106,7 +106,6 @@ export const useGlobalEvent = () => {
|
|
|
106
106
|
});
|
|
107
107
|
};
|
|
108
108
|
const initStore = () => {
|
|
109
|
-
getSelfUserInfo();
|
|
110
109
|
getConversationListByReq(false);
|
|
111
110
|
};
|
|
112
111
|
const tryLogin = async () => {
|
|
@@ -122,10 +121,13 @@ export const useGlobalEvent = () => {
|
|
|
122
121
|
initStore();
|
|
123
122
|
}
|
|
124
123
|
catch (error) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
if (error.errCode === 10102) {
|
|
125
|
+
updateConnectStatus(ConnectStatus.Connected);
|
|
126
|
+
getSelfUserInfo();
|
|
127
|
+
initStore();
|
|
128
|
+
return;
|
|
128
129
|
}
|
|
130
|
+
console.error(error);
|
|
129
131
|
}
|
|
130
132
|
};
|
|
131
133
|
const loginCheck = async () => {
|
|
@@ -141,6 +143,7 @@ export const useGlobalEvent = () => {
|
|
|
141
143
|
};
|
|
142
144
|
const connectSuccessHandler = () => {
|
|
143
145
|
updateConnectStatus(ConnectStatus.Connected);
|
|
146
|
+
getSelfUserInfo();
|
|
144
147
|
};
|
|
145
148
|
const connectFailedHandler = () => {
|
|
146
149
|
updateConnectStatus(ConnectStatus.Disconnected);
|
|
@@ -13,13 +13,26 @@ export declare const createVideoMessageByFile: (file: VideoMsgParamsByFile) => P
|
|
|
13
13
|
export declare const createFileMessageByFile: (file: FileMsgParamsByFile) => Promise<MessageItem | null>;
|
|
14
14
|
export declare const createUrlTextMessage: (text: string, urls: string[]) => Promise<MessageItem | null>;
|
|
15
15
|
export declare const createQuoteMessage: (text: string, quotedMessage: MessageItem) => Promise<MessageItem | null>;
|
|
16
|
-
export
|
|
16
|
+
export type SendMessageScrollEvent = "CHAT_LIST_SCROLL_TO_BOTTOM" | "BIZ_CHAT_SCROLL_TO_BOTTOM_IF_AT_BOTTOM";
|
|
17
|
+
export interface OfflinePushMeta {
|
|
18
|
+
title: string;
|
|
19
|
+
icon: string;
|
|
20
|
+
conversationId: string;
|
|
21
|
+
}
|
|
22
|
+
export interface UseSendMessageOptions {
|
|
23
|
+
extractUrls?: (text: string) => string[];
|
|
24
|
+
scrollEvent?: SendMessageScrollEvent;
|
|
25
|
+
resolveOfflinePushMeta?: (params: {
|
|
26
|
+
desc: string;
|
|
27
|
+
}) => OfflinePushMeta;
|
|
28
|
+
}
|
|
29
|
+
export declare const useSendMessage: (options?: UseSendMessageOptions) => {
|
|
17
30
|
sendTextMessage: ({ plainText, richText, currentSession, isInternal, }: {
|
|
18
31
|
plainText: string;
|
|
19
32
|
richText: string;
|
|
20
33
|
currentSession?: ISessionResponse;
|
|
21
34
|
isInternal: boolean;
|
|
22
|
-
}) => Promise<
|
|
35
|
+
}) => Promise<boolean>;
|
|
23
36
|
sendMergeMessage: ({ richText, plainText, files, currentSession, isInternal, }: {
|
|
24
37
|
richText: string;
|
|
25
38
|
plainText: string;
|
|
@@ -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,oBAAoB,EACrB,MAAM,cAAc,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,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAUlC,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,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACzC,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;4EA+OvD;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;KACrB,KAAG,OAAO,CAAC,OAAO,CAAC;oFA4CjB;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,UAAU,EAAE,CAAC;QACpB,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;KACrB;mCApKqB,WAAW;CAqSpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,+BAGvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,KAWM,iBACN,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
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
|
-
import { useChatContext } from "../../context/ChatContext";
|
|
5
4
|
import { useCallback } from "react";
|
|
6
5
|
import { useQueryClient } from "@tanstack/react-query";
|
|
7
6
|
import { useTranslation } from "react-i18next";
|
|
@@ -103,14 +102,16 @@ export const createQuoteMessage = async (text, quotedMessage) => {
|
|
|
103
102
|
});
|
|
104
103
|
return textMessage;
|
|
105
104
|
};
|
|
106
|
-
export const useSendMessage = () => {
|
|
107
|
-
|
|
105
|
+
export const useSendMessage = (options) => {
|
|
106
|
+
var _a, _b;
|
|
108
107
|
const { t } = useTranslation("common");
|
|
109
108
|
const queryClient = useQueryClient();
|
|
110
109
|
const conversationData = useConversationStore((state) => state.conversationData);
|
|
111
110
|
const quotedMessage = useConversationStore((state) => state.quotedMessage);
|
|
112
111
|
const setQuotedMessage = useConversationStore((state) => state.setQuotedMessage);
|
|
113
112
|
const { userID: recvID, groupID } = conversationData || {};
|
|
113
|
+
const extractUrls = (_a = options === null || options === void 0 ? void 0 : options.extractUrls) !== null && _a !== void 0 ? _a : extractLinks;
|
|
114
|
+
const scrollEvent = (_b = options === null || options === void 0 ? void 0 : options.scrollEvent) !== null && _b !== void 0 ? _b : "CHAT_LIST_SCROLL_TO_BOTTOM";
|
|
114
115
|
const syncSessionAfterPublicMessage = useCallback(async (currentSession) => {
|
|
115
116
|
if (!(currentSession === null || currentSession === void 0 ? void 0 : currentSession.id)) {
|
|
116
117
|
return;
|
|
@@ -138,42 +139,58 @@ export const useSendMessage = () => {
|
|
|
138
139
|
}
|
|
139
140
|
}, [queryClient]);
|
|
140
141
|
const dispatchMessage = useCallback(async (message, currentSession) => {
|
|
141
|
-
var _a, _b;
|
|
142
|
+
var _a, _b, _c, _d;
|
|
142
143
|
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");
|
|
144
|
+
const pushMeta = (_c = (_b = options === null || options === void 0 ? void 0 : options.resolveOfflinePushMeta) === null || _b === void 0 ? void 0 : _b.call(options, { desc })) !== null && _c !== void 0 ? _c : {
|
|
145
|
+
title: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
|
|
146
|
+
icon: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL) || "",
|
|
147
|
+
conversationId: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "",
|
|
148
|
+
};
|
|
143
149
|
const { data: successMessage } = await DChatSDK.sendMessage({
|
|
144
150
|
recvID: recvID || "",
|
|
145
151
|
groupID: groupID || "",
|
|
146
152
|
message,
|
|
147
153
|
offlinePushInfo: {
|
|
148
|
-
title:
|
|
154
|
+
title: pushMeta.title,
|
|
149
155
|
desc,
|
|
150
156
|
ex: JSON.stringify({
|
|
151
|
-
icon:
|
|
152
|
-
conversationId:
|
|
153
|
-
title:
|
|
157
|
+
icon: pushMeta.icon,
|
|
158
|
+
conversationId: pushMeta.conversationId,
|
|
159
|
+
title: pushMeta.title,
|
|
154
160
|
desc,
|
|
155
161
|
}),
|
|
156
162
|
iOSPushSound: "default",
|
|
157
163
|
iOSBadgeCount: true,
|
|
158
164
|
},
|
|
159
165
|
});
|
|
160
|
-
updateOneMessage(Object.assign(Object.assign({}, successMessage), { ex: successMessage.ex || message.ex || "{}", isInternal: (
|
|
166
|
+
updateOneMessage(Object.assign(Object.assign({}, successMessage), { ex: successMessage.ex || message.ex || "{}", isInternal: (_d = successMessage.isInternal) !== null && _d !== void 0 ? _d : message.isInternal }));
|
|
161
167
|
if (!message.isInternal) {
|
|
162
168
|
await syncSessionAfterPublicMessage(currentSession);
|
|
163
169
|
}
|
|
164
170
|
messageFileStore.delete(message.clientMsgID);
|
|
165
|
-
}, [
|
|
171
|
+
}, [
|
|
172
|
+
groupID,
|
|
173
|
+
recvID,
|
|
174
|
+
syncSessionAfterPublicMessage,
|
|
175
|
+
t,
|
|
176
|
+
conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName,
|
|
177
|
+
conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL,
|
|
178
|
+
conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID,
|
|
179
|
+
options === null || options === void 0 ? void 0 : options.resolveOfflinePushMeta,
|
|
180
|
+
]);
|
|
166
181
|
const sendMessage = useCallback(async (message, currentSession) => {
|
|
167
182
|
pushNewMessage(message);
|
|
168
|
-
emit(
|
|
183
|
+
emit(scrollEvent);
|
|
169
184
|
try {
|
|
170
185
|
await dispatchMessage(message, currentSession);
|
|
186
|
+
return true;
|
|
171
187
|
}
|
|
172
188
|
catch (error) {
|
|
173
189
|
console.error("sendMessage", error);
|
|
174
190
|
updateOneMessage(Object.assign(Object.assign({}, message), { status: MessageStatus.Failed }));
|
|
191
|
+
return false;
|
|
175
192
|
}
|
|
176
|
-
}, [dispatchMessage]);
|
|
193
|
+
}, [dispatchMessage, scrollEvent]);
|
|
177
194
|
const resendMessage = useCallback(async (failedMessage) => {
|
|
178
195
|
var _a;
|
|
179
196
|
const storedFiles = messageFileStore.get(failedMessage.clientMsgID);
|
|
@@ -256,9 +273,9 @@ export const useSendMessage = () => {
|
|
|
256
273
|
await sendMessage(Object.assign(Object.assign({}, newPayload), { ex: failedMessage.ex }));
|
|
257
274
|
}, [sendMessage]);
|
|
258
275
|
const sendTextMessage = useCallback(async ({ plainText, richText, currentSession, isInternal, }) => {
|
|
259
|
-
if (!recvID && !groupID)
|
|
260
|
-
return;
|
|
261
|
-
const urls =
|
|
276
|
+
if (!conversationData || (!recvID && !groupID))
|
|
277
|
+
return false;
|
|
278
|
+
const urls = extractUrls(plainText);
|
|
262
279
|
const isUrlMessage = urls.length > 0;
|
|
263
280
|
let message = null;
|
|
264
281
|
if (!!(quotedMessage === null || quotedMessage === void 0 ? void 0 : quotedMessage.clientMsgID)) {
|
|
@@ -272,14 +289,22 @@ export const useSendMessage = () => {
|
|
|
272
289
|
message = await createTextMessage(plainText);
|
|
273
290
|
}
|
|
274
291
|
if (!message)
|
|
275
|
-
return;
|
|
292
|
+
return false;
|
|
276
293
|
const extendMessageInfo = generateExtendMessageInfo({
|
|
277
294
|
richText,
|
|
278
295
|
currentSession,
|
|
279
296
|
});
|
|
280
297
|
let messageItem = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}", isInternal });
|
|
281
|
-
sendMessage(messageItem, currentSession);
|
|
282
|
-
}, [
|
|
298
|
+
return sendMessage(messageItem, currentSession);
|
|
299
|
+
}, [
|
|
300
|
+
conversationData,
|
|
301
|
+
recvID,
|
|
302
|
+
groupID,
|
|
303
|
+
extractUrls,
|
|
304
|
+
sendMessage,
|
|
305
|
+
quotedMessage,
|
|
306
|
+
setQuotedMessage,
|
|
307
|
+
]);
|
|
283
308
|
const sendMergeMessage = useCallback(async ({ richText, plainText, files, currentSession, isInternal, }) => {
|
|
284
309
|
if (!recvID && !groupID)
|
|
285
310
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../src/hooks/user/useAuth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../../src/hooks/user/useAuth.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY;;CA4BxB,CAAC"}
|
|
@@ -2,13 +2,16 @@ import { Platform } from "@openim/wasm-client-sdk";
|
|
|
2
2
|
import { DChatSDK } from "../../constants/sdk";
|
|
3
3
|
import useAuthStore from "../../store/auth";
|
|
4
4
|
import useConversationStore from "../../store/conversation";
|
|
5
|
+
import useBizMessageDraftStore from "../../store/bizMessageDraft";
|
|
5
6
|
export const useDChatAuth = () => {
|
|
6
7
|
const initAuthStore = useAuthStore((state) => state.initAuthStore);
|
|
7
8
|
const resetConversationStore = useConversationStore((state) => state.resetConversationStore);
|
|
9
|
+
const clearAllDrafts = useBizMessageDraftStore((state) => state.clearAllDrafts);
|
|
8
10
|
const logout = async () => {
|
|
9
11
|
const res = await DChatSDK.logout();
|
|
10
12
|
const applicationType = useAuthStore.getState().applicationType;
|
|
11
13
|
resetConversationStore();
|
|
14
|
+
clearAllDrafts();
|
|
12
15
|
initAuthStore({
|
|
13
16
|
chatToken: "",
|
|
14
17
|
accessToken: "",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
interface BizMessageDraftStore {
|
|
2
2
|
drafts: Record<string, string>;
|
|
3
|
-
setDraft: (conversationId: string, text: string) => void;
|
|
4
|
-
clearDraft: (conversationId: string) => void;
|
|
3
|
+
setDraft: (userId: string, conversationId: string, text: string) => void;
|
|
4
|
+
clearDraft: (userId: string, conversationId: string) => void;
|
|
5
|
+
clearAllDrafts: () => void;
|
|
5
6
|
}
|
|
6
7
|
declare const useBizMessageDraftStore: import("zustand").UseBoundStore<import("zustand").StoreApi<BizMessageDraftStore>>;
|
|
7
8
|
export default useBizMessageDraftStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bizMessageDraft.d.ts","sourceRoot":"","sources":["../../src/store/bizMessageDraft.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bizMessageDraft.d.ts","sourceRoot":"","sources":["../../src/store/bizMessageDraft.ts"],"names":[],"mappings":"AAKA,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,QAAA,MAAM,uBAAuB,mFAkB1B,CAAC;AAEJ,eAAe,uBAAuB,CAAC"}
|