@droppii-org/chat-sdk 0.1.33 → 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.
Files changed (40) hide show
  1. package/dist/components/biz-inbox/BizThreadAvatar.d.ts.map +1 -1
  2. package/dist/components/biz-inbox/BizThreadAvatar.js +3 -0
  3. package/dist/components/biz-inbox/BizThreadCard.d.ts.map +1 -1
  4. package/dist/components/biz-inbox/BizThreadCard.js +7 -2
  5. package/dist/components/biz-thread-detail/BizLinkTextContent.js +1 -1
  6. package/dist/components/biz-thread-detail/BizMessageList.d.ts.map +1 -1
  7. package/dist/components/biz-thread-detail/BizMessageList.js +7 -7
  8. package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +1 -1
  9. package/dist/components/biz-thread-detail/BizThreadDetailInput.js +39 -12
  10. package/dist/context/ChatContext.d.ts.map +1 -1
  11. package/dist/context/ChatContext.js +2 -0
  12. package/dist/hooks/biz/index.d.ts +0 -1
  13. package/dist/hooks/biz/index.d.ts.map +1 -1
  14. package/dist/hooks/biz/index.js +0 -1
  15. package/dist/hooks/biz/useBizConversationListItems.d.ts.map +1 -1
  16. package/dist/hooks/biz/useBizConversationListItems.js +27 -2
  17. package/dist/hooks/biz/useBizGlobalEvent.d.ts.map +1 -1
  18. package/dist/hooks/biz/useBizGlobalEvent.js +17 -5
  19. package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
  20. package/dist/hooks/global/useGlobalEvent.js +7 -4
  21. package/dist/hooks/message/useSendMessage.d.ts +15 -2
  22. package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
  23. package/dist/hooks/message/useSendMessage.js +43 -18
  24. package/dist/hooks/user/useAuth.d.ts.map +1 -1
  25. package/dist/hooks/user/useAuth.js +3 -0
  26. package/dist/store/bizMessageDraft.d.ts +3 -2
  27. package/dist/store/bizMessageDraft.d.ts.map +1 -1
  28. package/dist/store/bizMessageDraft.js +19 -7
  29. package/dist/styles/global.css +1 -1
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/dist/types/biz.d.ts +2 -1
  32. package/dist/types/biz.d.ts.map +1 -1
  33. package/dist/types/biz.js +1 -0
  34. package/dist/utils/bizConversation.d.ts +1 -0
  35. package/dist/utils/bizConversation.d.ts.map +1 -1
  36. package/dist/utils/bizConversation.js +15 -8
  37. package/dist/utils/bizMessage.d.ts +4 -1
  38. package/dist/utils/bizMessage.d.ts.map +1 -1
  39. package/dist/utils/bizMessage.js +10 -7
  40. 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,4CAwCtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
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":"AAIA,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;AAuBD,QAAA,MAAM,aAAa,GAAI,mBAAmB,kBAAkB,4CA+D3D,CAAC;AAEF,eAAe,aAAa,CAAC"}
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
- return formatTimestamp(sendTime, { hasTime: true });
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, isBizGroupChat(item));
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
@@ -6,6 +6,6 @@ import { openBizLink } from "../../utils/openBizLink";
6
6
  const BizLinkTextContent = ({ text }) => {
7
7
  const { t } = useTranslation("biz-inbox");
8
8
  const segments = parseBizTextWithLinks(text);
9
- return (_jsx("span", { className: "whitespace-pre-wrap break-words text-[16px] leading-[160%] tracking-[0.16px] text-[#393E40]", children: segments.map((segment, index) => segment.type === "link" ? (_jsx("button", { type: "button", onClick: () => openBizLink(segment.url, t), className: "inline font-medium text-[#1B3FE4] underline-offset-2 hover:underline", children: segment.value }, `${segment.url}-${index}`)) : (_jsx("span", { children: segment.value }, `text-${index}`))) }));
9
+ return (_jsx("span", { className: "min-w-0 whitespace-pre-wrap text-left [overflow-wrap:anywhere] text-[16px] leading-[160%] tracking-[0.16px] text-[#393E40]", children: segments.map((segment, index) => segment.type === "link" ? (_jsx("button", { type: "button", onClick: () => openBizLink(segment.url, t), className: "inline text-left font-medium text-[#1B3FE4] underline-offset-2 hover:underline", children: segment.value }, `${segment.url}-${index}`)) : (_jsx("span", { children: segment.value }, `text-${index}`))) }));
10
10
  };
11
11
  export default BizLinkTextContent;
@@ -1 +1 @@
1
- {"version":3,"file":"BizMessageList.d.ts","sourceRoot":"","sources":["../../../src/components/biz-thread-detail/BizMessageList.tsx"],"names":[],"mappings":"AAgBA,QAAA,MAAM,cAAc,+CA8EnB,CAAC;AAEF,eAAe,cAAc,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, SyncStatus } from "../../types/chat";
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, syncStatus } = useChatContext();
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
- syncStatus !== SyncStatus.Loading;
24
- const messageController = useMessage(selectedConversationId, undefined, isSdkReady && !!selectedConversationId);
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 = !isSdkReady || !selectedConversationId || loadState.initLoading;
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":"AAgBA,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,4CA0N3B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
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 { useBizSendMessage } from "../../hooks/biz/useBizSendMessage";
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 { sendTextMessage } = useBizSendMessage();
18
- const conversationId = useBizConversationStore((state) => { var _a; return (_a = state.conversationData) === null || _a === void 0 ? void 0 : _a.conversationId; });
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(text);
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,4CA0DnE,CAAC"}
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"}
@@ -29,6 +29,8 @@ export const ChatProvider = ({ children, config }) => {
29
29
  setUser(data);
30
30
  })
31
31
  .catch(({ errCode, errMsg }) => {
32
+ if (errCode === 100)
33
+ return;
32
34
  console.error("getSelfUserInfo", errCode, errMsg);
33
35
  });
34
36
  };
@@ -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,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"}
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"}
@@ -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":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,2BAA2B,GACtC,UAAU,mBAAmB,EAAE,KAC9B,uBAAuB,EAmBzB,CAAC"}
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, _b, _c;
30
+ var _a;
7
31
  const sdkConversation = sdkConversations[item.conversationId];
8
- return Object.assign(Object.assign({}, item), { latestMsg: (_a = sdkConversation === null || sdkConversation === void 0 ? void 0 : sdkConversation.latestMsg) !== null && _a !== void 0 ? _a : "", unreadCount: (_b = sdkConversation === null || sdkConversation === void 0 ? void 0 : sdkConversation.unreadCount) !== null && _b !== void 0 ? _b : 0, latestMsgSendTime: (_c = sdkConversation === null || sdkConversation === void 0 ? void 0 : sdkConversation.latestMsgSendTime) !== null && _c !== void 0 ? _c : 0 });
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":"AAyBA,eAAO,MAAM,iBAAiB,YA8B7B,CAAC"}
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
- DChatSDK.on(CbEvents.OnConversationChanged, conversationChangeHandler);
37
- DChatSDK.on(CbEvents.OnSyncServerFinish, bootstrapSdkConversations);
47
+ const onSyncFinish = () => {
48
+ void bootstrapSdkConversations();
49
+ };
50
+ DChatSDK.on(CbEvents.OnSyncServerFinish, onSyncFinish);
38
51
  void bootstrapSdkConversations();
39
52
  return () => {
40
- DChatSDK.off(CbEvents.OnConversationChanged, conversationChangeHandler);
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,YAoT1B,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
- console.error(error);
126
- if (error.errCode !== 10102) {
127
- //user has logged in
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 declare const useSendMessage: () => {
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<void>;
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;AAYtB,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,eAAO,MAAM,cAAc;4EA0NpB;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,gBAAgB,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;KACrB;oFAoCE;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;mCA5JqB,WAAW;CA6RpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,+BAGvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,KAWM,iBACN,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
- const { user } = useChatContext();
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: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
154
+ title: pushMeta.title,
149
155
  desc,
150
156
  ex: JSON.stringify({
151
- icon: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL) || "",
152
- conversationId: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID) || "",
153
- title: (conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName) || "Droppii Chat",
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: (_b = successMessage.isInternal) !== null && _b !== void 0 ? _b : message.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
- }, [groupID, recvID, syncSessionAfterPublicMessage, t, conversationData === null || conversationData === void 0 ? void 0 : conversationData.showName, conversationData === null || conversationData === void 0 ? void 0 : conversationData.faceURL, conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationID]);
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("CHAT_LIST_SCROLL_TO_BOTTOM");
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 = extractLinks(plainText);
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
- }, [recvID, groupID, user, sendMessage, quotedMessage, setQuotedMessage]);
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":"AAKA,eAAO,MAAM,YAAY;;CAwBxB,CAAC"}
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":"AAEA,UAAU,oBAAoB;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,QAAA,MAAM,uBAAuB,mFAW1B,CAAC;AAEJ,eAAe,uBAAuB,CAAC"}
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"}