@droppii-org/chat-sdk 0.1.96 → 0.2.0
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/compose/ComposeNewMessageModal.d.ts +7 -0
- package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -0
- package/dist/components/compose/ComposeNewMessageModal.js +61 -0
- package/dist/components/conversation/ConversationByGroupItem.d.ts +7 -0
- package/dist/components/conversation/ConversationByGroupItem.d.ts.map +1 -0
- package/dist/components/conversation/ConversationByGroupItem.js +50 -0
- package/dist/components/conversation/DeskConversationList.d.ts.map +1 -1
- package/dist/components/conversation/DeskConversationList.js +15 -6
- package/dist/components/conversation/ThreadCard.js +1 -1
- package/dist/components/group/AddMemberModal.d.ts +9 -0
- package/dist/components/group/AddMemberModal.d.ts.map +1 -0
- package/dist/components/group/AddMemberModal.js +70 -0
- package/dist/components/group/AdminPermissionModal.d.ts +9 -0
- package/dist/components/group/AdminPermissionModal.d.ts.map +1 -0
- package/dist/components/group/AdminPermissionModal.js +63 -0
- package/dist/components/group/CreateGroupForm.d.ts +6 -0
- package/dist/components/group/CreateGroupForm.d.ts.map +1 -0
- package/dist/components/group/CreateGroupForm.js +74 -0
- package/dist/components/group/GroupMemberPicker.d.ts +8 -0
- package/dist/components/group/GroupMemberPicker.d.ts.map +1 -0
- package/dist/components/group/GroupMemberPicker.js +44 -0
- package/dist/components/group/MemberPermissionPanel.d.ts +8 -0
- package/dist/components/group/MemberPermissionPanel.d.ts.map +1 -0
- package/dist/components/group/MemberPermissionPanel.js +53 -0
- package/dist/components/media-resources/FileResourceList.js +1 -1
- package/dist/components/media-resources/LinkResourceItem.js +1 -1
- package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
- package/dist/components/message/GroupMembersDrawer.js +210 -28
- package/dist/components/message/MessageHeader.d.ts +2 -1
- package/dist/components/message/MessageHeader.d.ts.map +1 -1
- package/dist/components/message/MessageHeader.js +7 -2
- package/dist/components/message/MessageList.d.ts +1 -0
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +7 -2
- package/dist/components/message/SelectSession.d.ts.map +1 -1
- package/dist/components/message/SelectSession.js +3 -3
- package/dist/components/session/DeskAssignedSession.d.ts.map +1 -1
- package/dist/components/session/DeskAssignedSession.js +4 -1
- package/dist/components/session/DeskTeamInbox.js +1 -1
- package/dist/components/session/SessionFilterMenu.d.ts +3 -1
- package/dist/components/session/SessionFilterMenu.d.ts.map +1 -1
- package/dist/components/session/SessionFilterMenu.js +8 -5
- package/dist/components/session/sessionMenuItems.d.ts +3 -1
- package/dist/components/session/sessionMenuItems.d.ts.map +1 -1
- package/dist/components/session/sessionMenuItems.js +11 -1
- package/dist/components/thread/GroupThreadInfo.d.ts +11 -0
- package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -0
- package/dist/components/thread/GroupThreadInfo.js +156 -0
- package/dist/components/thread/ManualAssignPopover.js +2 -2
- package/dist/components/thread/SessionSection.d.ts.map +1 -1
- package/dist/components/thread/SessionSection.js +2 -8
- package/dist/components/thread/SingleThreadInfo.d.ts +6 -0
- package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -0
- package/dist/components/thread/SingleThreadInfo.js +70 -0
- package/dist/components/thread/ThreadInfo.d.ts +7 -1
- package/dist/components/thread/ThreadInfo.d.ts.map +1 -1
- package/dist/components/thread/ThreadInfo.js +14 -2
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +3 -0
- package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
- package/dist/hooks/global/useGlobalEvent.js +39 -0
- package/dist/hooks/group/useAddGroupMember.d.ts +7 -0
- package/dist/hooks/group/useAddGroupMember.d.ts.map +1 -0
- package/dist/hooks/group/useAddGroupMember.js +20 -0
- package/dist/hooks/group/useCreateGroup.d.ts +12 -0
- package/dist/hooks/group/useCreateGroup.d.ts.map +1 -0
- package/dist/hooks/group/useCreateGroup.js +62 -0
- package/dist/hooks/group/useDismissGroup.d.ts +4 -0
- package/dist/hooks/group/useDismissGroup.d.ts.map +1 -0
- package/dist/hooks/group/useDismissGroup.js +22 -0
- package/dist/hooks/group/useEligibleAccounts.d.ts +13 -0
- package/dist/hooks/group/useEligibleAccounts.d.ts.map +1 -0
- package/dist/hooks/group/useEligibleAccounts.js +23 -0
- package/dist/hooks/group/useEligibleAccountsForGroup.d.ts +9 -0
- package/dist/hooks/group/useEligibleAccountsForGroup.d.ts.map +1 -0
- package/dist/hooks/group/useEligibleAccountsForGroup.js +26 -0
- package/dist/hooks/group/useGetGroupCandidates.d.ts +14 -0
- package/dist/hooks/group/useGetGroupCandidates.d.ts.map +1 -0
- package/dist/hooks/group/useGetGroupCandidates.js +37 -0
- package/dist/hooks/group/useGroupMemberActions.d.ts +25 -0
- package/dist/hooks/group/useGroupMemberActions.d.ts.map +1 -0
- package/dist/hooks/group/useGroupMemberActions.js +54 -0
- package/dist/hooks/group/useGroupPermission.d.ts +15 -0
- package/dist/hooks/group/useGroupPermission.d.ts.map +1 -0
- package/dist/hooks/group/useGroupPermission.js +70 -0
- package/dist/hooks/group/useJoinedGroups.d.ts +13 -0
- package/dist/hooks/group/useJoinedGroups.d.ts.map +1 -0
- package/dist/hooks/group/useJoinedGroups.js +33 -0
- package/dist/hooks/group/useSearchGroupMembers.d.ts +8 -0
- package/dist/hooks/group/useSearchGroupMembers.d.ts.map +1 -0
- package/dist/hooks/group/useSearchGroupMembers.js +37 -0
- package/dist/hooks/group/useSetMemberPermission.d.ts +12 -0
- package/dist/hooks/group/useSetMemberPermission.d.ts.map +1 -0
- package/dist/hooks/group/useSetMemberPermission.js +32 -0
- package/dist/hooks/group/useToggleGroupSendMessage.d.ts +7 -0
- package/dist/hooks/group/useToggleGroupSendMessage.d.ts.map +1 -0
- package/dist/hooks/group/useToggleGroupSendMessage.js +22 -0
- package/dist/hooks/group/useUpdateGroupInfo.d.ts +7 -0
- package/dist/hooks/group/useUpdateGroupInfo.d.ts.map +1 -0
- package/dist/hooks/group/useUpdateGroupInfo.js +15 -0
- package/dist/hooks/session/useBlockUser.d.ts +10 -0
- package/dist/hooks/session/useBlockUser.d.ts.map +1 -0
- package/dist/hooks/session/useBlockUser.js +49 -0
- package/dist/hooks/session/useDeleteConversation.d.ts +4 -0
- package/dist/hooks/session/useDeleteConversation.d.ts.map +1 -0
- package/dist/hooks/session/useDeleteConversation.js +20 -0
- package/dist/hooks/session/useGetListSessionByConversation.d.ts +2 -1
- package/dist/hooks/session/useGetListSessionByConversation.d.ts.map +1 -1
- package/dist/hooks/session/useGetListSessionByConversation.js +2 -2
- package/dist/hooks/session/useToggleConversationNotification.d.ts +7 -0
- package/dist/hooks/session/useToggleConversationNotification.d.ts.map +1 -0
- package/dist/hooks/session/useToggleConversationNotification.js +15 -0
- package/dist/locales/vi/common.json +64 -1
- package/dist/locales/vi/conversation-inbox.json +33 -0
- package/dist/screens/desk-message/index.d.ts +3 -1
- package/dist/screens/desk-message/index.d.ts.map +1 -1
- package/dist/screens/desk-message/index.js +4 -2
- package/dist/services/query.d.ts +4 -0
- package/dist/services/query.d.ts.map +1 -1
- package/dist/services/query.js +4 -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/groupPermissionOverrides.d.ts +23 -0
- package/dist/store/groupPermissionOverrides.d.ts.map +1 -0
- package/dist/store/groupPermissionOverrides.js +12 -0
- package/dist/store/session.d.ts +3 -0
- package/dist/store/session.d.ts.map +1 -1
- package/dist/store/session.js +3 -1
- package/dist/styles/global.css +1 -1
- package/dist/types/dto.d.ts +12 -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/groupName.d.ts +8 -0
- package/dist/utils/groupName.d.ts.map +1 -0
- package/dist/utils/groupName.js +6 -0
- package/package.json +2 -2
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { GroupItem } from "@droppii-org/wasm-client-sdk";
|
|
2
|
+
type UpdateGroupInfoParams = Partial<GroupItem> & {
|
|
3
|
+
groupID: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const useUpdateGroupInfo: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, UpdateGroupInfoParams, unknown>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=useUpdateGroupInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUpdateGroupInfo.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useUpdateGroupInfo.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAIzD,KAAK,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtE,eAAO,MAAM,kBAAkB,yGAU9B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMutation } from "@tanstack/react-query";
|
|
3
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
4
|
+
import useConversationStore from "../../store/conversation";
|
|
5
|
+
export const useUpdateGroupInfo = () => {
|
|
6
|
+
return useMutation({
|
|
7
|
+
mutationFn: async (params) => {
|
|
8
|
+
const { data } = await DChatSDK.setGroupInfo(params);
|
|
9
|
+
return data;
|
|
10
|
+
},
|
|
11
|
+
onSuccess: (_data, variables) => {
|
|
12
|
+
void useConversationStore.getState().getCurrentGroupInfoByReq(variables.groupID);
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const useIsUserBlocked: (userID?: string) => {
|
|
2
|
+
isBlocked: boolean;
|
|
3
|
+
isLoading: boolean;
|
|
4
|
+
refetch: () => Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
export declare const useBlockUser: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, {
|
|
7
|
+
userID: string;
|
|
8
|
+
block: boolean;
|
|
9
|
+
}, unknown>;
|
|
10
|
+
//# sourceMappingURL=useBlockUser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBlockUser.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useBlockUser.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM;;;;CAgC/C,CAAC;AAEF,eAAO,MAAM,YAAY;YAE2B,MAAM;WAAS,OAAO;WAOzE,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { useMutation } from "@tanstack/react-query";
|
|
4
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
5
|
+
import emitter from "../../utils/events";
|
|
6
|
+
// Q6 (non-block, pending BE confirmation): block reuses the global openIM
|
|
7
|
+
// blacklist (addBlack/removeBlack/getBlackList) — same behavior for 1v1 and
|
|
8
|
+
// group member blocking. Adjust if BE confirms a per-group block is needed.
|
|
9
|
+
export const useIsUserBlocked = (userID) => {
|
|
10
|
+
const [isBlocked, setIsBlocked] = useState(false);
|
|
11
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
12
|
+
const refetch = useCallback(async () => {
|
|
13
|
+
if (!userID) {
|
|
14
|
+
setIsBlocked(false);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
setIsLoading(true);
|
|
18
|
+
try {
|
|
19
|
+
const { data } = await DChatSDK.getBlackList();
|
|
20
|
+
setIsBlocked((data !== null && data !== void 0 ? data : []).some((item) => item.userID === userID));
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error("Error fetching black list:", error);
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
setIsLoading(false);
|
|
27
|
+
}
|
|
28
|
+
}, [userID]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
void refetch();
|
|
31
|
+
}, [refetch]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
emitter.on("BLACK_LIST_CHANGED", refetch);
|
|
34
|
+
return () => {
|
|
35
|
+
emitter.off("BLACK_LIST_CHANGED", refetch);
|
|
36
|
+
};
|
|
37
|
+
}, [refetch]);
|
|
38
|
+
return { isBlocked, isLoading, refetch };
|
|
39
|
+
};
|
|
40
|
+
export const useBlockUser = () => {
|
|
41
|
+
return useMutation({
|
|
42
|
+
mutationFn: async ({ userID, block }) => {
|
|
43
|
+
const { data } = block
|
|
44
|
+
? await DChatSDK.addBlack({ toUserID: userID })
|
|
45
|
+
: await DChatSDK.removeBlack(userID);
|
|
46
|
+
return data;
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDeleteConversation.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useDeleteConversation.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,qBAAqB;oBAG2B,MAAM;WAalE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMutation } from "@tanstack/react-query";
|
|
3
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
4
|
+
import useConversationStore from "../../store/conversation";
|
|
5
|
+
import { QUERY_KEYS } from "../../services/query";
|
|
6
|
+
export const useDeleteConversation = () => {
|
|
7
|
+
return useMutation({
|
|
8
|
+
mutationKey: [QUERY_KEYS.DELETE_CONVERSATION],
|
|
9
|
+
mutationFn: async ({ conversationID }) => {
|
|
10
|
+
const { data } = await DChatSDK.deleteConversationAndDeleteAllMsg(conversationID);
|
|
11
|
+
return data;
|
|
12
|
+
},
|
|
13
|
+
onSuccess: (_data, variables) => {
|
|
14
|
+
useConversationStore.getState().clearSelectedConversation();
|
|
15
|
+
useConversationStore.setState((state) => ({
|
|
16
|
+
conversationList: state.conversationList.filter((conversation) => conversation.conversationID !== variables.conversationID),
|
|
17
|
+
}));
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
};
|
|
@@ -3,7 +3,8 @@ interface GetListSessionParams {
|
|
|
3
3
|
conversationId: string;
|
|
4
4
|
page?: number;
|
|
5
5
|
pageSize?: number;
|
|
6
|
+
enabled?: boolean;
|
|
6
7
|
}
|
|
7
|
-
export declare const useGetListSessionByConversation: ({ conversationId, page, pageSize, }: GetListSessionParams) => import("@tanstack/react-query").UseQueryResult<ISessionResponse[], Error>;
|
|
8
|
+
export declare const useGetListSessionByConversation: ({ conversationId, page, pageSize, enabled, }: GetListSessionParams) => import("@tanstack/react-query").UseQueryResult<ISessionResponse[], Error>;
|
|
8
9
|
export {};
|
|
9
10
|
//# sourceMappingURL=useGetListSessionByConversation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetListSessionByConversation.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetListSessionByConversation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI7D,UAAU,oBAAoB;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,+BAA+B,GAAI,
|
|
1
|
+
{"version":3,"file":"useGetListSessionByConversation.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useGetListSessionByConversation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI7D,UAAU,oBAAoB;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,+BAA+B,GAAI,8CAK7C,oBAAoB,8EAyBtB,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { apiInstance } from "../../services/api";
|
|
|
4
4
|
import { ENDPOINTS } from "../../services/routes";
|
|
5
5
|
import { PAGE_SIZE } from "../../constants";
|
|
6
6
|
import useAuthStore from "../../store/auth";
|
|
7
|
-
export const useGetListSessionByConversation = ({ conversationId, page = 1, pageSize = PAGE_SIZE.large, }) => {
|
|
7
|
+
export const useGetListSessionByConversation = ({ conversationId, page = 1, pageSize = PAGE_SIZE.large, enabled = true, }) => {
|
|
8
8
|
const applicationType = useAuthStore((state) => state.applicationType);
|
|
9
9
|
return useQuery({
|
|
10
10
|
queryKey: [
|
|
@@ -24,6 +24,6 @@ export const useGetListSessionByConversation = ({ conversationId, page = 1, page
|
|
|
24
24
|
});
|
|
25
25
|
return (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.data;
|
|
26
26
|
},
|
|
27
|
-
enabled: !!conversationId,
|
|
27
|
+
enabled: !!conversationId && enabled,
|
|
28
28
|
});
|
|
29
29
|
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
interface ToggleConversationNotificationParams {
|
|
2
|
+
conversationID: string;
|
|
3
|
+
notify: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare const useToggleConversationNotification: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, ToggleConversationNotificationParams, unknown>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=useToggleConversationNotification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToggleConversationNotification.d.ts","sourceRoot":"","sources":["../../../src/hooks/session/useToggleConversationNotification.ts"],"names":[],"mappings":"AAMA,UAAU,oCAAoC;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,iCAAiC,wHAU7C,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useMutation } from "@tanstack/react-query";
|
|
3
|
+
import { MessageReceiveOptType } from "@droppii-org/wasm-client-sdk";
|
|
4
|
+
import { DChatSDK } from "../../constants/sdk";
|
|
5
|
+
export const useToggleConversationNotification = () => {
|
|
6
|
+
return useMutation({
|
|
7
|
+
mutationFn: async ({ conversationID, notify }) => {
|
|
8
|
+
const { data } = await DChatSDK.setConversationRecvMessageOpt({
|
|
9
|
+
conversationID,
|
|
10
|
+
opt: notify ? MessageReceiveOptType.Normal : MessageReceiveOptType.NotNotify,
|
|
11
|
+
});
|
|
12
|
+
return data;
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
};
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"download": "Tải xuống",
|
|
22
22
|
"active_sessions": "Đang mở",
|
|
23
23
|
"closed_sessions": "Đã đóng",
|
|
24
|
+
"all_groups": "Toàn bộ",
|
|
24
25
|
"unassigned": "Chưa phân công",
|
|
25
26
|
"waiting_process": "Chờ xử lý",
|
|
26
27
|
"in_process": "Đang xử lý",
|
|
@@ -125,13 +126,34 @@
|
|
|
125
126
|
"session_close_button": "Đóng",
|
|
126
127
|
"member_count": "{{count}} thành viên",
|
|
127
128
|
"members": "Thành viên",
|
|
129
|
+
"search_member_placeholder": "Tìm kiếm thành viên",
|
|
128
130
|
"no_group_members": "Không có thành viên",
|
|
131
|
+
"no_member_found": "Không tìm thấy thành viên",
|
|
129
132
|
"load_group_member_list_failed": "Không thể tải danh sách thành viên",
|
|
130
133
|
"group_creator": "Người tạo nhóm",
|
|
131
134
|
"group_owner": "Chủ nhóm",
|
|
132
135
|
"group_admin": "Quản trị viên",
|
|
133
136
|
"group_member": "Thành viên",
|
|
134
137
|
"leave_group": "Rời khỏi nhóm",
|
|
138
|
+
"mute_member": "Tắt quyền gửi tin nhắn",
|
|
139
|
+
"unmute_member": "Bật lại quyền gửi tin nhắn",
|
|
140
|
+
"mute_member_success": "Đã tắt quyền gửi tin nhắn",
|
|
141
|
+
"unmute_member_success": "Đã bật lại quyền gửi tin nhắn",
|
|
142
|
+
"send_message": "Gửi tin nhắn",
|
|
143
|
+
"transfer_owner": "Chuyển quyền chủ nhóm",
|
|
144
|
+
"transfer_owner_success": "Đã chuyển quyền chủ nhóm",
|
|
145
|
+
"transfer_owner_confirm_title": "Chuyển quyền chủ nhóm",
|
|
146
|
+
"transfer_owner_confirm_message": "Bạn có chắc muốn chuyển quyền chủ nhóm cho {{name}}? Bạn sẽ trở thành quản trị viên.",
|
|
147
|
+
"assign_as_admin": "Chỉ định làm quản trị viên",
|
|
148
|
+
"assign_as_admin_success": "Đã chỉ định làm quản trị viên",
|
|
149
|
+
"remove_from_admin": "Xoá khỏi quản trị viên",
|
|
150
|
+
"remove_from_admin_success": "Đã xoá khỏi quản trị viên",
|
|
151
|
+
"remove_from_group": "Xoá khỏi nhóm",
|
|
152
|
+
"remove_member_success": "Đã xoá thành viên khỏi nhóm",
|
|
153
|
+
"remove_member_failed": "Không thể xoá thành viên. Vui lòng thử lại",
|
|
154
|
+
"remove_member_confirm_title": "Xoá thành viên khỏi nhóm",
|
|
155
|
+
"remove_member_confirm_message": "Bạn có chắc muốn xoá {{name}} khỏi nhóm?",
|
|
156
|
+
"remove_and_block": "Xoá và chặn",
|
|
135
157
|
"choose_emoji": "Chọn biểu tượng cảm xúc",
|
|
136
158
|
"emoji_smileys": "Mặt cười",
|
|
137
159
|
"emoji_nature": "Động vật",
|
|
@@ -154,6 +176,7 @@
|
|
|
154
176
|
"my_inbox_tab": "My inbox",
|
|
155
177
|
"team_messages": "Tin nhắn nhóm",
|
|
156
178
|
"join_group_required": "Bạn phải là thành viên để gửi tin nhắn",
|
|
179
|
+
"send_message_disabled": "Chỉ quản trị viên được phép gửi tin nhắn",
|
|
157
180
|
"join_group": "Tham gia",
|
|
158
181
|
"join_group_success": "Tham gia nhóm thành công",
|
|
159
182
|
"join_group_failed": "Tham gia nhóm thất bại",
|
|
@@ -166,5 +189,45 @@
|
|
|
166
189
|
"session_closed_modal_description": "Hãy tạo mới hoặc mở lại session để tiếp tục gửi tin nhắn!",
|
|
167
190
|
"session_closed_modal_reopen": "Mở lại",
|
|
168
191
|
"session_closed_modal_create_new": "Tạo mới",
|
|
169
|
-
"session_action_error": "Không thể thực hiện tác vụ này"
|
|
192
|
+
"session_action_error": "Không thể thực hiện tác vụ này",
|
|
193
|
+
"thread_info_title": "Thông tin",
|
|
194
|
+
"no_description": "Hiện tại chưa có mô tả...",
|
|
195
|
+
"description": "Mô tả",
|
|
196
|
+
"enter_group_description": "Nhập mô tả nhóm...",
|
|
197
|
+
"save": "Lưu",
|
|
198
|
+
"notification": "Thông báo",
|
|
199
|
+
"allow_send_message": "Cho phép gửi tin nhắn",
|
|
200
|
+
"muted_chat_list": "Danh sách tắt chat",
|
|
201
|
+
"block_list": "Danh sách chặn",
|
|
202
|
+
"member_permission_settings": "Cài đặt quyền thành viên",
|
|
203
|
+
"admin_permission_settings": "Cài đặt quyền quản trị viên",
|
|
204
|
+
"permission_send_message": "Gửi tin nhắn",
|
|
205
|
+
"permission_add_member": "Thêm thành viên",
|
|
206
|
+
"permission_pin_message": "Ghim tin nhắn",
|
|
207
|
+
"permission_pin_unpin_message": "Ghim/bỏ ghim tin nhắn",
|
|
208
|
+
"permission_view_member_info": "Xem thông tin thành viên",
|
|
209
|
+
"permission_remove_member": "Xoá thành viên",
|
|
210
|
+
"permission_update_group_info": "Cập nhật thông tin nhóm",
|
|
211
|
+
"update_member_permissions_success": "Cập nhật quyền thành viên thành công",
|
|
212
|
+
"update_admin_permissions_success": "Cập nhật quyền quản trị viên thành công",
|
|
213
|
+
"invite_via_link": "Mời vào nhóm bằng link",
|
|
214
|
+
"invite_via_link_pending": "Tính năng đang được phát triển",
|
|
215
|
+
"delete_conversation": "Xóa trò chuyện",
|
|
216
|
+
"disband_group": "Giải tán nhóm",
|
|
217
|
+
"update_group_info_failed": "Cập nhật thông tin nhóm thất bại",
|
|
218
|
+
"disband_group_success": "Đã giải tán nhóm",
|
|
219
|
+
"disband_group_failed": "Giải tán nhóm thất bại",
|
|
220
|
+
"disband_group_confirm_title": "Giải tán nhóm?",
|
|
221
|
+
"disband_group_confirm_message": "Bạn có chắc chắn muốn giải tán nhóm này không? Hành động này không thể hoàn tác.",
|
|
222
|
+
"delete_conversation_success": "Đã xóa trò chuyện",
|
|
223
|
+
"delete_conversation_failed": "Xóa trò chuyện thất bại",
|
|
224
|
+
"delete_conversation_confirm_title": "Xóa trò chuyện?",
|
|
225
|
+
"delete_conversation_confirm_message": "Bạn có chắc chắn muốn xóa trò chuyện này không? Hành động này không thể hoàn tác.",
|
|
226
|
+
"feature_coming_soon": "Tính năng đang được phát triển",
|
|
227
|
+
"bot_tag": "Bot",
|
|
228
|
+
"block_user": "Chặn người dùng",
|
|
229
|
+
"unblock_user": "Bỏ chặn người dùng",
|
|
230
|
+
"block_user_success": "Đã chặn người dùng",
|
|
231
|
+
"unblock_user_success": "Đã bỏ chặn người dùng",
|
|
232
|
+
"block_user_failed": "Thao tác chặn/bỏ chặn thất bại"
|
|
170
233
|
}
|
|
@@ -2,6 +2,39 @@
|
|
|
2
2
|
"tabs": {
|
|
3
3
|
"messages": "Tin nhắn"
|
|
4
4
|
},
|
|
5
|
+
"search_placeholder": "Tìm kiếm",
|
|
6
|
+
"compose": {
|
|
7
|
+
"title": "Tin nhắn mới",
|
|
8
|
+
"search_member_placeholder": "Tìm kiếm thành viên",
|
|
9
|
+
"create_group": "Tạo nhóm chat",
|
|
10
|
+
"recent_suggestions": "Gợi ý gần đây",
|
|
11
|
+
"no_member_found": "Không tìm thấy thành viên"
|
|
12
|
+
},
|
|
13
|
+
"create_group": {
|
|
14
|
+
"title": "Tạo nhóm chat",
|
|
15
|
+
"back": "Quay lại",
|
|
16
|
+
"name_placeholder": "Nhập tên nhóm (tùy chọn)",
|
|
17
|
+
"privacy_label": "Quyền riêng tư",
|
|
18
|
+
"privacy_private": "Riêng tư",
|
|
19
|
+
"privacy_private_desc": "Chỉ thành viên mới có thể truy cập và tìm kiếm nhóm chat",
|
|
20
|
+
"privacy_public": "Công khai",
|
|
21
|
+
"privacy_public_desc": "Nhóm mở cho tất cả mọi người có thể tìm kiếm và tham gia",
|
|
22
|
+
"search_member_placeholder": "Tìm kiếm thành viên",
|
|
23
|
+
"selected_count": "Đã chọn: {{count}}",
|
|
24
|
+
"clear_all": "Xóa tất cả",
|
|
25
|
+
"no_member_found": "Không tìm thấy thành viên",
|
|
26
|
+
"no_member_selected": "Chưa chọn thành viên nào",
|
|
27
|
+
"cancel": "Hủy",
|
|
28
|
+
"submit": "Tạo nhóm",
|
|
29
|
+
"create_group_success": "Tạo nhóm thành công",
|
|
30
|
+
"create_group_failed": "Không thể tạo nhóm. Vui lòng thử lại"
|
|
31
|
+
},
|
|
32
|
+
"add_member": {
|
|
33
|
+
"title": "Thêm người vào nhóm",
|
|
34
|
+
"confirm": "Xác nhận",
|
|
35
|
+
"add_member_success": "Thêm thành viên thành công",
|
|
36
|
+
"add_member_failed": "Không thể thêm thành viên. Vui lòng thử lại"
|
|
37
|
+
},
|
|
5
38
|
"empty": {
|
|
6
39
|
"no_conversations": "Chưa có cuộc trò chuyện",
|
|
7
40
|
"no_messages": "Chưa có tin nhắn"
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { GroupThreadInfoConfig } from "../../components/thread/GroupThreadInfo";
|
|
1
2
|
interface DChatDeskMessageProps {
|
|
2
3
|
openCreateCannedModal?: () => void;
|
|
4
|
+
groupThreadInfoConfig?: GroupThreadInfoConfig;
|
|
3
5
|
}
|
|
4
|
-
declare const DChatDeskMessage: ({ openCreateCannedModal }: DChatDeskMessageProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare const DChatDeskMessage: ({ openCreateCannedModal, groupThreadInfoConfig, }: DChatDeskMessageProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
7
|
export default DChatDeskMessage;
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screens/desk-message/index.tsx"],"names":[],"mappings":"AAWA,UAAU,qBAAqB;IAC7B,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/screens/desk-message/index.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,UAAU,qBAAqB;IAC7B,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IACnC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAED,QAAA,MAAM,gBAAgB,GAAI,mDAGvB,qBAAqB,4CAqCvB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useBoolean } from "ahooks";
|
|
3
4
|
import MessageList from "../../components/message/MessageList";
|
|
4
5
|
import DeskConversationList from "../../components/conversation/DeskConversationList";
|
|
5
6
|
import { useChatContext } from "../../context/ChatContext";
|
|
@@ -8,10 +9,11 @@ import { ConnectStatus } from "../../types/chat";
|
|
|
8
9
|
import useConversationStore from "../../store/conversation";
|
|
9
10
|
import DeskAssignedSession from "../../components/session/DeskAssignedSession";
|
|
10
11
|
import ThreadInfo from "../../components/thread/ThreadInfo";
|
|
11
|
-
const DChatDeskMessage = ({ openCreateCannedModal }) => {
|
|
12
|
+
const DChatDeskMessage = ({ openCreateCannedModal, groupThreadInfoConfig, }) => {
|
|
12
13
|
const selectedConversationId = useConversationStore((state) => state.selectedConversationId);
|
|
13
14
|
const searchClientMsgID = useConversationStore((state) => state.searchClientMsgID);
|
|
15
|
+
const [isThreadInfoOpen, { toggle: toggleThreadInfo, setFalse: closeThreadInfo }] = useBoolean(false);
|
|
14
16
|
const { connectStatus } = useChatContext();
|
|
15
|
-
return (_jsx(_Fragment, { children: connectStatus === ConnectStatus.Connected ? (_jsxs("div", { className: "flex flex-1 flex-row h-screen bg-
|
|
17
|
+
return (_jsx(_Fragment, { children: connectStatus === ConnectStatus.Connected ? (_jsxs("div", { className: "flex flex-1 flex-row h-screen bg-[#f5f5f5]", children: [_jsx(DeskAssignedSession, {}), _jsx(DeskConversationList, {}), _jsx(MessageList, { conversationId: selectedConversationId, searchClientMsgID: searchClientMsgID, openCreateCannedModal: openCreateCannedModal, onOpenThreadInfo: toggleThreadInfo }), _jsx(ThreadInfo, { isOpen: isThreadInfoOpen, onClose: closeThreadInfo, groupConfig: groupThreadInfoConfig })] })) : (_jsx("div", { className: "flex flex-1 flex-row h-screen bg-[#f5f5f5]", children: connectStatus === ConnectStatus.Connecting && _jsx(Spin, { fullscreen: true }) })) }));
|
|
16
18
|
};
|
|
17
19
|
export default DChatDeskMessage;
|
package/dist/services/query.d.ts
CHANGED
|
@@ -37,5 +37,9 @@ export declare const QUERY_KEYS: {
|
|
|
37
37
|
CREATE_SESSION: string;
|
|
38
38
|
REOPEN_SESSION: string;
|
|
39
39
|
GET_MESSAGE_RESOURCES: string;
|
|
40
|
+
GET_GROUP_CANDIDATES: string;
|
|
41
|
+
GET_JOINED_GROUP_LIST: string;
|
|
42
|
+
GET_BLACK_LIST: string;
|
|
43
|
+
DELETE_CONVERSATION: string;
|
|
40
44
|
};
|
|
41
45
|
//# sourceMappingURL=query.d.ts.map
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CtB,CAAC"}
|
package/dist/services/query.js
CHANGED
|
@@ -37,4 +37,8 @@ export const QUERY_KEYS = {
|
|
|
37
37
|
CREATE_SESSION: "CREATE_SESSION",
|
|
38
38
|
REOPEN_SESSION: "REOPEN_SESSION",
|
|
39
39
|
GET_MESSAGE_RESOURCES: "GET_MESSAGE_RESOURCES",
|
|
40
|
+
GET_GROUP_CANDIDATES: "GET_GROUP_CANDIDATES",
|
|
41
|
+
GET_JOINED_GROUP_LIST: "GET_JOINED_GROUP_LIST",
|
|
42
|
+
GET_BLACK_LIST: "GET_BLACK_LIST",
|
|
43
|
+
DELETE_CONVERSATION: "DELETE_CONVERSATION",
|
|
40
44
|
};
|
|
@@ -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
|
|
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;;;;;;;;;iCAUZ,MAAM;4CAEK,MAAM;;;gDAIF,MAAM;qCAEjB,MAAM;uCAEJ,MAAM;0CAEH,MAAM;yCAEP,MAAM;8BAEjB,MAAM;wCACI,MAAM;;;;;;;;;;CAWzC,CAAC"}
|
package/dist/services/routes.js
CHANGED
|
@@ -19,6 +19,7 @@ export const ENDPOINTS = {
|
|
|
19
19
|
getTeamSessionSummary: "chat-service/v1/crm/sessions/teams/summary",
|
|
20
20
|
getTeamSessionsByQuery: "chat-service/v1/crm/sessions/team/query",
|
|
21
21
|
getMyTeams: "/chat-service/v1/crm/teams/user/me",
|
|
22
|
+
getGroupCandidates: "/chat-service/v1/crm/users/group-candidates",
|
|
22
23
|
getCannedCategories: "/chat-service/v1/crm/canned-responses/categories",
|
|
23
24
|
getCannedResponses: "chat-service/v1/crm/canned-responses/search",
|
|
24
25
|
createSession: "chat-service/v1/crm/sessions",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface MemberPermissionOverrides {
|
|
2
|
+
sendMessage: boolean;
|
|
3
|
+
addMember: boolean;
|
|
4
|
+
pinMessage: boolean;
|
|
5
|
+
viewMemberInformation: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface AdminPermissionOverrides {
|
|
8
|
+
sendMessage: boolean;
|
|
9
|
+
pinMessage: boolean;
|
|
10
|
+
viewMemberInformation: boolean;
|
|
11
|
+
addMember: boolean;
|
|
12
|
+
removeMember: boolean;
|
|
13
|
+
updateGroupInfo: boolean;
|
|
14
|
+
}
|
|
15
|
+
interface GroupPermissionOverridesStore {
|
|
16
|
+
memberOverridesByGroup: Record<string, MemberPermissionOverrides>;
|
|
17
|
+
adminOverridesByGroup: Record<string, AdminPermissionOverrides>;
|
|
18
|
+
setMemberOverrides: (groupID: string, overrides: MemberPermissionOverrides) => void;
|
|
19
|
+
setAdminOverrides: (groupID: string, overrides: AdminPermissionOverrides) => void;
|
|
20
|
+
}
|
|
21
|
+
declare const useGroupPermissionOverridesStore: import("zustand").UseBoundStore<import("zustand").StoreApi<GroupPermissionOverridesStore>>;
|
|
22
|
+
export default useGroupPermissionOverridesStore;
|
|
23
|
+
//# sourceMappingURL=groupPermissionOverrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupPermissionOverrides.d.ts","sourceRoot":"","sources":["../../src/store/groupPermissionOverrides.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,6BAA6B;IACrC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAClE,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IAChE,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,yBAAyB,KAAK,IAAI,CAAC;IACpF,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACnF;AAED,QAAA,MAAM,gCAAgC,4FAmBrC,CAAC;AAEF,eAAe,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { create } from "zustand";
|
|
2
|
+
const useGroupPermissionOverridesStore = create((set) => ({
|
|
3
|
+
memberOverridesByGroup: {},
|
|
4
|
+
adminOverridesByGroup: {},
|
|
5
|
+
setMemberOverrides: (groupID, overrides) => set((state) => ({
|
|
6
|
+
memberOverridesByGroup: Object.assign(Object.assign({}, state.memberOverridesByGroup), { [groupID]: overrides }),
|
|
7
|
+
})),
|
|
8
|
+
setAdminOverrides: (groupID, overrides) => set((state) => ({
|
|
9
|
+
adminOverridesByGroup: Object.assign(Object.assign({}, state.adminOverridesByGroup), { [groupID]: overrides }),
|
|
10
|
+
})),
|
|
11
|
+
}));
|
|
12
|
+
export default useGroupPermissionOverridesStore;
|
package/dist/store/session.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { IFilterSummary } from "./type";
|
|
2
|
+
export type ConversationViewMode = "sessions" | "allGroups";
|
|
2
3
|
interface SessionStore {
|
|
3
4
|
filterSummary: IFilterSummary;
|
|
4
5
|
setFilterSummary: (filterSummary: IFilterSummary) => void;
|
|
6
|
+
viewMode: ConversationViewMode;
|
|
7
|
+
setViewMode: (viewMode: ConversationViewMode) => void;
|
|
5
8
|
}
|
|
6
9
|
declare const useSessionStore: import("zustand").UseBoundStore<import("zustand").StoreApi<SessionStore>>;
|
|
7
10
|
export default useSessionStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/store/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGxC,UAAU,YAAY;IACpB,aAAa,EAAE,cAAc,CAAC;IAC9B,gBAAgB,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/store/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGxC,MAAM,MAAM,oBAAoB,GAAG,UAAU,GAAG,WAAW,CAAC;AAE5D,UAAU,YAAY;IACpB,aAAa,EAAE,cAAc,CAAC;IAC9B,gBAAgB,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1D,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACvD;AAED,QAAA,MAAM,eAAe,2EASlB,CAAC;AAEJ,eAAe,eAAe,CAAC"}
|
package/dist/store/session.js
CHANGED
|
@@ -5,6 +5,8 @@ const useSessionStore = create((set) => ({
|
|
|
5
5
|
status: SessionStatus.IN_PROCESS,
|
|
6
6
|
tag: undefined,
|
|
7
7
|
},
|
|
8
|
-
setFilterSummary: (filterSummary) => set({ filterSummary }),
|
|
8
|
+
setFilterSummary: (filterSummary) => set({ filterSummary, viewMode: "sessions" }),
|
|
9
|
+
viewMode: "sessions",
|
|
10
|
+
setViewMode: (viewMode) => set({ viewMode }),
|
|
9
11
|
}));
|
|
10
12
|
export default useSessionStore;
|