@droppii-org/chat-sdk 0.1.97 → 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.
Files changed (107) hide show
  1. package/dist/components/compose/ComposeNewMessageModal.d.ts.map +1 -1
  2. package/dist/components/compose/ComposeNewMessageModal.js +1 -1
  3. package/dist/components/conversation/ThreadCard.js +1 -1
  4. package/dist/components/group/AddMemberModal.d.ts +9 -0
  5. package/dist/components/group/AddMemberModal.d.ts.map +1 -0
  6. package/dist/components/group/AddMemberModal.js +70 -0
  7. package/dist/components/group/AdminPermissionModal.d.ts +9 -0
  8. package/dist/components/group/AdminPermissionModal.d.ts.map +1 -0
  9. package/dist/components/group/AdminPermissionModal.js +63 -0
  10. package/dist/components/group/CreateGroupForm.d.ts +1 -2
  11. package/dist/components/group/CreateGroupForm.d.ts.map +1 -1
  12. package/dist/components/group/CreateGroupForm.js +4 -4
  13. package/dist/components/group/GroupMemberPicker.d.ts.map +1 -1
  14. package/dist/components/group/GroupMemberPicker.js +16 -8
  15. package/dist/components/group/MemberPermissionPanel.d.ts +8 -0
  16. package/dist/components/group/MemberPermissionPanel.d.ts.map +1 -0
  17. package/dist/components/group/MemberPermissionPanel.js +53 -0
  18. package/dist/components/media-resources/FileResourceList.js +1 -1
  19. package/dist/components/media-resources/LinkResourceItem.js +1 -1
  20. package/dist/components/message/GroupMembersDrawer.d.ts.map +1 -1
  21. package/dist/components/message/GroupMembersDrawer.js +210 -28
  22. package/dist/components/message/MessageHeader.d.ts +2 -1
  23. package/dist/components/message/MessageHeader.d.ts.map +1 -1
  24. package/dist/components/message/MessageHeader.js +7 -2
  25. package/dist/components/message/MessageList.d.ts +1 -0
  26. package/dist/components/message/MessageList.d.ts.map +1 -1
  27. package/dist/components/message/MessageList.js +7 -2
  28. package/dist/components/message/SelectSession.d.ts.map +1 -1
  29. package/dist/components/message/SelectSession.js +3 -3
  30. package/dist/components/session/DeskTeamInbox.js +1 -1
  31. package/dist/components/thread/GroupThreadInfo.d.ts +11 -0
  32. package/dist/components/thread/GroupThreadInfo.d.ts.map +1 -0
  33. package/dist/components/thread/GroupThreadInfo.js +156 -0
  34. package/dist/components/thread/ManualAssignPopover.js +2 -2
  35. package/dist/components/thread/SessionSection.d.ts.map +1 -1
  36. package/dist/components/thread/SessionSection.js +2 -8
  37. package/dist/components/thread/SingleThreadInfo.d.ts +6 -0
  38. package/dist/components/thread/SingleThreadInfo.d.ts.map +1 -0
  39. package/dist/components/thread/SingleThreadInfo.js +70 -0
  40. package/dist/components/thread/ThreadInfo.d.ts +7 -1
  41. package/dist/components/thread/ThreadInfo.d.ts.map +1 -1
  42. package/dist/components/thread/ThreadInfo.js +14 -2
  43. package/dist/constants/index.d.ts +1 -0
  44. package/dist/constants/index.d.ts.map +1 -1
  45. package/dist/constants/index.js +3 -0
  46. package/dist/hooks/global/useGlobalEvent.d.ts.map +1 -1
  47. package/dist/hooks/global/useGlobalEvent.js +27 -0
  48. package/dist/hooks/group/useAddGroupMember.d.ts +7 -0
  49. package/dist/hooks/group/useAddGroupMember.d.ts.map +1 -0
  50. package/dist/hooks/group/useAddGroupMember.js +20 -0
  51. package/dist/hooks/group/useDismissGroup.d.ts +4 -0
  52. package/dist/hooks/group/useDismissGroup.d.ts.map +1 -0
  53. package/dist/hooks/group/useDismissGroup.js +22 -0
  54. package/dist/hooks/group/useEligibleAccounts.d.ts +3 -0
  55. package/dist/hooks/group/useEligibleAccounts.d.ts.map +1 -1
  56. package/dist/hooks/group/useEligibleAccounts.js +9 -9
  57. package/dist/hooks/group/useEligibleAccountsForGroup.d.ts +9 -0
  58. package/dist/hooks/group/useEligibleAccountsForGroup.d.ts.map +1 -0
  59. package/dist/hooks/group/useEligibleAccountsForGroup.js +26 -0
  60. package/dist/hooks/group/useGetGroupCandidates.d.ts +7 -2
  61. package/dist/hooks/group/useGetGroupCandidates.d.ts.map +1 -1
  62. package/dist/hooks/group/useGetGroupCandidates.js +33 -16
  63. package/dist/hooks/group/useGroupMemberActions.d.ts +25 -0
  64. package/dist/hooks/group/useGroupMemberActions.d.ts.map +1 -0
  65. package/dist/hooks/group/useGroupMemberActions.js +54 -0
  66. package/dist/hooks/group/useGroupPermission.d.ts +15 -0
  67. package/dist/hooks/group/useGroupPermission.d.ts.map +1 -0
  68. package/dist/hooks/group/useGroupPermission.js +70 -0
  69. package/dist/hooks/group/useSearchGroupMembers.d.ts +8 -0
  70. package/dist/hooks/group/useSearchGroupMembers.d.ts.map +1 -0
  71. package/dist/hooks/group/useSearchGroupMembers.js +37 -0
  72. package/dist/hooks/group/useSetMemberPermission.d.ts +12 -0
  73. package/dist/hooks/group/useSetMemberPermission.d.ts.map +1 -0
  74. package/dist/hooks/group/useSetMemberPermission.js +32 -0
  75. package/dist/hooks/group/useToggleGroupSendMessage.d.ts +7 -0
  76. package/dist/hooks/group/useToggleGroupSendMessage.d.ts.map +1 -0
  77. package/dist/hooks/group/useToggleGroupSendMessage.js +22 -0
  78. package/dist/hooks/group/useUpdateGroupInfo.d.ts +7 -0
  79. package/dist/hooks/group/useUpdateGroupInfo.d.ts.map +1 -0
  80. package/dist/hooks/group/useUpdateGroupInfo.js +15 -0
  81. package/dist/hooks/session/useBlockUser.d.ts +10 -0
  82. package/dist/hooks/session/useBlockUser.d.ts.map +1 -0
  83. package/dist/hooks/session/useBlockUser.js +49 -0
  84. package/dist/hooks/session/useDeleteConversation.d.ts +4 -0
  85. package/dist/hooks/session/useDeleteConversation.d.ts.map +1 -0
  86. package/dist/hooks/session/useDeleteConversation.js +20 -0
  87. package/dist/hooks/session/useGetListSessionByConversation.d.ts +2 -1
  88. package/dist/hooks/session/useGetListSessionByConversation.d.ts.map +1 -1
  89. package/dist/hooks/session/useGetListSessionByConversation.js +2 -2
  90. package/dist/hooks/session/useToggleConversationNotification.d.ts +7 -0
  91. package/dist/hooks/session/useToggleConversationNotification.d.ts.map +1 -0
  92. package/dist/hooks/session/useToggleConversationNotification.js +15 -0
  93. package/dist/locales/vi/common.json +63 -1
  94. package/dist/locales/vi/conversation-inbox.json +6 -0
  95. package/dist/screens/desk-message/index.d.ts +3 -1
  96. package/dist/screens/desk-message/index.d.ts.map +1 -1
  97. package/dist/screens/desk-message/index.js +4 -5
  98. package/dist/services/query.d.ts +2 -0
  99. package/dist/services/query.d.ts.map +1 -1
  100. package/dist/services/query.js +2 -0
  101. package/dist/store/groupPermissionOverrides.d.ts +23 -0
  102. package/dist/store/groupPermissionOverrides.d.ts.map +1 -0
  103. package/dist/store/groupPermissionOverrides.js +12 -0
  104. package/dist/styles/global.css +1 -1
  105. package/dist/utils/events.d.ts +1 -0
  106. package/dist/utils/events.d.ts.map +1 -1
  107. package/package.json +2 -2
@@ -1,9 +1,14 @@
1
1
  import { BaseResponse, IGroupCandidateResponse } from "../../types/dto";
2
2
  interface UseGetGroupCandidatesParams {
3
- page?: number;
4
3
  searchTerm?: string;
5
4
  enabled?: boolean;
6
5
  }
7
- export declare const useGetGroupCandidates: ({ page, searchTerm, enabled, }: UseGetGroupCandidatesParams) => import("@tanstack/react-query").UseQueryResult<BaseResponse<IGroupCandidateResponse[]>, Error>;
6
+ export declare const useGetGroupCandidates: ({ searchTerm, enabled, }: UseGetGroupCandidatesParams) => {
7
+ candidates: IGroupCandidateResponse[];
8
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<BaseResponse<IGroupCandidateResponse[]>, unknown>, Error>>;
9
+ hasNextPage: boolean;
10
+ isFetchingNextPage: boolean;
11
+ isLoading: boolean;
12
+ };
8
13
  export {};
9
14
  //# sourceMappingURL=useGetGroupCandidates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useGetGroupCandidates.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGetGroupCandidates.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAIpE,UAAU,2BAA2B;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,qBAAqB,GAAI,gCAInC,2BAA2B,mGAkB1B,CAAC"}
1
+ {"version":3,"file":"useGetGroupCandidates.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGetGroupCandidates.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAIpE,UAAU,2BAA2B;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,qBAAqB,GAAI,0BAGnC,2BAA2B;;;;;;CAqC7B,CAAC"}
@@ -1,20 +1,37 @@
1
- import { useQuery, keepPreviousData } from "@tanstack/react-query";
1
+ import { useMemo } from "react";
2
+ import { useInfiniteQuery } from "@tanstack/react-query";
2
3
  import { QUERY_KEYS } from "../../services/query";
3
4
  import { apiInstance } from "../../services/api";
4
5
  import { ENDPOINTS } from "../../services/routes";
5
6
  const GROUP_CANDIDATES_PAGE_SIZE = 20;
6
- export const useGetGroupCandidates = ({ page = 1, searchTerm = "", enabled = true, }) => useQuery({
7
- queryKey: [QUERY_KEYS.GET_GROUP_CANDIDATES, page, searchTerm],
8
- queryFn: async () => {
9
- const res = await apiInstance.get(ENDPOINTS.chatService.getGroupCandidates, {
10
- params: {
11
- page,
12
- pageSize: GROUP_CANDIDATES_PAGE_SIZE,
13
- searchTerm: searchTerm || undefined,
14
- },
15
- });
16
- return res === null || res === void 0 ? void 0 : res.data;
17
- },
18
- enabled,
19
- placeholderData: keepPreviousData,
20
- });
7
+ export const useGetGroupCandidates = ({ searchTerm = "", enabled = true, }) => {
8
+ const { data, fetchNextPage, hasNextPage, isFetchingNextPage, isLoading } = useInfiniteQuery({
9
+ initialPageParam: 1,
10
+ queryKey: [QUERY_KEYS.GET_GROUP_CANDIDATES, searchTerm],
11
+ queryFn: async ({ pageParam = 1 }) => {
12
+ const res = await apiInstance.get(ENDPOINTS.chatService.getGroupCandidates, {
13
+ params: {
14
+ page: pageParam,
15
+ pageSize: GROUP_CANDIDATES_PAGE_SIZE,
16
+ searchTerm: searchTerm || undefined,
17
+ },
18
+ });
19
+ return res === null || res === void 0 ? void 0 : res.data;
20
+ },
21
+ getNextPageParam: (lastPage, allPages) => {
22
+ var _a, _b;
23
+ const totalPages = (_b = (_a = lastPage === null || lastPage === void 0 ? void 0 : lastPage.pageable) === null || _a === void 0 ? void 0 : _a.totalPages) !== null && _b !== void 0 ? _b : 0;
24
+ const nextPage = allPages.length + 1;
25
+ return nextPage <= totalPages ? nextPage : undefined;
26
+ },
27
+ enabled,
28
+ });
29
+ const candidates = useMemo(() => { var _a; return (_a = data === null || data === void 0 ? void 0 : data.pages.flatMap((page) => { var _a; return (_a = page.data) !== null && _a !== void 0 ? _a : []; })) !== null && _a !== void 0 ? _a : []; }, [data]);
30
+ return {
31
+ candidates,
32
+ fetchNextPage,
33
+ hasNextPage,
34
+ isFetchingNextPage,
35
+ isLoading,
36
+ };
37
+ };
@@ -0,0 +1,25 @@
1
+ import { GroupMemberRole } from "@droppii-org/wasm-client-sdk";
2
+ interface MuteGroupMemberParams {
3
+ groupID: string;
4
+ userID: string;
5
+ mute: boolean;
6
+ }
7
+ export declare const useMuteGroupMember: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, MuteGroupMemberParams, unknown>;
8
+ interface KickGroupMemberParams {
9
+ groupID: string;
10
+ userID: string;
11
+ }
12
+ export declare const useKickGroupMember: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, KickGroupMemberParams, unknown>;
13
+ interface SetGroupMemberRoleParams {
14
+ groupID: string;
15
+ userID: string;
16
+ roleLevel: GroupMemberRole;
17
+ }
18
+ export declare const useSetGroupMemberRole: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, SetGroupMemberRoleParams, unknown>;
19
+ interface TransferGroupOwnerParams {
20
+ groupID: string;
21
+ newOwnerUserID: string;
22
+ }
23
+ export declare const useTransferGroupOwner: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, TransferGroupOwnerParams, unknown>;
24
+ export {};
25
+ //# sourceMappingURL=useGroupMemberActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGroupMemberActions.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGroupMemberActions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAQ/D,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,yGAW9B,CAAC;AAEF,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB,yGAW9B,CAAC;AAEF,UAAU,wBAAwB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,eAAO,MAAM,qBAAqB,4GAWjC,CAAC;AAEF,UAAU,wBAAwB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,qBAAqB,4GAUjC,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { DChatSDK } from "../../constants/sdk";
4
+ // openIM has no dedicated "permanent" sentinel for changeGroupMemberMute —
5
+ // a mutedSeconds this large (~100 years) is the de facto permanent mute
6
+ // until BE ships a real "disable send permission" flag (Q1, DROPPII-30248).
7
+ const PERMANENT_MUTE_SECONDS = 60 * 60 * 24 * 365 * 100;
8
+ export const useMuteGroupMember = () => {
9
+ return useMutation({
10
+ mutationFn: async ({ groupID, userID, mute }) => {
11
+ const { data } = await DChatSDK.changeGroupMemberMute({
12
+ groupID,
13
+ userID,
14
+ mutedSeconds: mute ? PERMANENT_MUTE_SECONDS : 0,
15
+ });
16
+ return data;
17
+ },
18
+ });
19
+ };
20
+ export const useKickGroupMember = () => {
21
+ return useMutation({
22
+ mutationFn: async ({ groupID, userID }) => {
23
+ const { data } = await DChatSDK.kickGroupMember({
24
+ groupID,
25
+ userIDList: [userID],
26
+ reason: "",
27
+ });
28
+ return data;
29
+ },
30
+ });
31
+ };
32
+ export const useSetGroupMemberRole = () => {
33
+ return useMutation({
34
+ mutationFn: async ({ groupID, userID, roleLevel }) => {
35
+ const { data } = await DChatSDK.setGroupMemberRoleLevel({
36
+ groupID,
37
+ userID,
38
+ roleLevel,
39
+ });
40
+ return data;
41
+ },
42
+ });
43
+ };
44
+ export const useTransferGroupOwner = () => {
45
+ return useMutation({
46
+ mutationFn: async ({ groupID, newOwnerUserID }) => {
47
+ const { data } = await DChatSDK.transferGroupOwner({
48
+ groupID,
49
+ newOwnerUserID,
50
+ });
51
+ return data;
52
+ },
53
+ });
54
+ };
@@ -0,0 +1,15 @@
1
+ export interface GroupPermissions {
2
+ sendMessage: boolean;
3
+ pinMessage: boolean;
4
+ updateGroupName: boolean;
5
+ updateGroupAvatar: boolean;
6
+ updateGroupDescription: boolean;
7
+ addMember: boolean;
8
+ removeMember: boolean;
9
+ addAdmin: boolean;
10
+ transferOwnership: boolean;
11
+ configGroupPermission: boolean;
12
+ viewMemberInformation: boolean;
13
+ }
14
+ export declare const useGroupPermission: (groupID?: string) => GroupPermissions;
15
+ //# sourceMappingURL=useGroupPermission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGroupPermission.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useGroupPermission.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,OAAO,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAiDD,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,gBA6CrD,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { useMemo } from "react";
2
+ import { GroupMemberRole } from "@droppii-org/wasm-client-sdk";
3
+ import useConversationStore from "../../store/conversation";
4
+ import useGroupPermissionOverridesStore from "../../store/groupPermissionOverrides";
5
+ // Default permission matrix per DROPPII-30248 spec (Group Permission Logic
6
+ // And Effects In Livechat). BE/SDK does not persist per-permission config for
7
+ // 9 of the 11 permissions yet (only applyMemberFriend/lookMemberInfo exist,
8
+ // and those are unrelated group-wide toggles, not this role matrix) — mocked
9
+ // from roleLevel until BE ships real storage.
10
+ const PERMISSION_MATRIX = {
11
+ [GroupMemberRole.Normal]: {
12
+ sendMessage: true,
13
+ pinMessage: true,
14
+ updateGroupName: true,
15
+ updateGroupAvatar: true,
16
+ updateGroupDescription: true,
17
+ addMember: true,
18
+ removeMember: true,
19
+ addAdmin: true,
20
+ transferOwnership: true,
21
+ configGroupPermission: true,
22
+ viewMemberInformation: true,
23
+ },
24
+ [GroupMemberRole.Admin]: {
25
+ sendMessage: true,
26
+ pinMessage: true,
27
+ updateGroupName: true,
28
+ updateGroupAvatar: true,
29
+ updateGroupDescription: true,
30
+ addMember: true,
31
+ removeMember: true,
32
+ addAdmin: true,
33
+ transferOwnership: true,
34
+ configGroupPermission: true,
35
+ viewMemberInformation: true,
36
+ },
37
+ [GroupMemberRole.Owner]: {
38
+ sendMessage: true,
39
+ pinMessage: true,
40
+ updateGroupName: true,
41
+ updateGroupAvatar: true,
42
+ updateGroupDescription: true,
43
+ addMember: true,
44
+ removeMember: true,
45
+ addAdmin: true,
46
+ transferOwnership: true,
47
+ configGroupPermission: true,
48
+ viewMemberInformation: true,
49
+ },
50
+ };
51
+ export const useGroupPermission = (groupID) => {
52
+ const currentMemberInGroup = useConversationStore((state) => state.currentMemberInGroup);
53
+ const memberOverrides = useGroupPermissionOverridesStore((state) => groupID ? state.memberOverridesByGroup[groupID] : undefined);
54
+ const adminOverrides = useGroupPermissionOverridesStore((state) => groupID ? state.adminOverridesByGroup[groupID] : undefined);
55
+ return useMemo(() => {
56
+ var _a, _b;
57
+ const roleLevel = (_a = currentMemberInGroup === null || currentMemberInGroup === void 0 ? void 0 : currentMemberInGroup.roleLevel) !== null && _a !== void 0 ? _a : GroupMemberRole.Normal;
58
+ console.log("🚀 ~ useGroupPermission ~ roleLevel:", roleLevel);
59
+ const base = (_b = PERMISSION_MATRIX[roleLevel]) !== null && _b !== void 0 ? _b : PERMISSION_MATRIX[GroupMemberRole.Normal];
60
+ // Configure Member/Admin Permissions (DROPPII-30248 follow-up) — mocked
61
+ // local overrides on top of the role default, not persisted by BE yet.
62
+ if (roleLevel === GroupMemberRole.Normal && memberOverrides) {
63
+ return Object.assign(Object.assign({}, base), { sendMessage: memberOverrides.sendMessage, addMember: memberOverrides.addMember, pinMessage: memberOverrides.pinMessage, viewMemberInformation: memberOverrides.viewMemberInformation });
64
+ }
65
+ if (roleLevel === GroupMemberRole.Admin && adminOverrides) {
66
+ return Object.assign(Object.assign({}, base), { sendMessage: adminOverrides.sendMessage, pinMessage: adminOverrides.pinMessage, viewMemberInformation: adminOverrides.viewMemberInformation, addMember: adminOverrides.addMember, removeMember: adminOverrides.removeMember, updateGroupName: adminOverrides.updateGroupInfo, updateGroupAvatar: adminOverrides.updateGroupInfo, updateGroupDescription: adminOverrides.updateGroupInfo });
67
+ }
68
+ return base;
69
+ }, [currentMemberInGroup === null || currentMemberInGroup === void 0 ? void 0 : currentMemberInGroup.roleLevel, memberOverrides, adminOverrides]);
70
+ };
@@ -0,0 +1,8 @@
1
+ import { GroupMemberItem } from "@droppii-org/wasm-client-sdk";
2
+ interface UseSearchGroupMembersResult {
3
+ results: GroupMemberItem[];
4
+ isSearching: boolean;
5
+ }
6
+ export declare const useSearchGroupMembers: (groupID: string | undefined, keyword: string) => UseSearchGroupMembersResult;
7
+ export {};
8
+ //# sourceMappingURL=useSearchGroupMembers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSearchGroupMembers.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useSearchGroupMembers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAM/D,UAAU,2BAA2B;IACnC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,eAAO,MAAM,qBAAqB,GAChC,SAAS,MAAM,GAAG,SAAS,EAC3B,SAAS,MAAM,KACd,2BAkCF,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { useCallback, useEffect, useState } from "react";
2
+ import { DChatSDK } from "../../constants/sdk";
3
+ const SEARCH_GROUP_MEMBER_OFFSET = 0;
4
+ const SEARCH_GROUP_MEMBER_COUNT = 999;
5
+ export const useSearchGroupMembers = (groupID, keyword) => {
6
+ const [results, setResults] = useState([]);
7
+ const [isSearching, setIsSearching] = useState(false);
8
+ const search = useCallback(async () => {
9
+ if (!groupID || !keyword.trim()) {
10
+ setResults([]);
11
+ return;
12
+ }
13
+ setIsSearching(true);
14
+ try {
15
+ const { data } = await DChatSDK.searchGroupMembers({
16
+ groupID,
17
+ keywordList: [keyword.trim()],
18
+ isSearchUserID: false,
19
+ isSearchMemberNickname: true,
20
+ offset: SEARCH_GROUP_MEMBER_OFFSET,
21
+ count: SEARCH_GROUP_MEMBER_COUNT,
22
+ });
23
+ setResults(data !== null && data !== void 0 ? data : []);
24
+ }
25
+ catch (err) {
26
+ console.error("Error searching group members:", err);
27
+ setResults([]);
28
+ }
29
+ finally {
30
+ setIsSearching(false);
31
+ }
32
+ }, [groupID, keyword]);
33
+ useEffect(() => {
34
+ void search();
35
+ }, [search]);
36
+ return { results, isSearching };
37
+ };
@@ -0,0 +1,12 @@
1
+ interface SetApplyMemberFriendParams {
2
+ groupID: string;
3
+ allow: boolean;
4
+ }
5
+ interface SetLookMemberInfoParams {
6
+ groupID: string;
7
+ allow: boolean;
8
+ }
9
+ export declare const useSetApplyMemberFriend: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, SetApplyMemberFriendParams, unknown>;
10
+ export declare const useSetLookMemberInfo: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, SetLookMemberInfoParams, unknown>;
11
+ export {};
12
+ //# sourceMappingURL=useSetMemberPermission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSetMemberPermission.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useSetMemberPermission.ts"],"names":[],"mappings":"AAOA,UAAU,0BAA0B;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAMD,eAAO,MAAM,uBAAuB,8GAWnC,CAAC;AAEF,eAAO,MAAM,oBAAoB,2GAWhC,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use client";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { AllowType } from "@droppii-org/wasm-client-sdk";
4
+ import { DChatSDK } from "../../constants/sdk";
5
+ import useConversationStore from "../../store/conversation";
6
+ const refreshGroupInfo = (groupID) => {
7
+ void useConversationStore.getState().getCurrentGroupInfoByReq(groupID);
8
+ };
9
+ export const useSetApplyMemberFriend = () => {
10
+ return useMutation({
11
+ mutationFn: async ({ groupID, allow }) => {
12
+ const { data } = await DChatSDK.setGroupApplyMemberFriend({
13
+ groupID,
14
+ rule: allow ? AllowType.Allowed : AllowType.NotAllowed,
15
+ });
16
+ return data;
17
+ },
18
+ onSuccess: (_data, variables) => refreshGroupInfo(variables.groupID),
19
+ });
20
+ };
21
+ export const useSetLookMemberInfo = () => {
22
+ return useMutation({
23
+ mutationFn: async ({ groupID, allow }) => {
24
+ const { data } = await DChatSDK.setGroupLookMemberInfo({
25
+ groupID,
26
+ rule: allow ? AllowType.Allowed : AllowType.NotAllowed,
27
+ });
28
+ return data;
29
+ },
30
+ onSuccess: (_data, variables) => refreshGroupInfo(variables.groupID),
31
+ });
32
+ };
@@ -0,0 +1,7 @@
1
+ interface ToggleGroupSendMessageParams {
2
+ groupID: string;
3
+ allowSendMessage: boolean;
4
+ }
5
+ export declare const useToggleGroupSendMessage: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, ToggleGroupSendMessageParams, unknown>;
6
+ export {};
7
+ //# sourceMappingURL=useToggleGroupSendMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToggleGroupSendMessage.d.ts","sourceRoot":"","sources":["../../../src/hooks/group/useToggleGroupSendMessage.ts"],"names":[],"mappings":"AAMA,UAAU,4BAA4B;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAMD,eAAO,MAAM,yBAAyB,gHAarC,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use client";
2
+ import { useMutation } from "@tanstack/react-query";
3
+ import { DChatSDK } from "../../constants/sdk";
4
+ import useConversationStore from "../../store/conversation";
5
+ // Q4 (non-block, pending BE confirmation): "Cho phép gửi tin nhắn" is wired
6
+ // to changeGroupMute, inverted (isMute = !allowSendMessage) since it's the
7
+ // only openIM method that gates every member's ability to send in a group.
8
+ // Adjust if BE confirms a dedicated field instead.
9
+ export const useToggleGroupSendMessage = () => {
10
+ return useMutation({
11
+ mutationFn: async ({ groupID, allowSendMessage }) => {
12
+ const { data } = await DChatSDK.changeGroupMute({
13
+ groupID,
14
+ isMute: !allowSendMessage,
15
+ });
16
+ return data;
17
+ },
18
+ onSuccess: (_data, variables) => {
19
+ void useConversationStore.getState().getCurrentGroupInfoByReq(variables.groupID);
20
+ },
21
+ });
22
+ };
@@ -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,4 @@
1
+ export declare const useDeleteConversation: () => import("@tanstack/react-query").UseMutationResult<unknown, Error, {
2
+ conversationID: string;
3
+ }, unknown>;
4
+ //# sourceMappingURL=useDeleteConversation.d.ts.map
@@ -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,qCAI7C,oBAAoB,8EAyBtB,CAAC"}
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
+ };