@droppii-org/chat-sdk 0.1.29 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/svg/index.ts +1 -1
- package/dist/components/biz-inbox/BizThreadAvatar.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadAvatar.js +6 -1
- package/dist/components/biz-inbox/BizThreadCard.d.ts +3 -3
- package/dist/components/biz-inbox/BizThreadCard.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadCard.js +20 -8
- package/dist/components/biz-inbox/BizThreadList.d.ts +5 -4
- package/dist/components/biz-inbox/BizThreadList.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadList.js +29 -6
- package/dist/components/biz-inbox/BizThreadTitle.d.ts +2 -1
- package/dist/components/biz-inbox/BizThreadTitle.d.ts.map +1 -1
- package/dist/components/biz-inbox/BizThreadTitle.js +2 -1
- package/dist/components/biz-thread-detail/BizLinkInputPreview.d.ts +7 -0
- package/dist/components/biz-thread-detail/BizLinkInputPreview.d.ts.map +1 -0
- package/dist/components/biz-thread-detail/BizLinkInputPreview.js +16 -0
- package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts +6 -0
- package/dist/components/biz-thread-detail/BizLinkMessageCard.d.ts.map +1 -0
- package/dist/components/biz-thread-detail/BizLinkMessageCard.js +21 -0
- package/dist/components/biz-thread-detail/BizLinkTextContent.d.ts +6 -0
- package/dist/components/biz-thread-detail/BizLinkTextContent.d.ts.map +1 -0
- package/dist/components/biz-thread-detail/BizLinkTextContent.js +11 -0
- package/dist/components/biz-thread-detail/BizMessageBubble.d.ts +2 -1
- package/dist/components/biz-thread-detail/BizMessageBubble.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizMessageBubble.js +1 -1
- package/dist/components/biz-thread-detail/BizMessageContent.d.ts +7 -0
- package/dist/components/biz-thread-detail/BizMessageContent.d.ts.map +1 -0
- package/dist/components/biz-thread-detail/BizMessageContent.js +23 -0
- package/dist/components/biz-thread-detail/BizMessageList.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizMessageList.js +15 -7
- package/dist/components/biz-thread-detail/BizThreadDetailHeader.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizThreadDetailHeader.js +3 -4
- package/dist/components/biz-thread-detail/BizThreadDetailInput.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/BizThreadDetailInput.js +15 -4
- package/dist/components/biz-thread-detail/item/BizMessageItem.d.ts +2 -1
- package/dist/components/biz-thread-detail/item/BizMessageItem.d.ts.map +1 -1
- package/dist/components/biz-thread-detail/item/BizMessageItem.js +13 -6
- package/dist/components/message/MessageInfiniteScroll.d.ts +2 -1
- package/dist/components/message/MessageInfiniteScroll.d.ts.map +1 -1
- package/dist/components/message/MessageInfiniteScroll.js +2 -15
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +2 -2
- package/dist/hooks/biz/index.d.ts +4 -0
- package/dist/hooks/biz/index.d.ts.map +1 -1
- package/dist/hooks/biz/index.js +3 -0
- package/dist/hooks/biz/useBizActiveConversation.d.ts +3 -0
- package/dist/hooks/biz/useBizActiveConversation.d.ts.map +1 -0
- package/dist/hooks/biz/useBizActiveConversation.js +59 -0
- package/dist/hooks/biz/useBizConversationList.d.ts +3 -2
- package/dist/hooks/biz/useBizConversationList.d.ts.map +1 -1
- package/dist/hooks/biz/useBizConversationList.js +4 -1
- package/dist/hooks/biz/useBizConversationListItems.d.ts +8 -0
- package/dist/hooks/biz/useBizConversationListItems.d.ts.map +1 -0
- package/dist/hooks/biz/useBizConversationListItems.js +10 -0
- package/dist/hooks/biz/useBizGlobalEvent.d.ts +2 -0
- package/dist/hooks/biz/useBizGlobalEvent.d.ts.map +1 -0
- package/dist/hooks/biz/useBizGlobalEvent.js +44 -0
- package/dist/hooks/biz/useBizSendMessage.d.ts.map +1 -1
- package/dist/hooks/biz/useBizSendMessage.js +13 -8
- package/dist/hooks/common/useFetchUrlMetadata.d.ts +9 -0
- package/dist/hooks/common/useFetchUrlMetadata.d.ts.map +1 -0
- package/dist/hooks/common/useFetchUrlMetadata.js +21 -0
- package/dist/hooks/message/useMessageListScroll.d.ts.map +1 -1
- package/dist/hooks/message/useMessageListScroll.js +10 -0
- package/dist/locales/vi/biz-inbox.json +7 -1
- package/dist/screens/biz-message/index.d.ts.map +1 -1
- package/dist/screens/biz-message/index.js +7 -28
- package/dist/services/query.d.ts +1 -0
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +1 -0
- package/dist/services/routes.d.ts +1 -0
- package/dist/services/routes.d.ts.map +1 -1
- package/dist/services/routes.js +1 -0
- package/dist/store/bizConversation.d.ts +4 -0
- package/dist/store/bizConversation.d.ts.map +1 -1
- package/dist/store/bizConversation.js +9 -0
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/biz.d.ts +5 -2
- package/dist/types/biz.d.ts.map +1 -1
- package/dist/types/biz.js +2 -0
- package/dist/utils/bizConversation.d.ts +3 -5
- package/dist/utils/bizConversation.d.ts.map +1 -1
- package/dist/utils/bizConversation.js +18 -40
- package/dist/utils/bizLink.d.ts +13 -0
- package/dist/utils/bizLink.d.ts.map +1 -0
- package/dist/utils/bizLink.js +77 -0
- package/dist/utils/bizMessage.d.ts +8 -2
- package/dist/utils/bizMessage.d.ts.map +1 -1
- package/dist/utils/bizMessage.js +64 -4
- package/dist/utils/openBizLink.d.ts +3 -0
- package/dist/utils/openBizLink.d.ts.map +1 -0
- package/dist/utils/openBizLink.js +18 -0
- package/package.json +127 -126
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInfiniteScroll.d.ts","sourceRoot":"","sources":["../../../src/components/message/MessageInfiniteScroll.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageInfiniteScroll.d.ts","sourceRoot":"","sources":["../../../src/components/message/MessageInfiniteScroll.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,oBAAoB,CAAC;IAChC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACrD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,QAAA,MAAM,qBAAqB,GAAI,6HAU5B,0BAA0B,4CAoC5B,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|
|
@@ -1,20 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { Spin } from "antd";
|
|
4
|
+
import clsx from "clsx";
|
|
4
5
|
import InfiniteScroll from "react-infinite-scroll-component";
|
|
5
|
-
const
|
|
6
|
-
height: "100%",
|
|
7
|
-
overflowY: "auto",
|
|
8
|
-
overflowX: "hidden",
|
|
9
|
-
display: "flex",
|
|
10
|
-
flexDirection: "column-reverse",
|
|
11
|
-
paddingBottom: 12,
|
|
12
|
-
};
|
|
13
|
-
const infiniteScrollStyle = {
|
|
14
|
-
display: "flex",
|
|
15
|
-
flexDirection: "column-reverse",
|
|
16
|
-
minWidth: 0,
|
|
17
|
-
width: "100%",
|
|
18
|
-
};
|
|
19
|
-
const MessageInfiniteScroll = ({ scrollRef, scrollableTargetId, loadState, onLoadMoreOld, onScroll, children, empty, containerClassName, }) => (_jsx("div", { id: scrollableTargetId, ref: scrollRef, className: containerClassName, style: scrollContainerStyle, children: empty && loadState.messageList.length === 0 ? (empty) : (_jsx(InfiniteScroll, { dataLength: loadState.messageList.length, next: onLoadMoreOld, style: infiniteScrollStyle, inverse: true, hasMore: loadState.hasMoreOld, loader: _jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) }), scrollableTarget: scrollableTargetId, onScroll: (e) => onScroll(e), children: children })) }));
|
|
6
|
+
const MessageInfiniteScroll = ({ scrollRef, scrollableTargetId, loadState, moreOldLoading = false, onLoadMoreOld, onScroll, children, empty, containerClassName, }) => (_jsx("div", { id: scrollableTargetId, ref: scrollRef, className: clsx("flex h-full flex-col-reverse overflow-x-hidden overflow-y-auto pb-3", containerClassName), children: empty && loadState.messageList.length === 0 ? (empty) : (_jsx(InfiniteScroll, { dataLength: loadState.messageList.length, next: onLoadMoreOld, className: "flex w-full min-w-0 flex-col-reverse", inverse: true, hasMore: loadState.hasMoreOld, loader: moreOldLoading ? (_jsx("div", { className: "flex w-full items-center justify-center py-2", children: _jsx(Spin, { size: "small" }) })) : (_jsx("span", { className: "sr-only" })), scrollableTarget: scrollableTargetId, onScroll: (e) => onScroll(e), children: children })) }));
|
|
20
7
|
export default MessageInfiniteScroll;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/message/MessageList.tsx"],"names":[],"mappings":"AA2BA,UAAU,gBAAgB;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,QAAA,MAAM,WAAW,GAAI,OAAO,gBAAgB,
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/message/MessageList.tsx"],"names":[],"mappings":"AA2BA,UAAU,gBAAgB;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;CACpC;AAED,QAAA,MAAM,WAAW,GAAI,OAAO,gBAAgB,4CAqQ3C,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -49,7 +49,7 @@ const MessageList = (props) => {
|
|
|
49
49
|
restrictToLastSession: shouldRestrictToLastSession,
|
|
50
50
|
customerUserID,
|
|
51
51
|
});
|
|
52
|
-
const { loadState, moreNewLoading } = messageController;
|
|
52
|
+
const { loadState, moreOldLoading, moreNewLoading } = messageController;
|
|
53
53
|
const { scrollRef, loadMoreOldMessage, handleInfiniteScroll, scrollToBottom } = useMessageListScroll(Object.assign({ conversationId, userId: user === null || user === void 0 ? void 0 : user.userID }, messageController));
|
|
54
54
|
const handleOpenRevoke = useCallback((clientMsgID) => {
|
|
55
55
|
setSelectedItem(clientMsgID);
|
|
@@ -135,6 +135,6 @@ const MessageList = (props) => {
|
|
|
135
135
|
backgroundSize: "cover",
|
|
136
136
|
backgroundPosition: "center",
|
|
137
137
|
overflowX: "hidden",
|
|
138
|
-
}, children: [_jsx(MessageHeader, { onClose: onClose, currentSession: latestConversationSession, isJoined: isJoined }), _jsx(MessageInfiniteScroll, { scrollRef: scrollRef, scrollableTargetId: "scrollableMessagesDiv", loadState: loadState, onLoadMoreOld: loadMoreOldMessage, onScroll: handleInfiniteScroll, children: loadState.messageList.map((message, _, array) => (_jsx(MessageItem, { message: message, allMessages: array, contextMenuOpen: openMenuId === message.clientMsgID, onContextMenuOpenChange: (open) => setOpenMenuId(open ? message.clientMsgID : null), onRevokeMessage: handleOpenRevoke, onQuoteMessage: setQuotedMessage, onPressQuoteMessage: onPressQuoteMessage }, message.clientMsgID))) }), moreNewLoading && (_jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) })), isCheckingMembership ? (_jsx("div", { className: "border-t bg-white py-4 flex items-center justify-center", children: _jsx(Spin, {}) })) : (latestConversationSession === null || latestConversationSession === void 0 ? void 0 : latestConversationSession.status) === SessionStatus.UNASSIGNED ? (_jsx(UnassignedSessionFooter, { sessionId: latestConversationSession.id, teamId: latestConversationSession.teamId })) : shouldRestrictToLastSession ? (_jsxs("div", { className: "border-t bg-white py-4 flex flex-col items-center gap-2", children: [_jsx("p", { className: "text-sm text-gray-500", children: t("join_group_required") }), _jsx(Button, { type: "primary", onClick: joinGroup, loading: isJoining, children: t("join_group") })] })) : (_jsx(MessageFooter, { currentSession: latestConversationSession, openCreateCannedModal: openCreateCannedModal })), _jsx(Modal, { centered: true, open: showConfirmRevoke, onOk: onRevokeMessage, onCancel: handleCloseRevoke, title: t("revoke_message_confirm_title"), okText: t("revoke"), cancelText: t("cancel"), okType: "danger", confirmLoading: isRevoking, getContainer: false, forceRender: true, children: _jsx("p", { children: t("revoke_message_confirm_message") }) })] }));
|
|
138
|
+
}, children: [_jsx(MessageHeader, { onClose: onClose, currentSession: latestConversationSession, isJoined: isJoined }), _jsx(MessageInfiniteScroll, { scrollRef: scrollRef, scrollableTargetId: "scrollableMessagesDiv", loadState: loadState, moreOldLoading: moreOldLoading, onLoadMoreOld: loadMoreOldMessage, onScroll: handleInfiniteScroll, children: loadState.messageList.map((message, _, array) => (_jsx(MessageItem, { message: message, allMessages: array, contextMenuOpen: openMenuId === message.clientMsgID, onContextMenuOpenChange: (open) => setOpenMenuId(open ? message.clientMsgID : null), onRevokeMessage: handleOpenRevoke, onQuoteMessage: setQuotedMessage, onPressQuoteMessage: onPressQuoteMessage }, message.clientMsgID))) }), moreNewLoading && (_jsx("div", { className: "flex items-center justify-center py-2", children: _jsx(Spin, {}) })), isCheckingMembership ? (_jsx("div", { className: "border-t bg-white py-4 flex items-center justify-center", children: _jsx(Spin, {}) })) : (latestConversationSession === null || latestConversationSession === void 0 ? void 0 : latestConversationSession.status) === SessionStatus.UNASSIGNED ? (_jsx(UnassignedSessionFooter, { sessionId: latestConversationSession.id, teamId: latestConversationSession.teamId })) : shouldRestrictToLastSession ? (_jsxs("div", { className: "border-t bg-white py-4 flex flex-col items-center gap-2", children: [_jsx("p", { className: "text-sm text-gray-500", children: t("join_group_required") }), _jsx(Button, { type: "primary", onClick: joinGroup, loading: isJoining, children: t("join_group") })] })) : (_jsx(MessageFooter, { currentSession: latestConversationSession, openCreateCannedModal: openCreateCannedModal })), _jsx(Modal, { centered: true, open: showConfirmRevoke, onOk: onRevokeMessage, onCancel: handleCloseRevoke, title: t("revoke_message_confirm_title"), okText: t("revoke"), cancelText: t("cancel"), okType: "danger", confirmLoading: isRevoking, getContainer: false, forceRender: true, children: _jsx("p", { children: t("revoke_message_confirm_message") }) })] }));
|
|
139
139
|
};
|
|
140
140
|
export default MessageList;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export { useBizConversationList } from "./useBizConversationList";
|
|
2
|
+
export { useBizConversationListItems } from "./useBizConversationListItems";
|
|
2
3
|
export { useCreateBizConversation } from "./useCreateBizConversation";
|
|
3
4
|
export { useBizSendMessage } from "./useBizSendMessage";
|
|
5
|
+
export { useBizGlobalEvent } from "./useBizGlobalEvent";
|
|
6
|
+
export { useBizActiveConversation } from "./useBizActiveConversation";
|
|
7
|
+
export type { BizConversationListItem } from "./useBizConversationListItems";
|
|
4
8
|
export type { CreateBizConversationInput } from "./useCreateBizConversation";
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,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,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,3 +1,6 @@
|
|
|
1
1
|
export { useBizConversationList } from "./useBizConversationList";
|
|
2
|
+
export { useBizConversationListItems } from "./useBizConversationListItems";
|
|
2
3
|
export { useCreateBizConversation } from "./useCreateBizConversation";
|
|
3
4
|
export { useBizSendMessage } from "./useBizSendMessage";
|
|
5
|
+
export { useBizGlobalEvent } from "./useBizGlobalEvent";
|
|
6
|
+
export { useBizActiveConversation } from "./useBizActiveConversation";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBizActiveConversation.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizActiveConversation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAE7E,eAAO,MAAM,wBAAwB,GACnC,mBAAmB,uBAAuB,EAAE,SAwE7C,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { useSearchParams } from "next/navigation";
|
|
3
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
4
|
+
import { useChatContext } from "../../context/ChatContext";
|
|
5
|
+
import { ConnectStatus } from "../../types/chat";
|
|
6
|
+
import useBizConversationStore from "../../store/bizConversation";
|
|
7
|
+
import useConversationStore from "../../store/conversation";
|
|
8
|
+
export const useBizActiveConversation = (conversationItems) => {
|
|
9
|
+
const searchParams = useSearchParams();
|
|
10
|
+
const threadId = searchParams.get("threadId");
|
|
11
|
+
const { connectStatus } = useChatContext();
|
|
12
|
+
const sdkConversations = useBizConversationStore((state) => state.sdkConversations);
|
|
13
|
+
const selectConversation = useBizConversationStore((state) => state.selectConversation);
|
|
14
|
+
const clearBizConversation = useBizConversationStore((state) => state.clearSelectedConversation);
|
|
15
|
+
const setSelectedConversationId = useConversationStore((state) => state.setSelectedConversationId);
|
|
16
|
+
const setConversationData = useConversationStore((state) => state.setConversationData);
|
|
17
|
+
const clearSdkConversation = useConversationStore((state) => state.clearSelectedConversation);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (!threadId) {
|
|
20
|
+
clearBizConversation();
|
|
21
|
+
clearSdkConversation();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
setSelectedConversationId(threadId);
|
|
25
|
+
const currentBizData = useBizConversationStore.getState().conversationData;
|
|
26
|
+
if ((currentBizData === null || currentBizData === void 0 ? void 0 : currentBizData.conversationId) !== threadId) {
|
|
27
|
+
const matchedThread = conversationItems.find((item) => item.conversationId === threadId);
|
|
28
|
+
if (matchedThread) {
|
|
29
|
+
selectConversation(matchedThread);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (connectStatus !== ConnectStatus.Connected)
|
|
33
|
+
return;
|
|
34
|
+
const cachedConversation = sdkConversations[threadId];
|
|
35
|
+
if (cachedConversation) {
|
|
36
|
+
setConversationData(cachedConversation);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
DChatSDK.getMultipleConversation([threadId])
|
|
40
|
+
.then((res) => {
|
|
41
|
+
if (res.data.length > 0) {
|
|
42
|
+
setConversationData(res.data[0]);
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
.catch((error) => {
|
|
46
|
+
console.error("getMultipleConversation", error);
|
|
47
|
+
});
|
|
48
|
+
}, [
|
|
49
|
+
threadId,
|
|
50
|
+
conversationItems,
|
|
51
|
+
sdkConversations,
|
|
52
|
+
connectStatus,
|
|
53
|
+
selectConversation,
|
|
54
|
+
clearBizConversation,
|
|
55
|
+
clearSdkConversation,
|
|
56
|
+
setSelectedConversationId,
|
|
57
|
+
setConversationData,
|
|
58
|
+
]);
|
|
59
|
+
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type BizConversationListItem } from "./useBizConversationListItems";
|
|
2
2
|
interface UseBizConversationListParams {
|
|
3
3
|
enabled: boolean;
|
|
4
4
|
pageSize?: number;
|
|
5
5
|
}
|
|
6
6
|
interface UseBizConversationListResult {
|
|
7
|
-
items:
|
|
7
|
+
items: BizConversationListItem[];
|
|
8
|
+
isLoading: boolean;
|
|
8
9
|
isFetchingNextPage: boolean;
|
|
9
10
|
hasNextPage: boolean;
|
|
10
11
|
fetchNextPage: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBizConversationList.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizConversationList.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBizConversationList.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizConversationList.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,+BAA+B,CAAC;AAEvC,UAAU,4BAA4B;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,uBAAuB,EAAE,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,4BAA4B,KACnC,4BA+CF,CAAC"}
|
|
@@ -5,6 +5,7 @@ import { ENDPOINTS } from "../../services/routes";
|
|
|
5
5
|
import { QUERY_KEYS } from "../../services/query";
|
|
6
6
|
import { PAGE_SIZE } from "../../constants";
|
|
7
7
|
import { DChatApplicationType } from "../../types/chat";
|
|
8
|
+
import { useBizConversationListItems, } from "./useBizConversationListItems";
|
|
8
9
|
export const useBizConversationList = (params) => {
|
|
9
10
|
var _a, _b, _c;
|
|
10
11
|
const applicationType = useAuthStore((state) => state.applicationType);
|
|
@@ -33,9 +34,11 @@ export const useBizConversationList = (params) => {
|
|
|
33
34
|
return pageNumber + 1;
|
|
34
35
|
},
|
|
35
36
|
});
|
|
36
|
-
const
|
|
37
|
+
const apiItems = ((_c = (_b = query.data) === null || _b === void 0 ? void 0 : _b.pages) !== null && _c !== void 0 ? _c : []).flatMap((page) => page.data);
|
|
38
|
+
const items = useBizConversationListItems(apiItems);
|
|
37
39
|
return {
|
|
38
40
|
items,
|
|
41
|
+
isLoading: query.isLoading,
|
|
39
42
|
isFetchingNextPage: query.isFetchingNextPage,
|
|
40
43
|
hasNextPage: !!query.hasNextPage,
|
|
41
44
|
fetchNextPage: () => {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BizConversationItem } from "../../types/biz";
|
|
2
|
+
export interface BizConversationListItem extends BizConversationItem {
|
|
3
|
+
latestMsg: string;
|
|
4
|
+
unreadCount: number;
|
|
5
|
+
latestMsgSendTime: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const useBizConversationListItems: (apiItems: BizConversationItem[]) => BizConversationListItem[];
|
|
8
|
+
//# sourceMappingURL=useBizConversationListItems.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import useBizConversationStore from "../../store/bizConversation";
|
|
3
|
+
export const useBizConversationListItems = (apiItems) => {
|
|
4
|
+
const sdkConversations = useBizConversationStore((state) => state.sdkConversations);
|
|
5
|
+
return useMemo(() => apiItems.map((item) => {
|
|
6
|
+
var _a, _b, _c;
|
|
7
|
+
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 });
|
|
9
|
+
}), [apiItems, sdkConversations]);
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBizGlobalEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizGlobalEvent.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,iBAAiB,YA8B7B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import { CbEvents } from "@openim/wasm-client-sdk";
|
|
3
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
4
|
+
import useBizConversationStore from "../../store/bizConversation";
|
|
5
|
+
const CONVERSATION_SPLIT_COUNT = 500;
|
|
6
|
+
const fetchAllSdkConversations = async () => {
|
|
7
|
+
const conversations = [];
|
|
8
|
+
let offset = 0;
|
|
9
|
+
while (true) {
|
|
10
|
+
const { data } = await DChatSDK.getConversationListSplit({
|
|
11
|
+
offset,
|
|
12
|
+
count: CONVERSATION_SPLIT_COUNT,
|
|
13
|
+
});
|
|
14
|
+
conversations.push(...data);
|
|
15
|
+
if (data.length < CONVERSATION_SPLIT_COUNT)
|
|
16
|
+
break;
|
|
17
|
+
offset += data.length;
|
|
18
|
+
}
|
|
19
|
+
return conversations;
|
|
20
|
+
};
|
|
21
|
+
export const useBizGlobalEvent = () => {
|
|
22
|
+
const updateSdkConversations = useBizConversationStore((state) => state.updateSdkConversations);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
const conversationChangeHandler = ({ data, }) => {
|
|
25
|
+
updateSdkConversations(data);
|
|
26
|
+
};
|
|
27
|
+
const bootstrapSdkConversations = async () => {
|
|
28
|
+
try {
|
|
29
|
+
const conversations = await fetchAllSdkConversations();
|
|
30
|
+
updateSdkConversations(conversations);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error("bootstrapSdkConversations", error);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
DChatSDK.on(CbEvents.OnConversationChanged, conversationChangeHandler);
|
|
37
|
+
DChatSDK.on(CbEvents.OnSyncServerFinish, bootstrapSdkConversations);
|
|
38
|
+
void bootstrapSdkConversations();
|
|
39
|
+
return () => {
|
|
40
|
+
DChatSDK.off(CbEvents.OnConversationChanged, conversationChangeHandler);
|
|
41
|
+
DChatSDK.off(CbEvents.OnSyncServerFinish, bootstrapSdkConversations);
|
|
42
|
+
};
|
|
43
|
+
}, [updateSdkConversations]);
|
|
44
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBizSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizSendMessage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useBizSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/biz/useBizSendMessage.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,iBAAiB;iCAQR,MAAM;CAsE3B,CAAC"}
|
|
@@ -2,29 +2,34 @@ import { useCallback } from "react";
|
|
|
2
2
|
import { MessageStatus } from "@openim/wasm-client-sdk";
|
|
3
3
|
import { useTranslation } from "react-i18next";
|
|
4
4
|
import { DChatSDK } from "../../constants/sdk";
|
|
5
|
-
import { createTextMessage, } from "../../hooks/message/useSendMessage";
|
|
5
|
+
import { createTextMessage, createUrlTextMessage, } from "../../hooks/message/useSendMessage";
|
|
6
6
|
import { pushNewMessage, updateOneMessage } from "../../hooks/message/useMessage";
|
|
7
7
|
import useBizConversationStore from "../../store/bizConversation";
|
|
8
|
-
import {
|
|
8
|
+
import { isBizGroupMessageTarget, resolveBizAvatarUrl, resolveBizDisplayName, } from "../../utils/bizConversation";
|
|
9
9
|
import { generateContentBasedOnMessageType } from "../../utils/common";
|
|
10
|
+
import { extractBizLinkUrls } from "../../utils/bizLink";
|
|
10
11
|
import { emit } from "../../utils/events";
|
|
11
12
|
export const useBizSendMessage = () => {
|
|
12
13
|
const { t } = useTranslation("common");
|
|
14
|
+
const { t: tBiz } = useTranslation("biz-inbox");
|
|
13
15
|
const conversation = useBizConversationStore((state) => state.conversationData);
|
|
14
16
|
const sendTextMessage = useCallback(async (plainText) => {
|
|
15
|
-
var _a, _b;
|
|
17
|
+
var _a, _b, _c;
|
|
16
18
|
const text = plainText.trim();
|
|
17
19
|
if (!text || !conversation)
|
|
18
20
|
return false;
|
|
19
|
-
const isGroup =
|
|
20
|
-
const peerId = (_a = conversation.peer.id) !== null && _a !== void 0 ? _a : "";
|
|
21
|
+
const isGroup = isBizGroupMessageTarget(conversation);
|
|
22
|
+
const peerId = (_b = (_a = conversation.peer.id) !== null && _a !== void 0 ? _a : conversation.peer.username) !== null && _b !== void 0 ? _b : "";
|
|
21
23
|
if (!peerId) {
|
|
22
24
|
console.error("sendBizTextMessage: missing peer id", conversation);
|
|
23
25
|
return false;
|
|
24
26
|
}
|
|
25
27
|
const recvID = isGroup ? "" : peerId;
|
|
26
28
|
const groupID = isGroup ? peerId : "";
|
|
27
|
-
const
|
|
29
|
+
const urls = extractBizLinkUrls(text);
|
|
30
|
+
const message = urls.length > 0
|
|
31
|
+
? await createUrlTextMessage(text, urls)
|
|
32
|
+
: await createTextMessage(text);
|
|
28
33
|
if (!message)
|
|
29
34
|
return false;
|
|
30
35
|
const messageItem = Object.assign(Object.assign({}, message), { ex: "{}", isInternal: false });
|
|
@@ -33,8 +38,8 @@ export const useBizSendMessage = () => {
|
|
|
33
38
|
try {
|
|
34
39
|
const desc = generateContentBasedOnMessageType(message.contentType, text) ||
|
|
35
40
|
t("new_message");
|
|
36
|
-
const showName = resolveBizDisplayName(conversation,
|
|
37
|
-
const faceURL = (
|
|
41
|
+
const showName = resolveBizDisplayName(conversation, tBiz);
|
|
42
|
+
const faceURL = (_c = resolveBizAvatarUrl(conversation)) !== null && _c !== void 0 ? _c : "";
|
|
38
43
|
const { data: successMessage } = await DChatSDK.sendMessage({
|
|
39
44
|
recvID,
|
|
40
45
|
groupID,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface UrlMetadata {
|
|
2
|
+
title?: string;
|
|
3
|
+
description?: string;
|
|
4
|
+
image?: string;
|
|
5
|
+
url: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const fetchUrlMetadata: (url: string) => Promise<UrlMetadata | null>;
|
|
8
|
+
export declare const useFetchUrlMetadata: (url: string, enabled?: boolean) => import("@tanstack/react-query").UseQueryResult<UrlMetadata | null, Error>;
|
|
9
|
+
//# sourceMappingURL=useFetchUrlMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFetchUrlMetadata.d.ts","sourceRoot":"","sources":["../../../src/hooks/common/useFetchUrlMetadata.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAY9E,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM,EAAE,iBAAc,8EAO3D,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useQuery } from "@tanstack/react-query";
|
|
2
|
+
import { apiInstance } from "../../services/api";
|
|
3
|
+
import { ENDPOINTS } from "../../services/routes";
|
|
4
|
+
import { QUERY_KEYS } from "../../services/query";
|
|
5
|
+
export const fetchUrlMetadata = async (url) => {
|
|
6
|
+
var _a;
|
|
7
|
+
if (!url)
|
|
8
|
+
return null;
|
|
9
|
+
const response = await apiInstance.get(ENDPOINTS.chatService.getUrlMetadata, { params: { url } });
|
|
10
|
+
const data = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data;
|
|
11
|
+
if (!data)
|
|
12
|
+
return null;
|
|
13
|
+
return Object.assign(Object.assign({}, data), { url });
|
|
14
|
+
};
|
|
15
|
+
export const useFetchUrlMetadata = (url, enabled = true) => useQuery({
|
|
16
|
+
queryKey: [QUERY_KEYS.FETCH_URL_METADATA, url],
|
|
17
|
+
queryFn: () => fetchUrlMetadata(url),
|
|
18
|
+
enabled: enabled && !!url,
|
|
19
|
+
retry: 0,
|
|
20
|
+
staleTime: 5 * 60 * 1000,
|
|
21
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessageListScroll.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessageListScroll.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,WAAW,EAAE,CAAC;CAC5B;AAED,UAAU,0BAA0B;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,oBAAoB,CAAC;IAChC,eAAe,EAAE,SAAS,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IACxD,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,kBAAkB,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,oBAAoB,GAAI,iIASlC,0BAA0B;;;;
|
|
1
|
+
{"version":3,"file":"useMessageListScroll.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessageListScroll.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,WAAW,EAAE,CAAC;CAC5B;AAED,UAAU,0BAA0B;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,oBAAoB,CAAC;IAChC,eAAe,EAAE,SAAS,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IACxD,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,kBAAkB,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,kBAAkB,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,oBAAoB,GAAI,iIASlC,0BAA0B;;;;8BA6DrB,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;;;CAkDpC,CAAC"}
|
|
@@ -6,6 +6,10 @@ import { markConversationMessageAsRead } from "../../hooks/conversation/useConve
|
|
|
6
6
|
export const MESSAGE_LIST_BOTTOM_THRESHOLD = -5;
|
|
7
7
|
export const useMessageListScroll = ({ conversationId, userId, loadState, latestLoadState, moreOldLoading, moreNewLoading, getMoreOldMessages, getMoreNewMessages, }) => {
|
|
8
8
|
const scrollRef = useRef(null);
|
|
9
|
+
const autoFillAttemptedRef = useRef(false);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
autoFillAttemptedRef.current = false;
|
|
12
|
+
}, [conversationId]);
|
|
9
13
|
const handleMarkConversationMessageAsRead = useCallback(() => {
|
|
10
14
|
var _a, _b, _c, _d;
|
|
11
15
|
const lastMessage = (_b = (_a = latestLoadState.current) === null || _a === void 0 ? void 0 : _a.messageList) === null || _b === void 0 ? void 0 : _b[0];
|
|
@@ -35,6 +39,12 @@ export const useMessageListScroll = ({ conversationId, userId, loadState, latest
|
|
|
35
39
|
const loadMoreOldMessage = useCallback(() => {
|
|
36
40
|
if (!loadState.hasMoreOld || moreOldLoading)
|
|
37
41
|
return;
|
|
42
|
+
const scrollEl = scrollRef.current;
|
|
43
|
+
if (scrollEl && scrollEl.scrollHeight <= scrollEl.clientHeight) {
|
|
44
|
+
if (autoFillAttemptedRef.current)
|
|
45
|
+
return;
|
|
46
|
+
autoFillAttemptedRef.current = true;
|
|
47
|
+
}
|
|
38
48
|
getMoreOldMessages();
|
|
39
49
|
}, [loadState.hasMoreOld, moreOldLoading, getMoreOldMessages]);
|
|
40
50
|
const { run: loadMoreNewMessage } = useDebounceFn(() => {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
},
|
|
9
9
|
"thread_card": {
|
|
10
10
|
"fallback_name": "Người dùng",
|
|
11
|
+
"bot_crm_name": "Droppii Hỗ Trợ",
|
|
11
12
|
"badge": {
|
|
12
13
|
"mall": "Mall",
|
|
13
14
|
"bot": "Bot"
|
|
@@ -16,5 +17,10 @@
|
|
|
16
17
|
"thread_detail": {
|
|
17
18
|
"profile_hint": "Nhấn để xem thông tin",
|
|
18
19
|
"input_placeholder": "Nhập tin nhắn..."
|
|
19
|
-
}
|
|
20
|
+
},
|
|
21
|
+
"link_preview": {
|
|
22
|
+
"loading": "Đang tải xem trước liên kết...",
|
|
23
|
+
"remove": "Xóa xem trước liên kết"
|
|
24
|
+
},
|
|
25
|
+
"link_open_error": "Không thể mở liên kết. Vui lòng thử lại."
|
|
20
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screens/biz-message/index.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,aAAa,GAAI,0CAIpB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screens/biz-message/index.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,aAAa,GAAI,0CAIpB,kBAAkB,4CAkDpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect } from "react";
|
|
4
3
|
import { useSearchParams } from "next/navigation";
|
|
5
4
|
import { useTranslation } from "react-i18next";
|
|
6
5
|
import { Empty } from "antd";
|
|
7
6
|
import clsx from "clsx";
|
|
8
7
|
import useAuthStore from "../../store/auth";
|
|
9
|
-
import useBizConversationStore from "../../store/bizConversation";
|
|
10
8
|
import { useBizConversationList } from "../../hooks/biz";
|
|
9
|
+
import { useBizGlobalEvent } from "../../hooks/biz/useBizGlobalEvent";
|
|
10
|
+
import { useBizActiveConversation } from "../../hooks/biz/useBizActiveConversation";
|
|
11
11
|
import { BizInboxHeader } from "../../components/biz-inbox";
|
|
12
12
|
import BizThreadList from "../../components/biz-inbox/BizThreadList";
|
|
13
13
|
import DChatBizThreadDetail from "../../screens/biz-thread-detail";
|
|
@@ -17,39 +17,18 @@ import { Icon } from "../../components/icon";
|
|
|
17
17
|
const DChatBizInbox = ({ pageSize = PAGE_SIZE.medium, onSelectThread, className, }) => {
|
|
18
18
|
const { t } = useTranslation("biz-inbox");
|
|
19
19
|
const searchParams = useSearchParams();
|
|
20
|
-
const applicationType = useAuthStore((state) => state.applicationType);
|
|
21
|
-
const conversationData = useBizConversationStore((state) => state.conversationData);
|
|
22
|
-
const selectConversation = useBizConversationStore((state) => state.selectConversation);
|
|
23
|
-
const clearSelectedConversation = useBizConversationStore((state) => state.clearSelectedConversation);
|
|
24
20
|
const threadId = searchParams.get("threadId");
|
|
21
|
+
const applicationType = useAuthStore((state) => state.applicationType);
|
|
25
22
|
const isApplicationTypeValid = Object.values(DChatApplicationType).includes(applicationType);
|
|
23
|
+
useBizGlobalEvent();
|
|
26
24
|
const conversationList = useBizConversationList({
|
|
27
25
|
enabled: isApplicationTypeValid,
|
|
28
26
|
pageSize,
|
|
29
27
|
});
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (conversationData) {
|
|
33
|
-
clearSelectedConversation();
|
|
34
|
-
}
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
if ((conversationData === null || conversationData === void 0 ? void 0 : conversationData.conversationId) === threadId)
|
|
38
|
-
return;
|
|
39
|
-
const matchedThread = conversationList.items.find((item) => item.conversationId === threadId);
|
|
40
|
-
if (matchedThread) {
|
|
41
|
-
selectConversation(matchedThread);
|
|
42
|
-
}
|
|
43
|
-
}, [
|
|
44
|
-
threadId,
|
|
45
|
-
conversationList.items,
|
|
46
|
-
conversationData,
|
|
47
|
-
selectConversation,
|
|
48
|
-
clearSelectedConversation,
|
|
49
|
-
]);
|
|
50
|
-
if (threadId && conversationData) {
|
|
28
|
+
useBizActiveConversation(conversationList.items);
|
|
29
|
+
if (threadId) {
|
|
51
30
|
return _jsx(DChatBizThreadDetail, { className: className });
|
|
52
31
|
}
|
|
53
|
-
return (_jsxs("div", { "data-testid": "biz-inbox-root", className: clsx("flex h-full w-full flex-col bg-white", className), children: [_jsx(BizInboxHeader, {}), !isApplicationTypeValid ? (_jsx("div", { className: "flex flex-1 items-center justify-center py-12", children: _jsx(Empty, { image: _jsx(Icon, { icon: "chat-square-b", size: 80, className: "text-gray-300" }), description: t("empty.no_conversations") }) })) : (_jsx(BizThreadList, { items: conversationList.items, isFetchingNextPage: conversationList.isFetchingNextPage, hasNextPage: conversationList.hasNextPage, onLoadMore: conversationList.fetchNextPage, onSelectThread: onSelectThread }))] }));
|
|
32
|
+
return (_jsxs("div", { "data-testid": "biz-inbox-root", className: clsx("flex h-full w-full flex-col bg-white", className), children: [_jsx(BizInboxHeader, {}), !isApplicationTypeValid ? (_jsx("div", { className: "flex flex-1 items-center justify-center py-12", children: _jsx(Empty, { image: _jsx(Icon, { icon: "chat-square-b", size: 80, className: "text-gray-300" }), description: t("empty.no_conversations") }) })) : (_jsx(BizThreadList, { items: conversationList.items, isLoading: conversationList.isLoading, isFetchingNextPage: conversationList.isFetchingNextPage, hasNextPage: conversationList.hasNextPage, onLoadMore: conversationList.fetchNextPage, onSelectThread: onSelectThread }))] }));
|
|
54
33
|
};
|
|
55
34
|
export default DChatBizInbox;
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCtB,CAAC"}
|
package/dist/services/query.js
CHANGED
|
@@ -5,6 +5,7 @@ export const QUERY_KEYS = {
|
|
|
5
5
|
SEARCH_MESSAGE: "SEARCH_MESSAGE",
|
|
6
6
|
UPDATE_SESSION: "UPDATE_SESSION",
|
|
7
7
|
FETCH_EXTERNAL_LINK: "FETCH_EXTERNAL_LINK",
|
|
8
|
+
FETCH_URL_METADATA: "FETCH_URL_METADATA",
|
|
8
9
|
GET_USER_SIDE_INFO: "GET_USER_SIDE_INFO",
|
|
9
10
|
UPDATE_NOTE: "UPDATE_NOTE",
|
|
10
11
|
CREATE_NOTE: "CREATE_NOTE",
|
|
@@ -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;;oCAGJ,MAAM;mCAEP,MAAM;uCAEF,MAAM;;;;;;;;iCASZ,MAAM;4CAEK,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;uCAEF,MAAM;;;;;;;;iCASZ,MAAM;4CAEK,MAAM;;;;;;;;;;;;;CAc7C,CAAC"}
|
package/dist/services/routes.js
CHANGED
|
@@ -29,6 +29,7 @@ export const ENDPOINTS = {
|
|
|
29
29
|
getConversationsImDetail: "/chat-service/v1/crm/conversations/im-detail",
|
|
30
30
|
getBizConversations: "/chat-service/v1/app/conversations/query",
|
|
31
31
|
createBizConversation: "/chat-service/v1/app/conversations",
|
|
32
|
+
getUrlMetadata: "/chat-service/v1/utils/url-metadata",
|
|
32
33
|
},
|
|
33
34
|
identityService: {
|
|
34
35
|
getToken: "/identity-service/v1/identity/get-token",
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
+
import { ConversationItem } from "@openim/wasm-client-sdk";
|
|
1
2
|
import type { BizConversationItem } from "../types/biz";
|
|
2
3
|
interface BizConversationStore {
|
|
3
4
|
conversationData: BizConversationItem | null;
|
|
4
5
|
selectedConversationId: string;
|
|
6
|
+
sdkConversations: Record<string, ConversationItem>;
|
|
5
7
|
setConversationData: (data: BizConversationItem | null) => void;
|
|
6
8
|
setSelectedConversationId: (id: string) => void;
|
|
7
9
|
selectConversation: (conversation: BizConversationItem) => void;
|
|
8
10
|
clearSelectedConversation: () => void;
|
|
11
|
+
updateSdkConversations: (conversations: ConversationItem[]) => void;
|
|
12
|
+
resetSdkConversations: () => void;
|
|
9
13
|
}
|
|
10
14
|
declare const useBizConversationStore: import("zustand").UseBoundStore<import("zustand").StoreApi<BizConversationStore>>;
|
|
11
15
|
export default useBizConversationStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bizConversation.d.ts","sourceRoot":"","sources":["../../src/store/bizConversation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,UAAU,oBAAoB;IAC5B,gBAAgB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC7C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,yBAAyB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,kBAAkB,EAAE,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChE,yBAAyB,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"bizConversation.d.ts","sourceRoot":"","sources":["../../src/store/bizConversation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,UAAU,oBAAoB;IAC5B,gBAAgB,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC7C,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACnD,mBAAmB,EAAE,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IAChE,yBAAyB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,kBAAkB,EAAE,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAChE,yBAAyB,EAAE,MAAM,IAAI,CAAC;IACtC,sBAAsB,EAAE,CAAC,aAAa,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IACpE,qBAAqB,EAAE,MAAM,IAAI,CAAC;CACnC;AAED,QAAA,MAAM,uBAAuB,mFAmC1B,CAAC;AAEJ,eAAe,uBAAuB,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { create } from "zustand";
|
|
|
2
2
|
const useBizConversationStore = create((set) => ({
|
|
3
3
|
conversationData: null,
|
|
4
4
|
selectedConversationId: "",
|
|
5
|
+
sdkConversations: {},
|
|
5
6
|
setConversationData: (data) => {
|
|
6
7
|
var _a;
|
|
7
8
|
return set({
|
|
@@ -18,5 +19,13 @@ const useBizConversationStore = create((set) => ({
|
|
|
18
19
|
conversationData: null,
|
|
19
20
|
selectedConversationId: "",
|
|
20
21
|
}),
|
|
22
|
+
updateSdkConversations: (conversations) => set((state) => {
|
|
23
|
+
const sdkConversations = Object.assign({}, state.sdkConversations);
|
|
24
|
+
conversations.forEach((conversation) => {
|
|
25
|
+
sdkConversations[conversation.conversationID] = conversation;
|
|
26
|
+
});
|
|
27
|
+
return { sdkConversations };
|
|
28
|
+
}),
|
|
29
|
+
resetSdkConversations: () => set({ sdkConversations: {} }),
|
|
21
30
|
}));
|
|
22
31
|
export default useBizConversationStore;
|