@droppii-org/chat-sdk 0.1.6 → 0.1.7
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/cannedResponse/CannedResponseBody.d.ts.map +1 -1
- package/dist/components/cannedResponse/CannedResponseBody.js +54 -3
- package/dist/components/conversation/ConversationBySessionItem.d.ts.map +1 -1
- package/dist/components/conversation/ConversationBySessionItem.js +7 -2
- package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
- package/dist/components/conversation/DeskConversationList.js +22 -17
- package/dist/components/message/MessageHeader.d.ts +2 -2
- package/dist/components/message/MessageHeader.d.ts.map +1 -1
- package/dist/components/message/MessageHeader.js +5 -2
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +31 -22
- package/dist/components/message/SelectSession.d.ts.map +1 -1
- package/dist/components/message/SelectSession.js +7 -9
- package/dist/components/message/footer/ActionBar.d.ts.map +1 -1
- package/dist/components/message/footer/ActionBar.js +3 -2
- package/dist/components/message/footer/CannedResponsePlugin.d.ts.map +1 -1
- package/dist/components/message/footer/CannedResponsePlugin.js +37 -1
- package/dist/components/message/footer/ComposerEditor.d.ts +7 -0
- package/dist/components/message/footer/ComposerEditor.d.ts.map +1 -0
- package/dist/components/message/footer/ComposerEditor.js +13 -0
- package/dist/components/message/footer/ComposerTabs.d.ts +9 -0
- package/dist/components/message/footer/ComposerTabs.d.ts.map +1 -0
- package/dist/components/message/footer/ComposerTabs.js +37 -0
- package/dist/components/message/footer/EnterHandler.d.ts.map +1 -1
- package/dist/components/message/footer/EnterHandler.js +10 -1
- package/dist/components/message/footer/index.d.ts +2 -2
- package/dist/components/message/footer/index.d.ts.map +1 -1
- package/dist/components/message/footer/index.js +45 -9
- package/dist/components/message/item/index.d.ts.map +1 -1
- package/dist/components/message/item/index.js +11 -1
- package/dist/components/session/DeskAssignedSession.d.ts.map +1 -1
- package/dist/components/session/DeskAssignedSession.js +14 -109
- package/dist/components/session/DeskTeamInbox.d.ts +3 -0
- package/dist/components/session/DeskTeamInbox.d.ts.map +1 -0
- package/dist/components/session/DeskTeamInbox.js +56 -0
- package/dist/components/session/SessionFilterMenu.d.ts +13 -0
- package/dist/components/session/SessionFilterMenu.d.ts.map +1 -0
- package/dist/components/session/SessionFilterMenu.js +27 -0
- package/dist/components/session/sessionMenuItems.d.ts +26 -0
- package/dist/components/session/sessionMenuItems.d.ts.map +1 -0
- package/dist/components/session/sessionMenuItems.js +108 -0
- package/dist/hooks/conversation/useConversationPreview.d.ts +12 -0
- package/dist/hooks/conversation/useConversationPreview.d.ts.map +1 -0
- package/dist/hooks/conversation/useConversationPreview.js +22 -0
- package/dist/hooks/message/useConversationMessages.d.ts +27 -0
- package/dist/hooks/message/useConversationMessages.d.ts.map +1 -0
- package/dist/hooks/message/useConversationMessages.js +29 -0
- package/dist/hooks/message/useMessage.d.ts.map +1 -1
- package/dist/hooks/message/usePullSessionMessages.d.ts +9 -0
- package/dist/hooks/message/usePullSessionMessages.d.ts.map +1 -0
- package/dist/hooks/message/usePullSessionMessages.js +27 -0
- package/dist/hooks/message/useSendMessage.d.ts +8 -6
- package/dist/hooks/message/useSendMessage.d.ts.map +1 -1
- package/dist/hooks/message/useSendMessage.js +8 -8
- package/dist/hooks/session/useConversationSessionState.d.ts +21 -0
- package/dist/hooks/session/useConversationSessionState.d.ts.map +1 -0
- package/dist/hooks/session/useConversationSessionState.js +41 -0
- package/dist/hooks/session/useGetSession.d.ts.map +1 -1
- package/dist/hooks/session/useGetSession.js +138 -52
- package/dist/hooks/session/useGetTeamSessionSummary.d.ts +3 -0
- package/dist/hooks/session/useGetTeamSessionSummary.d.ts.map +1 -0
- package/dist/hooks/session/useGetTeamSessionSummary.js +12 -0
- package/dist/hooks/session/useIsJoinedGroup.d.ts +5 -0
- package/dist/hooks/session/useIsJoinedGroup.d.ts.map +1 -0
- package/dist/hooks/session/useIsJoinedGroup.js +24 -0
- package/dist/hooks/session/useJoinGroupFlow.d.ts +12 -0
- package/dist/hooks/session/useJoinGroupFlow.d.ts.map +1 -0
- package/dist/hooks/session/useJoinGroupFlow.js +59 -0
- package/dist/hooks/session/useJoinSession.d.ts +3 -0
- package/dist/hooks/session/useJoinSession.d.ts.map +1 -0
- package/dist/hooks/session/useJoinSession.js +38 -0
- package/dist/hooks/user/useCurrentUserAccountType.d.ts +3 -0
- package/dist/hooks/user/useCurrentUserAccountType.d.ts.map +1 -0
- package/dist/hooks/user/useCurrentUserAccountType.js +30 -0
- package/dist/locales/vi/common.json +12 -2
- package/dist/services/query.d.ts +5 -0
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +5 -0
- package/dist/services/routes.d.ts +5 -0
- package/dist/services/routes.d.ts.map +1 -1
- package/dist/services/routes.js +5 -0
- package/dist/store/conversation.d.ts.map +1 -1
- package/dist/store/conversation.js +41 -12
- package/dist/store/session.js +1 -1
- package/dist/styles/global.css +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/chat.d.ts +18 -1
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/chat.js +9 -0
- package/dist/types/dto.d.ts +87 -0
- package/dist/types/dto.d.ts.map +1 -1
- package/dist/utils/events.d.ts +1 -0
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/messageTransform.d.ts +5 -0
- package/dist/utils/messageTransform.d.ts.map +1 -0
- package/dist/utils/messageTransform.js +106 -0
- package/dist/utils/queryHelpers.d.ts.map +1 -1
- package/dist/utils/queryHelpers.js +2 -0
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ConversationItem } from "@openim/wasm-client-sdk";
|
|
2
|
+
interface UseConversationPreviewParams {
|
|
3
|
+
conversation?: ConversationItem | null;
|
|
4
|
+
ownerUserID?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const useConversationPreview: ({ conversation, ownerUserID, }: UseConversationPreviewParams) => {
|
|
7
|
+
latestMsg: string;
|
|
8
|
+
latestMsgSendTime: number;
|
|
9
|
+
isLoadingPreview: boolean;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=useConversationPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConversationPreview.d.ts","sourceRoot":"","sources":["../../../src/hooks/conversation/useConversationPreview.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAe,MAAM,yBAAyB,CAAC;AAIxE,UAAU,4BAA4B;IACpC,YAAY,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,sBAAsB,GAAI,gCAGpC,4BAA4B;;;;CA6B9B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { usePullSessionMessages } from "../message/usePullSessionMessages";
|
|
4
|
+
export const useConversationPreview = ({ conversation, ownerUserID, }) => {
|
|
5
|
+
var _a;
|
|
6
|
+
const hasPreview = Boolean(conversation === null || conversation === void 0 ? void 0 : conversation.latestMsg) && ((_a = conversation === null || conversation === void 0 ? void 0 : conversation.latestMsgSendTime) !== null && _a !== void 0 ? _a : 0) > 0;
|
|
7
|
+
const shouldFetchPreview = Boolean((conversation === null || conversation === void 0 ? void 0 : conversation.isNotInGroup) && (conversation === null || conversation === void 0 ? void 0 : conversation.conversationID) && ownerUserID) &&
|
|
8
|
+
!hasPreview;
|
|
9
|
+
const { data: messages, isLoading } = usePullSessionMessages({
|
|
10
|
+
conversationID: conversation === null || conversation === void 0 ? void 0 : conversation.conversationID,
|
|
11
|
+
userID: ownerUserID,
|
|
12
|
+
enabled: shouldFetchPreview,
|
|
13
|
+
});
|
|
14
|
+
const latestMessage = useMemo(() => messages === null || messages === void 0 ? void 0 : messages[0], [messages]);
|
|
15
|
+
return useMemo(() => ({
|
|
16
|
+
latestMsg: (conversation === null || conversation === void 0 ? void 0 : conversation.latestMsg) || (latestMessage ? JSON.stringify(latestMessage) : ""),
|
|
17
|
+
latestMsgSendTime: (conversation === null || conversation === void 0 ? void 0 : conversation.latestMsgSendTime) && conversation.latestMsgSendTime > 0
|
|
18
|
+
? conversation.latestMsgSendTime
|
|
19
|
+
: (latestMessage === null || latestMessage === void 0 ? void 0 : latestMessage.sendTime) || 0,
|
|
20
|
+
isLoadingPreview: isLoading,
|
|
21
|
+
}), [conversation === null || conversation === void 0 ? void 0 : conversation.latestMsg, conversation === null || conversation === void 0 ? void 0 : conversation.latestMsgSendTime, latestMessage, isLoading]);
|
|
22
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { MessageItem } from "@openim/wasm-client-sdk";
|
|
2
|
+
interface UseConversationMessagesParams {
|
|
3
|
+
conversationId?: string;
|
|
4
|
+
searchClientMsgID?: string;
|
|
5
|
+
restrictToLastSession?: boolean;
|
|
6
|
+
customerUserID?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const useConversationMessages: ({ conversationId, searchClientMsgID, restrictToLastSession, customerUserID, }: UseConversationMessagesParams) => {
|
|
9
|
+
loadState: {
|
|
10
|
+
initLoading: boolean;
|
|
11
|
+
hasMoreOld: boolean;
|
|
12
|
+
hasMoreNew: boolean;
|
|
13
|
+
messageList: MessageItem[];
|
|
14
|
+
};
|
|
15
|
+
latestLoadState: import("react").RefObject<{
|
|
16
|
+
initLoading: boolean;
|
|
17
|
+
hasMoreOld: boolean;
|
|
18
|
+
hasMoreNew: boolean;
|
|
19
|
+
messageList: MessageItem[];
|
|
20
|
+
}>;
|
|
21
|
+
moreOldLoading: boolean;
|
|
22
|
+
getMoreOldMessages: (loadMore?: any) => Promise<void>;
|
|
23
|
+
moreNewLoading: boolean;
|
|
24
|
+
getMoreNewMessages: (loadMore?: any) => Promise<void>;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=useConversationMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConversationMessages.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useConversationMessages.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,UAAU,6BAA6B;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,uBAAuB,GAAI,+EAKrC,6BAA6B;;;;;;;;;;;;;;;;;CAkC/B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useMessage } from "./useMessage";
|
|
4
|
+
import { usePullSessionMessages } from "./usePullSessionMessages";
|
|
5
|
+
export const useConversationMessages = ({ conversationId, searchClientMsgID, restrictToLastSession = false, customerUserID, }) => {
|
|
6
|
+
const sdkMessages = useMessage(conversationId, searchClientMsgID);
|
|
7
|
+
const { data: pulledMessages, isLoading: isPullLoading, isFetching: isPullFetching, } = usePullSessionMessages({
|
|
8
|
+
conversationID: conversationId,
|
|
9
|
+
userID: customerUserID,
|
|
10
|
+
enabled: restrictToLastSession,
|
|
11
|
+
});
|
|
12
|
+
const lastSessionState = useMemo(() => ({
|
|
13
|
+
initLoading: isPullLoading || isPullFetching,
|
|
14
|
+
hasMoreOld: false,
|
|
15
|
+
hasMoreNew: false,
|
|
16
|
+
messageList: pulledMessages !== null && pulledMessages !== void 0 ? pulledMessages : [],
|
|
17
|
+
}), [isPullLoading, isPullFetching, pulledMessages]);
|
|
18
|
+
if (restrictToLastSession) {
|
|
19
|
+
return {
|
|
20
|
+
loadState: lastSessionState,
|
|
21
|
+
latestLoadState: { current: lastSessionState },
|
|
22
|
+
moreOldLoading: false,
|
|
23
|
+
getMoreOldMessages: async () => undefined,
|
|
24
|
+
moreNewLoading: false,
|
|
25
|
+
getMoreNewMessages: async () => undefined,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return sdkMessages;
|
|
29
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EACX,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAQjC,eAAO,MAAM,kBAAkB,eAe9B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,oBAAoB,MAAM;;;;;qBAML,WAAW,EAAE;;;;;;qBAAb,WAAW,EAAE;;;;;;
|
|
1
|
+
{"version":3,"file":"useMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/useMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,WAAW,EACX,WAAW,EAEZ,MAAM,yBAAyB,CAAC;AAQjC,eAAO,MAAM,kBAAkB,eAe9B,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,iBAAiB,MAAM,EACvB,oBAAoB,MAAM;;;;;qBAML,WAAW,EAAE;;;;;;qBAAb,WAAW,EAAE;;;;;;CAiPnC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,SAAS,WAAW,SACpB,CAAC;AAChC,eAAO,MAAM,gBAAgB,GAAI,SAAS,WAAW,SACpB,CAAC;AAClC,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,SACf,CAAC;AAEtC,eAAO,MAAM,kBAAkB,GAC7B,aAAa,WAAW,EAAE,EAC1B,SAAS,WAAW,EACpB,WAAW,MAAM,GAAG,MAAM,KACzB,WAAW,GAAG,SAkBhB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MessageItem } from "@openim/wasm-client-sdk";
|
|
2
|
+
interface UsePullSessionMessagesParams {
|
|
3
|
+
conversationID?: string;
|
|
4
|
+
userID?: string;
|
|
5
|
+
enabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const usePullSessionMessages: ({ conversationID, userID, enabled, }: UsePullSessionMessagesParams) => import("@tanstack/react-query").UseQueryResult<MessageItem[], Error>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=usePullSessionMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePullSessionMessages.d.ts","sourceRoot":"","sources":["../../../src/hooks/message/usePullSessionMessages.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAetD,UAAU,4BAA4B;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,sBAAsB,GAAI,sCAIpC,4BAA4B,yEA4B9B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
import useAuthStore from "../../store/auth";
|
|
6
|
+
import { sortMessagesDesc, transformPulledMessage, } from "../../utils/messageTransform";
|
|
7
|
+
export const usePullSessionMessages = ({ conversationID, userID, enabled = true, }) => {
|
|
8
|
+
const applicationType = useAuthStore((state) => state.applicationType);
|
|
9
|
+
const query = useQuery({
|
|
10
|
+
queryKey: [QUERY_KEYS.PULL_SESSION_MESSAGES, conversationID, userID],
|
|
11
|
+
enabled: Boolean(enabled && conversationID && userID),
|
|
12
|
+
queryFn: async () => {
|
|
13
|
+
var _a, _b, _c, _d;
|
|
14
|
+
const payload = {
|
|
15
|
+
conversationID: conversationID !== null && conversationID !== void 0 ? conversationID : "",
|
|
16
|
+
userID: userID !== null && userID !== void 0 ? userID : "",
|
|
17
|
+
applicationType,
|
|
18
|
+
};
|
|
19
|
+
const res = await apiInstance.post(ENDPOINTS.chatService.pullSessionMessages, payload);
|
|
20
|
+
const group = (_c = (_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.msgs) === null || _c === void 0 ? void 0 : _c[conversationID !== null && conversationID !== void 0 ? conversationID : ""];
|
|
21
|
+
const rawList = (_d = group === null || group === void 0 ? void 0 : group.Msgs) !== null && _d !== void 0 ? _d : [];
|
|
22
|
+
const messageList = sortMessagesDesc(rawList.map(transformPulledMessage));
|
|
23
|
+
return messageList;
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
return query;
|
|
27
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MergerMsgParams, MessageItem } from "@openim/wasm-client-sdk";
|
|
2
2
|
import { ExtendMessageInfo, FileMsgParamsByFile, ImageMsgParamsByFile, VideoMsgParamsByFile } from "../../types/chat";
|
|
3
3
|
import { UploadFile } from "antd";
|
|
4
|
-
import {
|
|
4
|
+
import { ISessionResponse } from "../../types/dto";
|
|
5
5
|
export declare const isMediaResendable: (message: {
|
|
6
6
|
clientMsgID: string;
|
|
7
7
|
contentType: number;
|
|
@@ -14,21 +14,23 @@ export declare const createFileMessageByFile: (file: FileMsgParamsByFile) => Pro
|
|
|
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
16
|
export declare const useSendMessage: () => {
|
|
17
|
-
sendTextMessage: ({ plainText, richText, currentSession, }: {
|
|
17
|
+
sendTextMessage: ({ plainText, richText, currentSession, isInternal, }: {
|
|
18
18
|
plainText: string;
|
|
19
19
|
richText: string;
|
|
20
|
-
currentSession?:
|
|
20
|
+
currentSession?: ISessionResponse;
|
|
21
|
+
isInternal: boolean;
|
|
21
22
|
}) => Promise<void>;
|
|
22
|
-
sendMergeMessage: ({ richText, plainText, files, currentSession, }: {
|
|
23
|
+
sendMergeMessage: ({ richText, plainText, files, currentSession, isInternal, }: {
|
|
23
24
|
richText: string;
|
|
24
25
|
plainText: string;
|
|
25
26
|
files: UploadFile[];
|
|
26
|
-
currentSession?:
|
|
27
|
+
currentSession?: ISessionResponse;
|
|
28
|
+
isInternal: boolean;
|
|
27
29
|
}) => Promise<void>;
|
|
28
30
|
resendMessage: (failedMessage: MessageItem) => Promise<void>;
|
|
29
31
|
};
|
|
30
32
|
export declare const generateExtendMessageInfo: ({ richText, currentSession, }: {
|
|
31
33
|
richText?: string;
|
|
32
|
-
currentSession?:
|
|
34
|
+
currentSession?: ISessionResponse;
|
|
33
35
|
}) => ExtendMessageInfo;
|
|
34
36
|
//# sourceMappingURL=useSendMessage.d.ts.map
|
|
@@ -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,kBAAkB,CAAC;AAW1B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
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,kBAAkB,CAAC;AAW1B,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAQlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAenD,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;4EA4KpB;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;mCA7JqB,WAAW;CA8RpC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,+BAGvC;IACD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,gBAAgB,CAAC;CACnC,KAWM,iBACN,CAAC"}
|
|
@@ -105,7 +105,7 @@ export const useSendMessage = () => {
|
|
|
105
105
|
const setQuotedMessage = useConversationStore((state) => state.setQuotedMessage);
|
|
106
106
|
const { userID: recvID, groupID } = conversationData || {};
|
|
107
107
|
const dispatchMessage = useCallback(async (message) => {
|
|
108
|
-
var _a;
|
|
108
|
+
var _a, _b;
|
|
109
109
|
const desc = generateContentBasedOnMessageType(message.contentType, ((_a = message === null || message === void 0 ? void 0 : message.textElem) === null || _a === void 0 ? void 0 : _a.content) || "") || t("new_message");
|
|
110
110
|
const { data: successMessage } = await DChatSDK.sendMessage({
|
|
111
111
|
recvID: recvID || "",
|
|
@@ -124,7 +124,7 @@ export const useSendMessage = () => {
|
|
|
124
124
|
iOSBadgeCount: true,
|
|
125
125
|
},
|
|
126
126
|
});
|
|
127
|
-
updateOneMessage(successMessage);
|
|
127
|
+
updateOneMessage(Object.assign(Object.assign({}, successMessage), { isInternal: (_b = successMessage.isInternal) !== null && _b !== void 0 ? _b : message.isInternal }));
|
|
128
128
|
messageFileStore.delete(message.clientMsgID);
|
|
129
129
|
}, [recvID, groupID]);
|
|
130
130
|
const sendMessage = useCallback(async (message) => {
|
|
@@ -160,7 +160,7 @@ export const useSendMessage = () => {
|
|
|
160
160
|
clientMsgID: failedMessage.clientMsgID,
|
|
161
161
|
});
|
|
162
162
|
removeOneMessage(failedMessage.clientMsgID);
|
|
163
|
-
await sendMessage(Object.assign(Object.assign({}, newTextPayload), { ex: failedMessage.ex }));
|
|
163
|
+
await sendMessage(Object.assign(Object.assign({}, newTextPayload), { ex: failedMessage.ex, isInternal: failedMessage.isInternal }));
|
|
164
164
|
return;
|
|
165
165
|
}
|
|
166
166
|
let newPayload = null;
|
|
@@ -216,9 +216,9 @@ export const useSendMessage = () => {
|
|
|
216
216
|
clientMsgID: failedMessage.clientMsgID,
|
|
217
217
|
});
|
|
218
218
|
removeOneMessage(failedMessage.clientMsgID);
|
|
219
|
-
await sendMessage(Object.assign(Object.assign({}, newPayload), { ex: failedMessage.ex }));
|
|
219
|
+
await sendMessage(Object.assign(Object.assign({}, newPayload), { ex: failedMessage.ex, isInternal: failedMessage.isInternal }));
|
|
220
220
|
}, [sendMessage]);
|
|
221
|
-
const sendTextMessage = useCallback(async ({ plainText, richText, currentSession, }) => {
|
|
221
|
+
const sendTextMessage = useCallback(async ({ plainText, richText, currentSession, isInternal, }) => {
|
|
222
222
|
if (!recvID && !groupID)
|
|
223
223
|
return;
|
|
224
224
|
const urls = extractLinks(plainText);
|
|
@@ -240,10 +240,10 @@ export const useSendMessage = () => {
|
|
|
240
240
|
richText,
|
|
241
241
|
currentSession,
|
|
242
242
|
});
|
|
243
|
-
let messageItem = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}" });
|
|
243
|
+
let messageItem = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}", isInternal });
|
|
244
244
|
sendMessage(messageItem);
|
|
245
245
|
}, [recvID, groupID, user, sendMessage, quotedMessage, setQuotedMessage]);
|
|
246
|
-
const sendMergeMessage = useCallback(async ({ richText, plainText, files, currentSession, }) => {
|
|
246
|
+
const sendMergeMessage = useCallback(async ({ richText, plainText, files, currentSession, isInternal, }) => {
|
|
247
247
|
if (!recvID && !groupID)
|
|
248
248
|
return;
|
|
249
249
|
const messageList = [];
|
|
@@ -354,7 +354,7 @@ export const useSendMessage = () => {
|
|
|
354
354
|
richText: (message === null || message === void 0 ? void 0 : message.contentType) === MessageType.TextMessage ? richText : "",
|
|
355
355
|
currentSession,
|
|
356
356
|
});
|
|
357
|
-
const mMessage = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}" });
|
|
357
|
+
const mMessage = Object.assign(Object.assign({}, message), { ex: JSON.stringify(extendMessageInfo) || "{}", isInternal });
|
|
358
358
|
await sendMessage(mMessage);
|
|
359
359
|
}
|
|
360
360
|
}, [recvID, groupID, sendMessage, quotedMessage, setQuotedMessage]);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SessionType } from "@openim/wasm-client-sdk";
|
|
2
|
+
interface UseConversationSessionStateParams {
|
|
3
|
+
conversationId: string;
|
|
4
|
+
conversationType?: SessionType;
|
|
5
|
+
groupId?: string;
|
|
6
|
+
userID?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const useConversationSessionState: ({ conversationId, conversationType, groupId, userID, }: UseConversationSessionStateParams) => {
|
|
9
|
+
isGroupConversation: boolean;
|
|
10
|
+
groupId: string | undefined;
|
|
11
|
+
isJoined: boolean | null;
|
|
12
|
+
latestConversationSession: import("../../types/dto").ISessionResponse | undefined;
|
|
13
|
+
isSessionMember: boolean;
|
|
14
|
+
isMember: boolean;
|
|
15
|
+
isNotGroupMember: boolean;
|
|
16
|
+
customerUserID: string;
|
|
17
|
+
refetchIsJoined: () => Promise<void>;
|
|
18
|
+
refetchConversationSessions: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("../../types/dto").ISessionResponse[], Error>>;
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=useConversationSessionState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConversationSessionState.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useConversationSessionState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAMtD,UAAU,iCAAiC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,2BAA2B,GAAI,wDAKzC,iCAAiC;;;;;;;;;;;CA4CnC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useGetListSessionByConversation } from "./useGetListSessionByConversation";
|
|
4
|
+
import { useIsJoinedGroup } from "./useIsJoinedGroup";
|
|
5
|
+
import { isGroupSession } from "../../utils/imCommon";
|
|
6
|
+
export const useConversationSessionState = ({ conversationId, conversationType, groupId, userID, }) => {
|
|
7
|
+
var _a;
|
|
8
|
+
const isGroupConversation = isGroupSession(conversationType);
|
|
9
|
+
const currentGroupId = isGroupConversation ? groupId : undefined;
|
|
10
|
+
const { isJoined, refetch: refetchIsJoined } = useIsJoinedGroup(currentGroupId);
|
|
11
|
+
const { data: conversationSessions, refetch: refetchConversationSessions, } = useGetListSessionByConversation({
|
|
12
|
+
conversationId,
|
|
13
|
+
});
|
|
14
|
+
const latestConversationSession = useMemo(() => {
|
|
15
|
+
if (!(conversationSessions === null || conversationSessions === void 0 ? void 0 : conversationSessions.length))
|
|
16
|
+
return undefined;
|
|
17
|
+
return [...conversationSessions].sort((a, b) => new Date(b.createdDate).getTime() - new Date(a.createdDate).getTime())[0];
|
|
18
|
+
}, [conversationSessions]);
|
|
19
|
+
const isSessionMember = useMemo(() => {
|
|
20
|
+
var _a, _b;
|
|
21
|
+
if (!latestConversationSession || !userID)
|
|
22
|
+
return false;
|
|
23
|
+
if (latestConversationSession.supporterId === userID)
|
|
24
|
+
return true;
|
|
25
|
+
return (_b = (_a = latestConversationSession.priorSupporterIds) === null || _a === void 0 ? void 0 : _a.includes(userID)) !== null && _b !== void 0 ? _b : false;
|
|
26
|
+
}, [latestConversationSession, userID]);
|
|
27
|
+
const isMember = isJoined === true || isSessionMember;
|
|
28
|
+
const isNotGroupMember = isGroupConversation && isJoined !== null && !isMember;
|
|
29
|
+
return {
|
|
30
|
+
isGroupConversation,
|
|
31
|
+
groupId: currentGroupId,
|
|
32
|
+
isJoined,
|
|
33
|
+
latestConversationSession,
|
|
34
|
+
isSessionMember,
|
|
35
|
+
isMember,
|
|
36
|
+
isNotGroupMember,
|
|
37
|
+
customerUserID: (_a = latestConversationSession === null || latestConversationSession === void 0 ? void 0 : latestConversationSession.ownerId) !== null && _a !== void 0 ? _a : "",
|
|
38
|
+
refetchIsJoined,
|
|
39
|
+
refetchConversationSessions,
|
|
40
|
+
};
|
|
41
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetSession.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useGetSession.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetSession.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,YAAY,EAIb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOpE,UAAU,kBAAkB;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AA2JD,eAAO,MAAM,aAAa,GAAI,sBAG3B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyEpB,CAAC"}
|
|
@@ -11,72 +11,165 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
11
11
|
return t;
|
|
12
12
|
};
|
|
13
13
|
import { useInfiniteQuery } from "@tanstack/react-query";
|
|
14
|
+
import { useMemo } from "react";
|
|
14
15
|
import { apiInstance } from "../../services/api";
|
|
15
16
|
import { ENDPOINTS } from "../../services/routes";
|
|
16
17
|
import { QUERY_KEYS } from "../../services/query";
|
|
17
|
-
import { useMemo } from "react";
|
|
18
18
|
import useConversationStore from "../../store/conversation";
|
|
19
|
-
import { DChatSDK } from "../../constants/sdk";
|
|
20
19
|
import useAuthStore from "../../store/auth";
|
|
21
|
-
import {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
21
|
+
const SESSION_PAGE_SIZE = 20;
|
|
22
|
+
const hasValidFilter = (filter) => {
|
|
23
|
+
return Object.values(filter).some((v) => {
|
|
24
|
+
if (typeof v === "string")
|
|
25
|
+
return v.trim() !== "";
|
|
26
|
+
return v !== undefined && v !== null;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const buildSessionConfig = (filter, pageSize) => {
|
|
30
|
+
const applicationType = useAuthStore.getState().applicationType;
|
|
31
|
+
if (filter.teamId) {
|
|
32
|
+
return {
|
|
33
|
+
queryKey: QUERY_KEYS.GET_TEAM_SESSIONS,
|
|
34
|
+
endpoint: ENDPOINTS.chatService.getTeamSessionsByQuery,
|
|
35
|
+
buildParams: (page) => ({
|
|
36
|
+
teamId: filter.teamId,
|
|
37
|
+
applicationType,
|
|
38
|
+
page,
|
|
39
|
+
pageSize,
|
|
40
|
+
status: filter.status,
|
|
41
|
+
tag: filter.tag,
|
|
42
|
+
}),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
queryKey: QUERY_KEYS.GET_SESSION_BY_TAG_OR_STATUS,
|
|
47
|
+
endpoint: ENDPOINTS.chatService.getSessionsByTagOrStatus,
|
|
48
|
+
buildParams: (page) => ({
|
|
49
|
+
applicationType,
|
|
50
|
+
tag: filter.tag,
|
|
51
|
+
status: filter.status,
|
|
52
|
+
page,
|
|
53
|
+
pageSize,
|
|
54
|
+
searchTerm: filter.searchTerm,
|
|
55
|
+
conversationIds: filter.conversationIds,
|
|
56
|
+
}),
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
const mapImDetailToConversation = (item) => ({
|
|
60
|
+
conversationID: item.conversationID,
|
|
61
|
+
conversationType: item.conversationType,
|
|
62
|
+
userID: item.userID,
|
|
63
|
+
groupID: item.groupID,
|
|
64
|
+
showName: "",
|
|
65
|
+
faceURL: "",
|
|
66
|
+
recvMsgOpt: item.recvMsgOpt,
|
|
67
|
+
unreadCount: 0,
|
|
68
|
+
groupAtType: item.groupAtType,
|
|
69
|
+
latestMsg: "",
|
|
70
|
+
latestMsgSendTime: 0,
|
|
71
|
+
draftText: "",
|
|
72
|
+
draftTextTime: 0,
|
|
73
|
+
burnDuration: item.burnDuration,
|
|
74
|
+
msgDestructTime: item.msgDestructTime,
|
|
75
|
+
isPinned: item.isPinned,
|
|
76
|
+
isNotInGroup: true,
|
|
77
|
+
isPrivateChat: item.isPrivateChat,
|
|
78
|
+
isMsgDestruct: item.isMsgDestruct,
|
|
79
|
+
attachedInfo: item.attachedInfo,
|
|
80
|
+
ex: item.ex,
|
|
81
|
+
});
|
|
82
|
+
const fetchConversationsImDetail = async (conversations) => {
|
|
83
|
+
var _a, _b;
|
|
84
|
+
if (!conversations.length)
|
|
85
|
+
return [];
|
|
86
|
+
const payload = {
|
|
87
|
+
applicationType: useAuthStore.getState().applicationType,
|
|
88
|
+
conversations,
|
|
89
|
+
};
|
|
90
|
+
const res = await apiInstance.post(ENDPOINTS.chatService.getConversationsImDetail, payload);
|
|
91
|
+
return ((_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : []).map(mapImDetailToConversation);
|
|
92
|
+
};
|
|
93
|
+
const fetchSdkConversations = async (sessions) => {
|
|
94
|
+
var _a;
|
|
95
|
+
if (!sessions.length)
|
|
96
|
+
return [];
|
|
97
|
+
try {
|
|
98
|
+
const res = await DChatSDK.getMultipleConversation(sessions.map((session) => session.conversationId));
|
|
99
|
+
return (_a = res === null || res === void 0 ? void 0 : res.data) !== null && _a !== void 0 ? _a : [];
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error("getMultipleConversation", error);
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const findMissingSessionsFromSdk = (sessions, sdkConversations) => sessions.filter((session) => !sdkConversations.some((conversation) => conversation.conversationID === session.conversationId));
|
|
107
|
+
const syncSessionConversationsToStore = async (sessions) => {
|
|
108
|
+
const currentList = useConversationStore.getState().conversationList;
|
|
109
|
+
const newSessions = sessions.filter((session) => !currentList.some((conversation) => conversation.conversationID === session.conversationId));
|
|
110
|
+
if (!newSessions.length)
|
|
111
|
+
return;
|
|
112
|
+
const sdkConversations = await fetchSdkConversations(newSessions);
|
|
113
|
+
const missingSessions = findMissingSessionsFromSdk(newSessions, sdkConversations);
|
|
114
|
+
const conversationsToUpdate = [...sdkConversations];
|
|
115
|
+
if (missingSessions.length) {
|
|
116
|
+
try {
|
|
117
|
+
const fallbackConversations = await fetchConversationsImDetail(missingSessions.map((session) => ({
|
|
118
|
+
ownerUserID: session.ownerId,
|
|
119
|
+
conversationID: session.conversationId,
|
|
120
|
+
})));
|
|
121
|
+
conversationsToUpdate.push(...fallbackConversations);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error("syncSessionConversationsToStore", error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (conversationsToUpdate.length) {
|
|
128
|
+
useConversationStore
|
|
129
|
+
.getState()
|
|
130
|
+
.updateConversationList(conversationsToUpdate, "filter");
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
export const useGetSession = ({ filter, options = { pageSize: undefined, isEnabled: true }, }) => {
|
|
134
|
+
var _a, _b;
|
|
135
|
+
const pageSize = (_a = options === null || options === void 0 ? void 0 : options.pageSize) !== null && _a !== void 0 ? _a : SESSION_PAGE_SIZE;
|
|
136
|
+
const isEnabled = (_b = options === null || options === void 0 ? void 0 : options.isEnabled) !== null && _b !== void 0 ? _b : true;
|
|
26
137
|
const conversationList = useConversationStore((state) => state.conversationList);
|
|
27
|
-
const
|
|
138
|
+
const config = useMemo(() => buildSessionConfig(filter, pageSize), [filter, pageSize]);
|
|
139
|
+
const _c = useInfiniteQuery({
|
|
28
140
|
initialPageParam: 1,
|
|
29
|
-
queryKey: [
|
|
141
|
+
queryKey: [config.queryKey, filter, pageSize],
|
|
30
142
|
queryFn: async ({ pageParam = 1 }) => {
|
|
31
|
-
var _a, _b
|
|
32
|
-
const params =
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
pageSize: (options === null || options === void 0 ? void 0 : options.pageSize) || PAGE_SIZE,
|
|
38
|
-
searchTerm: filter.searchTerm,
|
|
39
|
-
conversationIds: filter.conversationIds,
|
|
40
|
-
};
|
|
41
|
-
const res = await apiInstance.post(ENDPOINTS.chatService.getSessionsByTagOrStatus, params);
|
|
42
|
-
//FIND NEW CONVERSATIONS
|
|
43
|
-
const conversationList = useConversationStore.getState().conversationList;
|
|
44
|
-
const newConversations = ((_c = (_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.filter) === null || _c === void 0 ? void 0 : _c.call(_b, (session) => {
|
|
45
|
-
return !conversationList.some((conversation) => conversation.conversationID === session.conversationId);
|
|
46
|
-
})) || [];
|
|
47
|
-
if (newConversations === null || newConversations === void 0 ? void 0 : newConversations.length) {
|
|
48
|
-
DChatSDK.getMultipleConversation(newConversations.map((session) => session.conversationId)).then((res) => {
|
|
49
|
-
useConversationStore
|
|
50
|
-
.getState()
|
|
51
|
-
.updateConversationList(res.data, "filter");
|
|
143
|
+
var _a, _b;
|
|
144
|
+
const params = config.buildParams(pageParam);
|
|
145
|
+
const res = await apiInstance.post(config.endpoint, params);
|
|
146
|
+
if ((_b = (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.length) {
|
|
147
|
+
void syncSessionConversationsToStore(res.data.data).catch((error) => {
|
|
148
|
+
console.error("syncSessionConversationsToStore", error);
|
|
52
149
|
});
|
|
53
150
|
}
|
|
54
151
|
return res.data;
|
|
55
152
|
},
|
|
56
153
|
getNextPageParam: (lastPage) => {
|
|
57
154
|
var _a, _b;
|
|
58
|
-
const pageSize = (options === null || options === void 0 ? void 0 : options.pageSize) || PAGE_SIZE;
|
|
59
155
|
const dataLength = ((_a = lastPage === null || lastPage === void 0 ? void 0 : lastPage.data) === null || _a === void 0 ? void 0 : _a.length) || 0;
|
|
60
156
|
const currentPage = ((_b = lastPage === null || lastPage === void 0 ? void 0 : lastPage.pageable) === null || _b === void 0 ? void 0 : _b.pageNumber) || 1;
|
|
61
157
|
return dataLength < pageSize ? undefined : currentPage + 1;
|
|
62
158
|
},
|
|
63
|
-
enabled:
|
|
64
|
-
}), { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading } =
|
|
65
|
-
const
|
|
66
|
-
var _a
|
|
67
|
-
if (!data)
|
|
68
|
-
return
|
|
69
|
-
}
|
|
159
|
+
enabled: isEnabled && hasValidFilter(filter),
|
|
160
|
+
}), { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading } = _c, rest = __rest(_c, ["data", "fetchNextPage", "hasNextPage", "isFetchingNextPage", "isLoading"]);
|
|
161
|
+
const dataFlatten = useMemo(() => {
|
|
162
|
+
var _a;
|
|
163
|
+
if (!data)
|
|
164
|
+
return [];
|
|
70
165
|
const allItems = data.pages.flatMap((page) => page.data);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const session = sessionMap.get(conv.conversationID);
|
|
166
|
+
const sessionMap = new Map(allItems.map((session) => [session.conversationId, session]));
|
|
167
|
+
return (((_a = conversationList === null || conversationList === void 0 ? void 0 : conversationList.map((conversation) => {
|
|
168
|
+
const session = sessionMap.get(conversation.conversationID);
|
|
75
169
|
if (!session)
|
|
76
170
|
return null;
|
|
77
|
-
return Object.assign(Object.assign({}, session), { conversation
|
|
78
|
-
})) === null ||
|
|
79
|
-
return { dataFlatten: merged };
|
|
171
|
+
return Object.assign(Object.assign({}, session), { conversation });
|
|
172
|
+
})) === null || _a === void 0 ? void 0 : _a.filter((item) => Boolean(item))) || []);
|
|
80
173
|
}, [data, conversationList]);
|
|
81
174
|
return Object.assign({ data,
|
|
82
175
|
fetchNextPage,
|
|
@@ -85,10 +178,3 @@ export const useGetSession = ({ filter, options = {
|
|
|
85
178
|
isLoading,
|
|
86
179
|
dataFlatten }, rest);
|
|
87
180
|
};
|
|
88
|
-
function hasValidFilter(filter) {
|
|
89
|
-
return Object.values(filter).some((v) => {
|
|
90
|
-
if (typeof v === "string")
|
|
91
|
-
return v.trim() !== "";
|
|
92
|
-
return v !== undefined && v !== null;
|
|
93
|
-
});
|
|
94
|
-
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGetTeamSessionSummary.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetTeamSessionSummary.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAExE,eAAO,MAAM,wBAAwB,wFASjC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useQuery } from "@tanstack/react-query";
|
|
2
|
+
import { QUERY_KEYS } from "../../services/query";
|
|
3
|
+
import { apiInstance } from "../../services/api";
|
|
4
|
+
import { ENDPOINTS } from "../../services/routes";
|
|
5
|
+
export const useGetTeamSessionSummary = () => useQuery({
|
|
6
|
+
queryKey: [QUERY_KEYS.GET_TEAM_SESSION_SUMMARY],
|
|
7
|
+
queryFn: async () => {
|
|
8
|
+
var _a;
|
|
9
|
+
const res = await apiInstance.post(ENDPOINTS.chatService.getTeamSessionSummary, {});
|
|
10
|
+
return ((_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data) || [];
|
|
11
|
+
},
|
|
12
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIsJoinedGroup.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useIsJoinedGroup.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM;;;CAsBhD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
4
|
+
export const useIsJoinedGroup = (groupId) => {
|
|
5
|
+
const [isJoined, setIsJoined] = useState(null);
|
|
6
|
+
const checkIsJoined = useCallback(async () => {
|
|
7
|
+
if (!groupId) {
|
|
8
|
+
setIsJoined(null);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const { data } = await DChatSDK.isJoinGroup(groupId);
|
|
13
|
+
setIsJoined(Boolean(data));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.error("isJoinGroup error", error);
|
|
17
|
+
setIsJoined(null);
|
|
18
|
+
}
|
|
19
|
+
}, [groupId]);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
checkIsJoined();
|
|
22
|
+
}, [checkIsJoined]);
|
|
23
|
+
return { isJoined, refetch: checkIsJoined };
|
|
24
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface UseJoinGroupFlowParams {
|
|
2
|
+
groupId?: string;
|
|
3
|
+
latestConversationSessionId?: string;
|
|
4
|
+
refetchIsJoined: () => Promise<unknown>;
|
|
5
|
+
refetchConversationSessions: () => Promise<unknown>;
|
|
6
|
+
}
|
|
7
|
+
export declare const useJoinGroupFlow: ({ groupId, latestConversationSessionId, refetchIsJoined, refetchConversationSessions, }: UseJoinGroupFlowParams) => {
|
|
8
|
+
handleJoinGroup: () => Promise<void>;
|
|
9
|
+
isJoining: boolean;
|
|
10
|
+
};
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=useJoinGroupFlow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useJoinGroupFlow.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useJoinGroupFlow.ts"],"names":[],"mappings":"AAQA,UAAU,sBAAsB;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,2BAA2B,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAED,eAAO,MAAM,gBAAgB,GAAI,yFAK9B,sBAAsB;;;CA6DxB,CAAC"}
|