Skip to content

Commit fad2bf0

Browse files
authored
migration: modules typescript 6 (#812)
[CLNP-1247](https://sendbird.atlassian.net/browse/CLNP-1247?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ) Modules - ./modules/Channel/context/hooks/useDeleteMessageCallback.js: useDeleteMessageCallback.js - ./modules/Channel/context/hooks/useGetChannel.js: useGetChannel.js - ./modules/Channel/context/hooks/useResendMessageCallback.js: useResendMessageCallback.js - ./modules/Channel/context/hooks/useScrollDownCallback.js: useScrollDownCallback.js - ./modules/Channel/context/hooks/useSendFileMessageCallback.js: useSendFileMessageCallback.js - ./modules/Channel/context/hooks/useSendMessageCallback.js: useSendMessageCallback.js - ./modules/Channel/context/hooks/useToggleReactionCallback.js: useToggleReactionCallback.js - ./modules/Channel/context/hooks/useUpdateMessageCallback.js: useUpdateMessageCallback.js - (removed) ./modules/Channel/components/FileViewer/types.js: types.js [CLNP-1247]: https://sendbird.atlassian.net/browse/CLNP-1247?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
1 parent 3dcaab9 commit fad2bf0

27 files changed

+765
-682
lines changed

src/modules/Channel/components/FileViewer/types.js

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/modules/Channel/context/ChannelProvider.tsx

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import React, {
66
useMemo,
77
} from 'react';
88

9-
import type { GroupChannel, SendbirdGroupChat } from '@sendbird/chat/groupChannel';
9+
import type { GroupChannel } from '@sendbird/chat/groupChannel';
1010
import type {
1111
BaseMessage,
1212
FileMessageCreateParams,
@@ -43,12 +43,12 @@ import useSendMessageCallback from './hooks/useSendMessageCallback';
4343
import useSendFileMessageCallback from './hooks/useSendFileMessageCallback';
4444
import useToggleReactionCallback from './hooks/useToggleReactionCallback';
4545
import useScrollToMessage from './hooks/useScrollToMessage';
46-
import { CustomUseReducerDispatcher } from '../../../lib/SendbirdState';
4746
import useSendVoiceMessageCallback from './hooks/useSendVoiceMessageCallback';
4847
import { getCaseResolvedThreadReplySelectType } from '../../../lib/utils/resolvedReplyType';
4948
import { useSendMultipleFilesMessage } from './hooks/useSendMultipleFilesMessage';
5049
import { useHandleChannelPubsubEvents } from './hooks/useHandleChannelPubsubEvents';
5150
import { PublishingModuleType } from '../../internalInterfaces';
51+
import { ChannelActionTypes } from './dux/actionTypes';
5252

5353
export type MessageListParams = {
5454
// https://sendbird.github.io/core-sdk-javascript/module-model_params_messageListParams-MessageListParams.html
@@ -123,15 +123,15 @@ interface MessageStoreInterface {
123123
interface SendMessageParams {
124124
message: string;
125125
quoteMessage?: SendableMessageType;
126-
// mentionedUserIds?: Array<string>;
127-
mentionedUsers?: Array<User>;
126+
// mentionedUserIds?: string;
127+
mentionedUsers?: User[];
128128
mentionTemplate?: string;
129129
}
130130

131-
interface UpdateMessageProps {
132-
messageId: string | number;
131+
interface UpdateMessageParams {
132+
messageId: number;
133133
message: string;
134-
mentionedUsers?: Array<User>;
134+
mentionedUsers?: User[];
135135
mentionTemplate?: string;
136136
}
137137

@@ -140,7 +140,7 @@ interface ChannelProviderInterface extends ChannelContextProps, MessageStoreInte
140140
isScrolled?: boolean;
141141
setIsScrolled?: React.Dispatch<React.SetStateAction<boolean>>;
142142
messageActionTypes: typeof channelActions;
143-
messagesDispatcher: CustomUseReducerDispatcher;
143+
messagesDispatcher: React.Dispatch<ChannelActionTypes>;
144144
quoteMessage: SendableMessageType | null;
145145
setQuoteMessage: React.Dispatch<React.SetStateAction<SendableMessageType | null>>;
146146
initialTimeStamp: number;
@@ -156,15 +156,13 @@ interface ChannelProviderInterface extends ChannelContextProps, MessageStoreInte
156156
setHighLightedMessageId: React.Dispatch<React.SetStateAction<number>>;
157157
messageInputRef: React.MutableRefObject<HTMLInputElement>,
158158
deleteMessage(message: CoreMessageType): Promise<CoreMessageType>,
159-
updateMessage(props: UpdateMessageProps, callback?: (err: SendbirdError, message: UserMessage) => void): Promise<CoreMessageType>,
160-
resendMessage(failedMessage: SendableMessageType): Promise<SendableMessageType>,
159+
updateMessage(props: UpdateMessageParams, callback?: (err: SendbirdError, message: UserMessage) => void): void,
160+
resendMessage(failedMessage: SendableMessageType): void,
161161
// TODO: Good to change interface to using params / This part need refactoring
162-
sendMessage: (props: SendMessageParams) => void,
162+
sendMessage: (params: SendMessageParams) => void,
163163
sendFileMessage: (file: File, quoteMessage?: SendableMessageType) => void,
164164
sendVoiceMessage: (file: File, duration: number, quoteMessage?: SendableMessageType) => void,
165165
sendMultipleFilesMessage: (files: Array<File>, quoteMessage?: SendableMessageType) => void,
166-
// sendMessage(messageParams: SendBird.UserMessageParams): Promise<SendBird.UserMessage>,
167-
// sendFileMessage(messageParams: SendBird.FileMessageParams): Promise<SendBird.FileMessage>,
168166
toggleReaction(message: SendableMessageType, emojiKey: string, isReacted: boolean): void,
169167
renderUserMentionItem?: (props: { user: User }) => JSX.Element;
170168
}
@@ -213,12 +211,11 @@ const ChannelProvider: React.FC<ChannelContextProps> = (props: ChannelContextPro
213211
isOnline,
214212
imageCompression,
215213
isMentionEnabled,
216-
isVoiceMessageEnabled,
217214
onUserProfileMessage,
218215
markAsReadScheduler,
219216
groupChannel,
220217
} = config;
221-
const sdk = globalStore?.stores?.sdkStore?.sdk as SendbirdGroupChat;
218+
const sdk = globalStore?.stores?.sdkStore?.sdk;
222219
const sdkInit = globalStore?.stores?.sdkStore?.initialized;
223220
const globalConfigs = globalStore?.config;
224221

@@ -235,10 +232,7 @@ const ChannelProvider: React.FC<ChannelContextProps> = (props: ChannelContextPro
235232
const [quoteMessage, setQuoteMessage] = useState<SendableMessageType>(null);
236233
const [isScrolled, setIsScrolled] = useState(false);
237234

238-
const [messagesStore, messagesDispatcher] = useReducer(
239-
messagesReducer,
240-
messagesInitialState,
241-
) as [MessageStoreInterface, CustomUseReducerDispatcher];
235+
const [messagesStore, messagesDispatcher] = useReducer(messagesReducer, messagesInitialState);
242236
const scrollRef = useRef(null);
243237

244238
const {
@@ -313,7 +307,6 @@ const ChannelProvider: React.FC<ChannelContextProps> = (props: ChannelContextPro
313307
userFilledMessageListQuery,
314308
hasMoreNext,
315309
replyType,
316-
isVoiceMessageEnabled,
317310
}, {
318311
logger,
319312
messagesDispatcher,

src/modules/Channel/context/dux/actionTypes.ts

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import { CreateAction } from '../../../../utils/typeHelpers/reducers/createActio
22
import { GroupChannel } from '@sendbird/chat/groupChannel';
33
import { CoreMessageType, SendableMessageType } from '../../../../utils';
44
import { EmojiContainer } from '@sendbird/chat';
5-
import { ReactionEvent, UploadableFileInfo } from '@sendbird/chat/message';
5+
import { ReactionEvent } from '@sendbird/chat/message';
66
import { MessageListParams } from '../ChannelProvider';
7+
import { FileUploadedPayload } from '../hooks/useSendMultipleFilesMessage';
78

89
export const RESET_MESSAGES = 'RESET_MESSAGES';
910
export const FETCH_INITIAL_MESSAGES_START = 'FETCH_INITIAL_MESSAGES_START';
@@ -71,9 +72,7 @@ type CHANNEL_PAYLOAD_TYPES = {
7172
channel: GroupChannel;
7273
event: any;
7374
};
74-
[RESEND_MESSAGE_START]: {
75-
reqId: number;
76-
};
75+
[RESEND_MESSAGE_START]: SendableMessageType;
7776
[MARK_AS_READ]: {
7877
channel: null | GroupChannel;
7978
};
@@ -82,13 +81,7 @@ type CHANNEL_PAYLOAD_TYPES = {
8281
[SET_EMOJI_CONTAINER]: EmojiContainer;
8382
[ON_REACTION_UPDATED]: ReactionEvent;
8483
[MESSAGE_LIST_PARAMS_CHANGED]: MessageListParams;
85-
[ON_FILE_INFO_UPLOADED]: {
86-
channelUrl: string;
87-
requestId: number;
88-
index: number;
89-
uploadableFileInfo: UploadableFileInfo;
90-
error?: unknown;
91-
};
84+
[ON_FILE_INFO_UPLOADED]: FileUploadedPayload;
9285
};
9386

9487
type MessageId = number;

src/modules/Channel/context/hooks/useDeleteMessageCallback.js

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import React, { useCallback } from 'react';
2+
3+
import * as messageActionTypes from '../dux/actionTypes';
4+
import { ChannelActionTypes } from '../dux/actionTypes';
5+
import { LoggerInterface } from '../../../../lib/Logger';
6+
import { GroupChannel } from '@sendbird/chat/groupChannel';
7+
import { CoreMessageType, isSendableMessage } from '../../../../utils';
8+
import { SendingStatus } from '@sendbird/chat/message';
9+
10+
type UseDeleteMessageCallbackOptions = {
11+
currentGroupChannel: null | GroupChannel;
12+
messagesDispatcher: React.Dispatch<ChannelActionTypes>;
13+
};
14+
type UseDeleteMessageCallbackParams = {
15+
logger: LoggerInterface;
16+
};
17+
function useDeleteMessageCallback(
18+
{ currentGroupChannel, messagesDispatcher }: UseDeleteMessageCallbackOptions,
19+
{ logger }: UseDeleteMessageCallbackParams,
20+
) {
21+
return useCallback(
22+
(message: CoreMessageType): Promise<CoreMessageType> => {
23+
logger.info('Channel | useDeleteMessageCallback: Deleting message', message);
24+
25+
const sendingStatus = isSendableMessage(message) ? message.sendingStatus : undefined;
26+
return new Promise((resolve, reject) => {
27+
logger.info('Channel | useDeleteMessageCallback: Deleting message requestState:', sendingStatus);
28+
// Message is only on local
29+
if ((sendingStatus === SendingStatus.FAILED || sendingStatus === SendingStatus.PENDING) && 'reqId' in message) {
30+
logger.info('Channel | useDeleteMessageCallback: Deleted message from local:', message);
31+
messagesDispatcher({
32+
type: messageActionTypes.ON_MESSAGE_DELETED_BY_REQ_ID,
33+
payload: message.reqId,
34+
});
35+
resolve(message);
36+
} else {
37+
logger.info('Channel | useDeleteMessageCallback: Deleting message from remote:', sendingStatus);
38+
currentGroupChannel
39+
.deleteMessage(message)
40+
.then(() => {
41+
logger.info('Channel | useDeleteMessageCallback: Deleting message success!', message);
42+
messagesDispatcher({
43+
type: messageActionTypes.ON_MESSAGE_DELETED,
44+
payload: message.messageId,
45+
});
46+
resolve(message);
47+
})
48+
.catch((err) => {
49+
logger.warning('Channel | useDeleteMessageCallback: Deleting message failed!', err);
50+
reject(err);
51+
});
52+
}
53+
});
54+
},
55+
[currentGroupChannel, messagesDispatcher],
56+
);
57+
}
58+
59+
export default useDeleteMessageCallback;

src/modules/Channel/context/hooks/useGetChannel.js

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import React, { useEffect } from 'react';
2+
3+
import * as messageActionTypes from '../dux/actionTypes';
4+
import { ChannelActionTypes } from '../dux/actionTypes';
5+
import { SdkStore } from '../../../../lib/types';
6+
import { LoggerInterface } from '../../../../lib/Logger';
7+
import { MarkAsReadSchedulerType } from '../../../../lib/hooks/useMarkAsReadScheduler';
8+
9+
type UseGetChannelOptions = {
10+
channelUrl: string;
11+
sdkInit: boolean;
12+
disableMarkAsRead: boolean;
13+
};
14+
type UseGetChannelParams = {
15+
messagesDispatcher: React.Dispatch<ChannelActionTypes>;
16+
sdk: SdkStore['sdk'];
17+
logger: LoggerInterface;
18+
markAsReadScheduler: MarkAsReadSchedulerType;
19+
};
20+
function useGetChannel(
21+
{ channelUrl, sdkInit, disableMarkAsRead }: UseGetChannelOptions,
22+
{ messagesDispatcher, sdk, logger, markAsReadScheduler }: UseGetChannelParams,
23+
) {
24+
useEffect(() => {
25+
if (channelUrl && sdkInit && sdk && sdk.groupChannel) {
26+
logger.info('Channel | useSetChannel fetching channel', channelUrl);
27+
sdk.groupChannel
28+
.getChannel(channelUrl)
29+
.then((groupChannel) => {
30+
logger.info('Channel | useSetChannel fetched channel', groupChannel);
31+
messagesDispatcher({
32+
type: messageActionTypes.SET_CURRENT_CHANNEL,
33+
payload: groupChannel,
34+
});
35+
36+
logger.info('Channel: Mark as read', groupChannel);
37+
if (!disableMarkAsRead) {
38+
markAsReadScheduler.push(groupChannel);
39+
}
40+
})
41+
.catch((e) => {
42+
logger.warning('Channel | useSetChannel fetch channel failed', { channelUrl, e });
43+
messagesDispatcher({
44+
type: messageActionTypes.SET_CHANNEL_INVALID,
45+
});
46+
});
47+
sdk
48+
.getAllEmoji()
49+
.then((emojiContainer_) => {
50+
logger.info('Channel: Getting emojis success', emojiContainer_);
51+
messagesDispatcher({
52+
type: messageActionTypes.SET_EMOJI_CONTAINER,
53+
payload: emojiContainer_,
54+
});
55+
})
56+
.catch((err) => {
57+
logger.error('Channel: Getting emojis failed', err);
58+
});
59+
}
60+
}, [channelUrl, sdkInit]);
61+
}
62+
63+
export default useGetChannel;

0 commit comments

Comments
 (0)