Skip to content

Commit a8297f6

Browse files
authored
refactor: should disable in message input wrapper view (#1137)
## Changes - Updated the logic to align with other platforms for consistency. - Relocated the logic to the same section where other `disabled` conditions are checked. ticket: [AC-2781] [AC-2781]: https://sendbird.atlassian.net/browse/AC-2781?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
1 parent 7c61d09 commit a8297f6

File tree

4 files changed

+12
-51
lines changed

4 files changed

+12
-51
lines changed

src/modules/Channel/components/MessageInputWrapper/index.tsx

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import React from 'react';
2-
3-
import { getSuggestedReplies } from '../../../../utils';
42
import MessageInputWrapperView from '../../../GroupChannel/components/MessageInputWrapper/MessageInputWrapperView';
53
import { useChannelContext } from '../../context/ChannelProvider';
6-
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
74
import { GroupChannelUIBasicProps } from '../../../GroupChannel/components/GroupChannelUI/GroupChannelUIView';
85

96
export interface MessageInputWrapperProps {
@@ -16,30 +13,13 @@ export interface MessageInputWrapperProps {
1613
}
1714

1815
export const MessageInputWrapper = (props: MessageInputWrapperProps) => {
19-
const { config } = useSendbirdStateContext();
2016
const context = useChannelContext();
21-
const {
22-
quoteMessage,
23-
localMessages,
24-
currentGroupChannel,
25-
sendMessage,
26-
sendFileMessage,
27-
sendVoiceMessage,
28-
sendMultipleFilesMessage,
29-
} = context;
30-
31-
const lastMessage = currentGroupChannel?.lastMessage;
32-
const isLastMessageSuggestedRepliesEnabled = config?.groupChannel?.enableSuggestedReplies
33-
&& getSuggestedReplies(lastMessage).length > 0
34-
&& localMessages?.length === 0;
35-
const disableMessageInput = props.disabled
36-
|| isLastMessageSuggestedRepliesEnabled && !!lastMessage?.extendedMessagePayload?.['disable_chat_input'];
17+
const { quoteMessage, currentGroupChannel, sendMessage, sendFileMessage, sendVoiceMessage, sendMultipleFilesMessage } = context;
3718

3819
return (
3920
<MessageInputWrapperView
4021
{...props}
4122
{...context}
42-
disabled={disableMessageInput}
4323
currentChannel={currentGroupChannel}
4424
sendUserMessage={(params) => {
4525
return sendMessage({

src/modules/GroupChannel/components/MessageInputWrapper/MessageInputWrapperView.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type {
1414
import {
1515
isDisabledBecauseFrozen,
1616
isDisabledBecauseMuted,
17+
isDisabledBecauseSuggestedReplies,
1718
} from '../../context/utils';
1819
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
1920
import { useLocalization } from '../../../../lib/LocalizationContext';
@@ -97,11 +98,13 @@ export const MessageInputWrapperView = React.forwardRef((
9798

9899
// Conditions
99100
const isMessageInputDisabled = loading
100-
|| !currentChannel
101+
|| (!currentChannel || !sdk)
102+
|| (!sdk.isCacheEnabled && !isOnline)
101103
|| isDisabledBecauseFrozen(currentChannel)
102104
|| isDisabledBecauseMuted(currentChannel)
103-
|| (!isOnline && !sdk?.isCacheEnabled)
105+
|| isDisabledBecauseSuggestedReplies(currentChannel, config.groupChannel.enableSuggestedReplies)
104106
|| disabled;
107+
105108
const showSuggestedMentionList = !isMessageInputDisabled
106109
&& isMentionEnabled
107110
&& mentionNickname.length > 0
@@ -192,7 +195,7 @@ export const MessageInputWrapperView = React.forwardRef((
192195
) : (
193196
<MessageInput
194197
className="sendbird-message-input-wrapper__message-input"
195-
channel={currentChannel as GroupChannel}
198+
channel={currentChannel}
196199
channelUrl={currentChannel?.url}
197200
isMobile={isMobile}
198201
acceptableMimeTypes={acceptableMimeTypes}

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

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import React from 'react';
22
import MessageInputWrapperView from './MessageInputWrapperView';
33
import { useGroupChannelContext } from '../../context/GroupChannelProvider';
4-
import { useIIFE } from '@sendbird/uikit-tools';
5-
import { getSuggestedReplies, isSendableMessage } from '../../../../utils';
6-
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
74
import { GroupChannelUIBasicProps } from '../GroupChannelUI/GroupChannelUIView';
85

96
export interface MessageInputWrapperProps {
@@ -16,31 +13,8 @@ export interface MessageInputWrapperProps {
1613
}
1714

1815
export const MessageInputWrapper = (props: MessageInputWrapperProps) => {
19-
const { config } = useSendbirdStateContext();
2016
const context = useGroupChannelContext();
21-
const {
22-
messages,
23-
currentChannel,
24-
} = context;
25-
const lastMessage = currentChannel?.lastMessage;
26-
const isLastMessageSuggestedRepliesEnabled = useIIFE(() => {
27-
if (!config?.groupChannel?.enableSuggestedReplies) return false;
28-
if (getSuggestedReplies(lastMessage ?? undefined).length === 0) return false;
29-
const lastMessageInContext = messages[messages.length - 1];
30-
if (isSendableMessage(lastMessageInContext) && lastMessageInContext.sendingStatus !== 'succeeded') return false;
31-
32-
return true;
33-
});
34-
const disableMessageInput = props.disabled
35-
|| isLastMessageSuggestedRepliesEnabled && !!lastMessage?.extendedMessagePayload?.['disable_chat_input'];
36-
37-
return (
38-
<MessageInputWrapperView
39-
{...props}
40-
{...context}
41-
disabled={disableMessageInput}
42-
/>
43-
);
17+
return <MessageInputWrapperView {...props} {...context} />;
4418
};
4519

4620
export { VoiceMessageInputWrapper, type VoiceMessageInputWrapperProps } from './VoiceMessageInputWrapper';

src/modules/GroupChannel/context/utils.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,7 @@ export const isDisabledBecauseMuted = (groupChannel?: GroupChannel | null) => {
3535
if (!groupChannel) return false;
3636
return groupChannel.myMutedState === 'muted';
3737
};
38+
39+
export const isDisabledBecauseSuggestedReplies = (channel: GroupChannel | null | undefined, enableSuggestedReplies: boolean) => {
40+
return enableSuggestedReplies && !!channel?.lastMessage?.extendedMessagePayload?.disable_chat_input;
41+
};

0 commit comments

Comments
 (0)