@sendbird/uikit-chat-hooks 2.4.2 → 2.5.0-rc.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 (46) hide show
  1. package/lib/commonjs/channel/{useGroupChannelMessages/reducer.js → useChannelMessagesReducer.js} +39 -30
  2. package/lib/commonjs/channel/useChannelMessagesReducer.js.map +1 -0
  3. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +169 -99
  4. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  5. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +56 -25
  6. package/lib/commonjs/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  7. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js +0 -4
  8. package/lib/commonjs/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
  9. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +128 -28
  10. package/lib/commonjs/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  11. package/lib/commonjs/common/useUserList.js +2 -2
  12. package/lib/commonjs/common/useUserList.js.map +1 -1
  13. package/lib/commonjs/types.js.map +1 -1
  14. package/lib/module/channel/{useGroupChannelMessages/reducer.js → useChannelMessagesReducer.js} +38 -29
  15. package/lib/module/channel/useChannelMessagesReducer.js.map +1 -0
  16. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js +170 -100
  17. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.js.map +1 -1
  18. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js +57 -26
  19. package/lib/module/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.js.map +1 -1
  20. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js +0 -4
  21. package/lib/module/channel/useOpenChannelList/useOpenChannelListWithQuery.js.map +1 -1
  22. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js +129 -29
  23. package/lib/module/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.js.map +1 -1
  24. package/lib/module/common/useUserList.js +2 -2
  25. package/lib/module/common/useUserList.js.map +1 -1
  26. package/lib/module/types.js.map +1 -1
  27. package/lib/typescript/src/channel/useChannelMessagesReducer.d.ts +18 -0
  28. package/lib/typescript/src/types.d.ts +51 -20
  29. package/package.json +4 -5
  30. package/src/channel/useChannelMessagesReducer.ts +143 -0
  31. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithCollection.ts +168 -96
  32. package/src/channel/useGroupChannelMessages/useGroupChannelMessagesWithQuery.ts +62 -25
  33. package/src/channel/useOpenChannelList/useOpenChannelListWithQuery.ts +0 -4
  34. package/src/channel/useOpenChannelMessages/useOpenChannelMessagesWithQuery.ts +142 -25
  35. package/src/common/useUserList.ts +2 -2
  36. package/src/types.ts +58 -20
  37. package/lib/commonjs/channel/useGroupChannelMessages/reducer.js.map +0 -1
  38. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js +0 -144
  39. package/lib/commonjs/channel/useOpenChannelMessages/reducer.js.map +0 -1
  40. package/lib/module/channel/useGroupChannelMessages/reducer.js.map +0 -1
  41. package/lib/module/channel/useOpenChannelMessages/reducer.js +0 -137
  42. package/lib/module/channel/useOpenChannelMessages/reducer.js.map +0 -1
  43. package/lib/typescript/src/channel/useGroupChannelMessages/reducer.d.ts +0 -15
  44. package/lib/typescript/src/channel/useOpenChannelMessages/reducer.d.ts +0 -15
  45. package/src/channel/useGroupChannelMessages/reducer.ts +0 -126
  46. package/src/channel/useOpenChannelMessages/reducer.ts +0 -126
@@ -1 +0,0 @@
1
- {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","_ref","action","draft","type","value","status","key","receivedMessagesAsMap","messages","clearBeforeAction","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useGroupChannelMessagesReducer","userId","sortComparator","loading","refreshing","messageMap","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseGroupChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearBeforeAction: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n nextMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing': {\n draft['refreshing'] = action.value.status;\n return draft;\n }\n case 'update_loading': {\n draft['loading'] = action.value.status;\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';\n const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearBeforeAction) {\n draft[key] = receivedMessagesAsMap;\n } else {\n draft[key] = { ...draft[key], ...receivedMessagesAsMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useGroupChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":"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"}
@@ -1,137 +0,0 @@
1
- import { useReducer } from 'react';
2
- import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';
3
- const defaultReducer = (_ref, action) => {
4
- let {
5
- ...draft
6
- } = _ref;
7
- switch (action.type) {
8
- case 'update_refreshing':
9
- {
10
- draft['refreshing'] = action.value.status;
11
- return draft;
12
- }
13
- case 'update_loading':
14
- {
15
- draft['loading'] = action.value.status;
16
- return draft;
17
- }
18
- case 'update_messages':
19
- case 'update_next_messages':
20
- {
21
- const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
22
- const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
23
- if (action.value.clearBeforeAction) {
24
- draft[key] = receivedMessagesAsMap;
25
- } else {
26
- draft[key] = {
27
- ...draft[key],
28
- ...receivedMessagesAsMap
29
- };
30
-
31
- // NOTE: Replace pending message to succeeded message
32
- action.value.messages.filter(m => {
33
- return (m.isFileMessage() || m.isUserMessage()) && Boolean(draft[key][m.reqId]) && m.sendingStatus === 'succeeded' && isMyMessage(m, action.value.currentUserId);
34
- }).forEach(m => delete draft[key][m.reqId]);
35
- }
36
- return draft;
37
- }
38
- case 'delete_messages':
39
- case 'delete_next_messages':
40
- {
41
- const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
42
- draft[key] = {
43
- ...draft[key]
44
- };
45
- action.value.messageIds.forEach(msgId => delete draft[key][msgId]);
46
- action.value.reqIds.forEach(reqId => delete draft[key][reqId]);
47
- return draft;
48
- }
49
- }
50
- };
51
- export const useOpenChannelMessagesReducer = (userId, sortComparator) => {
52
- const [{
53
- loading,
54
- refreshing,
55
- messageMap,
56
- nextMessageMap
57
- }, dispatch] = useReducer(defaultReducer, {
58
- loading: true,
59
- refreshing: false,
60
- messageMap: {},
61
- nextMessageMap: {}
62
- });
63
- const updateMessages = (messages, clearBeforeAction, currentUserId) => {
64
- dispatch({
65
- type: 'update_messages',
66
- value: {
67
- messages,
68
- clearBeforeAction,
69
- currentUserId
70
- }
71
- });
72
- };
73
- const deleteMessages = (messageIds, reqIds) => {
74
- dispatch({
75
- type: 'delete_messages',
76
- value: {
77
- messageIds,
78
- reqIds
79
- }
80
- });
81
- };
82
- const updateNextMessages = (messages, clearBeforeAction, currentUserId) => {
83
- dispatch({
84
- type: 'update_next_messages',
85
- value: {
86
- messages,
87
- clearBeforeAction,
88
- currentUserId
89
- }
90
- });
91
- };
92
- const deleteNextMessages = (messageIds, reqIds) => {
93
- dispatch({
94
- type: 'delete_next_messages',
95
- value: {
96
- messageIds,
97
- reqIds
98
- }
99
- });
100
- };
101
- const updateLoading = status => {
102
- dispatch({
103
- type: 'update_loading',
104
- value: {
105
- status
106
- }
107
- });
108
- };
109
- const updateRefreshing = status => {
110
- dispatch({
111
- type: 'update_refreshing',
112
- value: {
113
- status
114
- }
115
- });
116
- };
117
- const messages = useIIFE(() => {
118
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
119
- return Object.values(messageMap);
120
- });
121
- const nextMessages = Object.values(nextMessageMap);
122
- const newMessagesFromMembers = nextMessages.filter(msg => isNewMessage(msg, userId));
123
- return {
124
- updateLoading,
125
- updateRefreshing,
126
- updateMessages,
127
- updateNextMessages,
128
- deleteMessages,
129
- deleteNextMessages,
130
- loading,
131
- refreshing,
132
- messages,
133
- nextMessages,
134
- newMessagesFromMembers
135
- };
136
- };
137
- //# sourceMappingURL=reducer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["useReducer","arrayToMapWithGetter","getMessageUniqId","isMyMessage","isNewMessage","useIIFE","defaultReducer","_ref","action","draft","type","value","status","key","receivedMessagesAsMap","messages","clearBeforeAction","filter","m","isFileMessage","isUserMessage","Boolean","reqId","sendingStatus","currentUserId","forEach","messageIds","msgId","reqIds","useOpenChannelMessagesReducer","userId","sortComparator","loading","refreshing","messageMap","nextMessageMap","dispatch","updateMessages","deleteMessages","updateNextMessages","deleteNextMessages","updateLoading","updateRefreshing","Object","values","sort","nextMessages","newMessagesFromMembers","msg"],"sources":["reducer.ts"],"sourcesContent":["import { useReducer } from 'react';\n\nimport type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport type { UseOpenChannelMessagesOptions } from '../../types';\n\ntype Action =\n | {\n type: 'update_loading' | 'update_refreshing';\n value: { status: boolean };\n }\n | {\n type: 'update_messages' | 'update_next_messages';\n value: { messages: SendbirdBaseMessage[]; clearBeforeAction: boolean; currentUserId?: string };\n }\n | {\n type: 'delete_messages' | 'delete_next_messages';\n value: { messageIds: number[]; reqIds: string[] };\n };\n\ntype State = {\n loading: boolean;\n refreshing: boolean;\n messageMap: Record<string, SendbirdBaseMessage>;\n nextMessageMap: Record<string, SendbirdBaseMessage>;\n};\n\nconst defaultReducer = ({ ...draft }: State, action: Action) => {\n switch (action.type) {\n case 'update_refreshing': {\n draft['refreshing'] = action.value.status;\n return draft;\n }\n case 'update_loading': {\n draft['loading'] = action.value.status;\n return draft;\n }\n case 'update_messages':\n case 'update_next_messages': {\n const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';\n const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);\n if (action.value.clearBeforeAction) {\n draft[key] = receivedMessagesAsMap;\n } else {\n draft[key] = { ...draft[key], ...receivedMessagesAsMap };\n\n // NOTE: Replace pending message to succeeded message\n action.value.messages\n .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {\n return (\n (m.isFileMessage() || m.isUserMessage()) &&\n Boolean(draft[key][m.reqId]) &&\n m.sendingStatus === 'succeeded' &&\n isMyMessage(m, action.value.currentUserId)\n );\n })\n .forEach((m) => delete draft[key][m.reqId]);\n }\n\n return draft;\n }\n case 'delete_messages':\n case 'delete_next_messages': {\n const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';\n draft[key] = { ...draft[key] };\n action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);\n action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);\n\n return draft;\n }\n }\n};\n\nexport const useOpenChannelMessagesReducer = (\n userId?: string,\n sortComparator?: UseOpenChannelMessagesOptions['sortComparator'],\n) => {\n const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {\n loading: true,\n refreshing: false,\n messageMap: {},\n nextMessageMap: {},\n });\n\n const updateMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });\n };\n const updateNextMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {\n dispatch({ type: 'update_next_messages', value: { messages, clearBeforeAction, currentUserId } });\n };\n const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {\n dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });\n };\n const updateLoading = (status: boolean) => {\n dispatch({ type: 'update_loading', value: { status } });\n };\n const updateRefreshing = (status: boolean) => {\n dispatch({ type: 'update_refreshing', value: { status } });\n };\n\n const messages = useIIFE(() => {\n if (sortComparator) return Object.values(messageMap).sort(sortComparator);\n return Object.values(messageMap);\n });\n const nextMessages = Object.values(nextMessageMap);\n const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));\n\n return {\n updateLoading,\n updateRefreshing,\n updateMessages,\n updateNextMessages,\n deleteMessages,\n deleteNextMessages,\n\n loading,\n refreshing,\n messages,\n nextMessages,\n newMessagesFromMembers,\n };\n};\n"],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import type { SendbirdBaseMessage } from '@sendbird/uikit-utils';
2
- import type { UseGroupChannelMessagesOptions } from '../../types';
3
- export declare const useGroupChannelMessagesReducer: (userId?: string, sortComparator?: UseGroupChannelMessagesOptions['sortComparator']) => {
4
- updateLoading: (status: boolean) => void;
5
- updateRefreshing: (status: boolean) => void;
6
- updateMessages: (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => void;
7
- updateNextMessages: (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => void;
8
- deleteMessages: (messageIds: number[], reqIds: string[]) => void;
9
- deleteNextMessages: (messageIds: number[], reqIds: string[]) => void;
10
- loading: boolean;
11
- refreshing: boolean;
12
- messages: import("@sendbird/chat/message").BaseMessage[];
13
- nextMessages: import("@sendbird/chat/message").BaseMessage[];
14
- newMessagesFromMembers: import("@sendbird/chat/message").BaseMessage[];
15
- };
@@ -1,15 +0,0 @@
1
- import type { SendbirdBaseMessage } from '@sendbird/uikit-utils';
2
- import type { UseOpenChannelMessagesOptions } from '../../types';
3
- export declare const useOpenChannelMessagesReducer: (userId?: string, sortComparator?: UseOpenChannelMessagesOptions['sortComparator']) => {
4
- updateLoading: (status: boolean) => void;
5
- updateRefreshing: (status: boolean) => void;
6
- updateMessages: (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => void;
7
- updateNextMessages: (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => void;
8
- deleteMessages: (messageIds: number[], reqIds: string[]) => void;
9
- deleteNextMessages: (messageIds: number[], reqIds: string[]) => void;
10
- loading: boolean;
11
- refreshing: boolean;
12
- messages: import("@sendbird/chat/message").BaseMessage[];
13
- nextMessages: import("@sendbird/chat/message").BaseMessage[];
14
- newMessagesFromMembers: import("@sendbird/chat/message").BaseMessage[];
15
- };
@@ -1,126 +0,0 @@
1
- import { useReducer } from 'react';
2
-
3
- import type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';
4
- import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';
5
-
6
- import type { UseGroupChannelMessagesOptions } from '../../types';
7
-
8
- type Action =
9
- | {
10
- type: 'update_loading' | 'update_refreshing';
11
- value: { status: boolean };
12
- }
13
- | {
14
- type: 'update_messages' | 'update_next_messages';
15
- value: { messages: SendbirdBaseMessage[]; clearBeforeAction: boolean; currentUserId?: string };
16
- }
17
- | {
18
- type: 'delete_messages' | 'delete_next_messages';
19
- value: { messageIds: number[]; reqIds: string[] };
20
- };
21
-
22
- type State = {
23
- loading: boolean;
24
- refreshing: boolean;
25
- messageMap: Record<string, SendbirdBaseMessage>;
26
- nextMessageMap: Record<string, SendbirdBaseMessage>;
27
- };
28
-
29
- const defaultReducer = ({ ...draft }: State, action: Action) => {
30
- switch (action.type) {
31
- case 'update_refreshing': {
32
- draft['refreshing'] = action.value.status;
33
- return draft;
34
- }
35
- case 'update_loading': {
36
- draft['loading'] = action.value.status;
37
- return draft;
38
- }
39
- case 'update_messages':
40
- case 'update_next_messages': {
41
- const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
42
- const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
43
- if (action.value.clearBeforeAction) {
44
- draft[key] = receivedMessagesAsMap;
45
- } else {
46
- draft[key] = { ...draft[key], ...receivedMessagesAsMap };
47
-
48
- // NOTE: Replace pending message to succeeded message
49
- action.value.messages
50
- .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {
51
- return (
52
- (m.isFileMessage() || m.isUserMessage()) &&
53
- Boolean(draft[key][m.reqId]) &&
54
- m.sendingStatus === 'succeeded' &&
55
- isMyMessage(m, action.value.currentUserId)
56
- );
57
- })
58
- .forEach((m) => delete draft[key][m.reqId]);
59
- }
60
-
61
- return draft;
62
- }
63
- case 'delete_messages':
64
- case 'delete_next_messages': {
65
- const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
66
- draft[key] = { ...draft[key] };
67
- action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);
68
- action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);
69
-
70
- return draft;
71
- }
72
- }
73
- };
74
-
75
- export const useGroupChannelMessagesReducer = (
76
- userId?: string,
77
- sortComparator?: UseGroupChannelMessagesOptions['sortComparator'],
78
- ) => {
79
- const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {
80
- loading: true,
81
- refreshing: false,
82
- messageMap: {},
83
- nextMessageMap: {},
84
- });
85
-
86
- const updateMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {
87
- dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });
88
- };
89
- const deleteMessages = (messageIds: number[], reqIds: string[]) => {
90
- dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });
91
- };
92
- const updateNextMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {
93
- dispatch({ type: 'update_next_messages', value: { messages, clearBeforeAction, currentUserId } });
94
- };
95
- const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {
96
- dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });
97
- };
98
- const updateLoading = (status: boolean) => {
99
- dispatch({ type: 'update_loading', value: { status } });
100
- };
101
- const updateRefreshing = (status: boolean) => {
102
- dispatch({ type: 'update_refreshing', value: { status } });
103
- };
104
-
105
- const messages = useIIFE(() => {
106
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
107
- return Object.values(messageMap);
108
- });
109
- const nextMessages = Object.values(nextMessageMap);
110
- const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));
111
-
112
- return {
113
- updateLoading,
114
- updateRefreshing,
115
- updateMessages,
116
- updateNextMessages,
117
- deleteMessages,
118
- deleteNextMessages,
119
-
120
- loading,
121
- refreshing,
122
- messages,
123
- nextMessages,
124
- newMessagesFromMembers,
125
- };
126
- };
@@ -1,126 +0,0 @@
1
- import { useReducer } from 'react';
2
-
3
- import type { SendbirdBaseMessage, SendbirdFileMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';
4
- import { arrayToMapWithGetter, getMessageUniqId, isMyMessage, isNewMessage, useIIFE } from '@sendbird/uikit-utils';
5
-
6
- import type { UseOpenChannelMessagesOptions } from '../../types';
7
-
8
- type Action =
9
- | {
10
- type: 'update_loading' | 'update_refreshing';
11
- value: { status: boolean };
12
- }
13
- | {
14
- type: 'update_messages' | 'update_next_messages';
15
- value: { messages: SendbirdBaseMessage[]; clearBeforeAction: boolean; currentUserId?: string };
16
- }
17
- | {
18
- type: 'delete_messages' | 'delete_next_messages';
19
- value: { messageIds: number[]; reqIds: string[] };
20
- };
21
-
22
- type State = {
23
- loading: boolean;
24
- refreshing: boolean;
25
- messageMap: Record<string, SendbirdBaseMessage>;
26
- nextMessageMap: Record<string, SendbirdBaseMessage>;
27
- };
28
-
29
- const defaultReducer = ({ ...draft }: State, action: Action) => {
30
- switch (action.type) {
31
- case 'update_refreshing': {
32
- draft['refreshing'] = action.value.status;
33
- return draft;
34
- }
35
- case 'update_loading': {
36
- draft['loading'] = action.value.status;
37
- return draft;
38
- }
39
- case 'update_messages':
40
- case 'update_next_messages': {
41
- const key = action.type === 'update_messages' ? 'messageMap' : 'nextMessageMap';
42
- const receivedMessagesAsMap = arrayToMapWithGetter(action.value.messages, getMessageUniqId);
43
- if (action.value.clearBeforeAction) {
44
- draft[key] = receivedMessagesAsMap;
45
- } else {
46
- draft[key] = { ...draft[key], ...receivedMessagesAsMap };
47
-
48
- // NOTE: Replace pending message to succeeded message
49
- action.value.messages
50
- .filter((m): m is SendbirdUserMessage | SendbirdFileMessage => {
51
- return (
52
- (m.isFileMessage() || m.isUserMessage()) &&
53
- Boolean(draft[key][m.reqId]) &&
54
- m.sendingStatus === 'succeeded' &&
55
- isMyMessage(m, action.value.currentUserId)
56
- );
57
- })
58
- .forEach((m) => delete draft[key][m.reqId]);
59
- }
60
-
61
- return draft;
62
- }
63
- case 'delete_messages':
64
- case 'delete_next_messages': {
65
- const key = action.type === 'delete_messages' ? 'messageMap' : 'nextMessageMap';
66
- draft[key] = { ...draft[key] };
67
- action.value.messageIds.forEach((msgId) => delete draft[key][msgId]);
68
- action.value.reqIds.forEach((reqId) => delete draft[key][reqId]);
69
-
70
- return draft;
71
- }
72
- }
73
- };
74
-
75
- export const useOpenChannelMessagesReducer = (
76
- userId?: string,
77
- sortComparator?: UseOpenChannelMessagesOptions['sortComparator'],
78
- ) => {
79
- const [{ loading, refreshing, messageMap, nextMessageMap }, dispatch] = useReducer(defaultReducer, {
80
- loading: true,
81
- refreshing: false,
82
- messageMap: {},
83
- nextMessageMap: {},
84
- });
85
-
86
- const updateMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {
87
- dispatch({ type: 'update_messages', value: { messages, clearBeforeAction, currentUserId } });
88
- };
89
- const deleteMessages = (messageIds: number[], reqIds: string[]) => {
90
- dispatch({ type: 'delete_messages', value: { messageIds, reqIds } });
91
- };
92
- const updateNextMessages = (messages: SendbirdBaseMessage[], clearBeforeAction: boolean, currentUserId?: string) => {
93
- dispatch({ type: 'update_next_messages', value: { messages, clearBeforeAction, currentUserId } });
94
- };
95
- const deleteNextMessages = (messageIds: number[], reqIds: string[]) => {
96
- dispatch({ type: 'delete_next_messages', value: { messageIds, reqIds } });
97
- };
98
- const updateLoading = (status: boolean) => {
99
- dispatch({ type: 'update_loading', value: { status } });
100
- };
101
- const updateRefreshing = (status: boolean) => {
102
- dispatch({ type: 'update_refreshing', value: { status } });
103
- };
104
-
105
- const messages = useIIFE(() => {
106
- if (sortComparator) return Object.values(messageMap).sort(sortComparator);
107
- return Object.values(messageMap);
108
- });
109
- const nextMessages = Object.values(nextMessageMap);
110
- const newMessagesFromMembers = nextMessages.filter((msg) => isNewMessage(msg, userId));
111
-
112
- return {
113
- updateLoading,
114
- updateRefreshing,
115
- updateMessages,
116
- updateNextMessages,
117
- deleteMessages,
118
- deleteNextMessages,
119
-
120
- loading,
121
- refreshing,
122
- messages,
123
- nextMessages,
124
- newMessagesFromMembers,
125
- };
126
- };