Skip to content

Commit 9523b53

Browse files
committed
[Refactor] Migrate GroupChannelProvider to new state management pattern
1 parent c8852a4 commit 9523b53

File tree

10 files changed

+616
-345
lines changed

10 files changed

+616
-345
lines changed

apps/testing/vite.config.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import postcssRtlOptions from '../../postcssRtlOptions.mjs';
99
export default defineConfig({
1010
plugins: [react(), vitePluginSvgr({ include: '**/*.svg' })],
1111
css: {
12+
preprocessorOptions: {
13+
scss: {
14+
silenceDeprecations: ['legacy-js-api'],
15+
},
16+
},
1217
postcss: {
1318
plugins: [postcssRtl(postcssRtlOptions)],
1419
},

src/modules/GroupChannel/components/FileViewer/index.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import React from 'react';
22
import type { FileMessage } from '@sendbird/chat/message';
33

4+
import { useGroupChannel } from '../../context/hooks/useGroupChannel';
45
import { FileViewerView } from './FileViewerView';
5-
import { useGroupChannelContext } from '../../context/GroupChannelProvider';
66
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
77

88
export interface FileViewerProps {
@@ -11,7 +11,10 @@ export interface FileViewerProps {
1111
}
1212

1313
export const FileViewer = (props: FileViewerProps) => {
14-
const { deleteMessage, onBeforeDownloadFileMessage } = useGroupChannelContext();
14+
const {
15+
state: { onBeforeDownloadFileMessage },
16+
actions: { deleteMessage },
17+
} = useGroupChannel();
1518
const { config } = useSendbirdStateContext();
1619
const { logger } = config;
1720
return (

src/modules/GroupChannel/components/GroupChannelUI/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@ import GroupChannelHeader, { GroupChannelHeaderProps } from '../GroupChannelHead
77
import MessageList, { GroupChannelMessageListProps } from '../MessageList';
88
import MessageInputWrapper from '../MessageInputWrapper';
99
import { deleteNullish } from '../../../../utils/utils';
10+
import { useGroupChannel } from '../../context/hooks/useGroupChannel';
1011

1112
export interface GroupChannelUIProps extends GroupChannelUIBasicProps {}
1213

1314
export const GroupChannelUI = (props: GroupChannelUIProps) => {
1415
const context = useGroupChannelContext();
15-
const { channelUrl, fetchChannelError } = context;
16+
const { state: { channelUrl, fetchChannelError } } = useGroupChannel();
1617

1718
// Inject components to presentation layer
1819
const {

src/modules/GroupChannel/components/Message/index.tsx

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,43 @@ import { useIIFE } from '@sendbird/uikit-tools';
44
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
55
import { getSuggestedReplies, isSendableMessage } from '../../../../utils';
66
import { isDisabledBecauseFrozen, isDisabledBecauseMuted } from '../../context/utils';
7-
import { useGroupChannelContext } from '../../context/GroupChannelProvider';
87
import MessageView, { MessageProps } from './MessageView';
98
import FileViewer from '../FileViewer';
109
import RemoveMessageModal from '../RemoveMessageModal';
1110
import { ThreadReplySelectType } from '../../context/const';
11+
import { useGroupChannel } from '../../context/hooks/useGroupChannel';
1212

1313
export const Message = (props: MessageProps): React.ReactElement => {
1414
const { config, emojiManager } = useSendbirdStateContext();
1515
const {
16-
loading,
17-
currentChannel,
18-
animatedMessageId,
19-
setAnimatedMessageId,
20-
scrollToMessage,
21-
replyType,
22-
threadReplySelectType,
23-
isReactionEnabled,
24-
toggleReaction,
25-
nicknamesMap,
26-
setQuoteMessage,
27-
renderUserMentionItem,
28-
filterEmojiCategoryIds,
29-
onQuoteMessageClick,
30-
onReplyInThreadClick,
31-
onMessageAnimated,
32-
onBeforeDownloadFileMessage,
33-
messages,
34-
updateUserMessage,
35-
sendUserMessage,
36-
resendMessage,
37-
deleteMessage,
38-
} = useGroupChannelContext();
16+
state: {
17+
loading,
18+
currentChannel,
19+
animatedMessageId,
20+
21+
replyType,
22+
threadReplySelectType,
23+
isReactionEnabled,
24+
nicknamesMap,
25+
renderUserMentionItem,
26+
filterEmojiCategoryIds,
27+
onQuoteMessageClick,
28+
onReplyInThreadClick,
29+
onMessageAnimated,
30+
onBeforeDownloadFileMessage,
31+
messages,
32+
},
33+
actions: {
34+
toggleReaction,
35+
setQuoteMessage,
36+
setAnimatedMessageId,
37+
scrollToMessage,
38+
updateUserMessage,
39+
sendUserMessage,
40+
resendMessage,
41+
deleteMessage,
42+
},
43+
} = useGroupChannel();
3944

4045
const { message } = props;
4146
const initialized = !loading && Boolean(currentChannel);

src/modules/GroupChannel/components/MessageList/index.tsx

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ import FrozenNotification from '../FrozenNotification';
1414
import { SCROLL_BUFFER } from '../../../../utils/consts';
1515
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
1616
import TypingIndicatorBubble from '../../../../ui/TypingIndicatorBubble';
17-
import { useGroupChannelContext } from '../../context/GroupChannelProvider';
1817
import { GroupChannelUIBasicProps } from '../GroupChannelUI/GroupChannelUIView';
1918
import { deleteNullish } from '../../../../utils/utils';
2019
import { getMessagePartsInfo } from './getMessagePartsInfo';
2120
import { MessageProvider } from '../../../Message/context/MessageProvider';
2221
import { getComponentKeyFromMessage } from '../../context/utils';
2322
import { InfiniteList } from './InfiniteList';
23+
import { useGroupChannel } from '../../context/hooks/useGroupChannel';
2424

2525
export interface GroupChannelMessageListProps {
2626
className?: string;
@@ -67,25 +67,29 @@ export const MessageList = (props: GroupChannelMessageListProps) => {
6767
} = deleteNullish(props);
6868

6969
const {
70-
channelUrl,
71-
hasNext,
72-
loading,
73-
messages,
74-
newMessages,
75-
scrollToBottom,
76-
isScrollBottomReached,
77-
isMessageGroupingEnabled,
78-
scrollRef,
79-
scrollDistanceFromBottomRef,
80-
scrollPositionRef,
81-
currentChannel,
82-
replyType,
83-
scrollPubSub,
84-
loadNext,
85-
loadPrevious,
86-
setIsScrollBottomReached,
87-
resetNewMessages,
88-
} = useGroupChannelContext();
70+
state: {
71+
channelUrl,
72+
hasNext,
73+
loading,
74+
messages,
75+
newMessages,
76+
isScrollBottomReached,
77+
isMessageGroupingEnabled,
78+
currentChannel,
79+
replyType,
80+
scrollPubSub,
81+
loadNext,
82+
loadPrevious,
83+
resetNewMessages,
84+
scrollRef,
85+
scrollPositionRef,
86+
scrollDistanceFromBottomRef,
87+
},
88+
actions: {
89+
scrollToBottom,
90+
setIsScrollBottomReached,
91+
},
92+
} = useGroupChannel();
8993

9094
const store = useSendbirdStateContext();
9195

src/modules/GroupChannel/components/RemoveMessageModal/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import React from 'react';
2-
import { useGroupChannelContext } from '../../context/GroupChannelProvider';
32
import RemoveMessageModalView, { RemoveMessageModalProps } from './RemoveMessageModalView';
3+
import { useGroupChannel } from '../../context/hooks/useGroupChannel';
44

55
export const RemoveMessageModal = (props: RemoveMessageModalProps) => {
6-
const { deleteMessage } = useGroupChannelContext();
6+
const { actions: { deleteMessage } } = useGroupChannel();
77
return <RemoveMessageModalView {...props} deleteMessage={deleteMessage} />;
88
};
99

0 commit comments

Comments
 (0)