Skip to content

Commit 7f42d2f

Browse files
authored
fix: Operate ephemeral channel (#432)
Ephemeral channel policy * Group channel list * Remove the message receipt status (channel preview) * Remove the unread message count (channel preview) * Group channel * Remove the message edit * Remove the message delete * Remove the message reactions * Remove the message receipt status (message) * Remove the message reply (quote_reply, thread) * Group channel settings * Remove the search in channel * Open channel * Remove the message edit * Remove the message delete
1 parent abe9d3f commit 7f42d2f

File tree

13 files changed

+232
-191
lines changed

13 files changed

+232
-191
lines changed

scripts/index_d_ts

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -539,9 +539,9 @@ declare module "SendbirdUIKitGlobal" {
539539
renderMessageInput?: () => React.ReactNode | React.ReactElement;
540540
renderTypingIndicator?: () => React.ReactNode | React.ReactElement;
541541
renderCustomSeparator?: (props: RenderCustomSeparatorProps) => React.ReactNode | React.ReactElement;
542-
renderFileUploadIcon?: () => React.ReactElement;
543-
renderVoiceMessageIcon?: () => React.ReactElement;
544-
renderSendMessageIcon?: () => React.ReactElement;
542+
renderFileUploadIcon?: () => React.ReactElement;
543+
renderVoiceMessageIcon?: () => React.ReactElement;
544+
renderSendMessageIcon?: () => React.ReactElement;
545545
}
546546

547547
export type CoreMessageType = AdminMessage | UserMessage | FileMessage;
@@ -600,9 +600,9 @@ declare module "SendbirdUIKitGlobal" {
600600
// value is removed when channelURL changes
601601
value?: string;
602602
ref?: React.MutableRefObject<any>;
603-
renderFileUploadIcon?: () => React.ReactElement;
604-
renderVoiceMessageIcon?: () => React.ReactElement;
605-
renderSendMessageIcon?: () => React.ReactElement;
603+
renderFileUploadIcon?: () => React.ReactElement;
604+
renderVoiceMessageIcon?: () => React.ReactElement;
605+
renderSendMessageIcon?: () => React.ReactElement;
606606
};
607607

608608
export type MessageListProps = {
@@ -1011,9 +1011,9 @@ declare module "SendbirdUIKitGlobal" {
10111011
renderCustomSeparator?: () => React.ReactElement;
10121012
renderParentMessageInfoPlaceholder?: (type: ParentMessageStateTypes) => React.ReactElement;
10131013
renderThreadListPlaceHolder?: (type: ThreadListStateTypes) => React.ReactElement;
1014-
renderFileUploadIcon?: () => React.ReactElement;
1015-
renderVoiceMessageIcon?: () => React.ReactElement;
1016-
renderSendMessageIcon?: () => React.ReactElement;
1014+
renderFileUploadIcon?: () => React.ReactElement;
1015+
renderVoiceMessageIcon?: () => React.ReactElement;
1016+
renderSendMessageIcon?: () => React.ReactElement;
10171017
}
10181018

10191019
type EventType = React.MouseEvent<HTMLDivElement | HTMLButtonElement> | React.KeyboardEvent<HTMLDivElement>;
@@ -1060,9 +1060,9 @@ declare module "SendbirdUIKitGlobal" {
10601060

10611061
export interface ThreadMessageInputProps {
10621062
className?: string;
1063-
renderFileUploadIcon?: () => React.ReactElement;
1064-
renderVoiceMessageIcon?: () => React.ReactElement;
1065-
renderSendMessageIcon?: () => React.ReactElement;
1063+
renderFileUploadIcon?: () => React.ReactElement;
1064+
renderVoiceMessageIcon?: () => React.ReactElement;
1065+
renderSendMessageIcon?: () => React.ReactElement;
10661066
}
10671067

10681068
/**
@@ -2059,9 +2059,9 @@ declare module '@sendbird/uikit-react/ui/MessageInput' {
20592059
onKeyUp?: (e: React.KeyboardEvent<HTMLDivElement>) => void,
20602060
onKeyDown?: (e: React.KeyboardEvent<HTMLDivElement>) => void,
20612061
onVoiceMessageIconClick?: () => void;
2062-
renderFileUploadIcon?: () => React.ReactElement;
2063-
renderVoiceMessageIcon?: () => React.ReactElement;
2064-
renderSendMessageIcon?: () => React.ReactElement;
2062+
renderFileUploadIcon?: () => React.ReactElement;
2063+
renderVoiceMessageIcon?: () => React.ReactElement;
2064+
renderSendMessageIcon?: () => React.ReactElement;
20652065
}
20662066
const MessageInput: React.FC<MessageInputProps>;
20672067
export default MessageInput;
@@ -2235,6 +2235,8 @@ declare module '@sendbird/uikit-react/ui/OpenChannelFileMessage' {
22352235
interface OpenChannelFileMessageProps {
22362236
className?: string | Array<string>;
22372237
message: SenbirdUIKitGlobal.ClientFileMessage;
2238+
isOperator?: boolean;
2239+
isEphemeral?: boolean;
22382240
userId: string;
22392241
disabled?: boolean;
22402242
chainTop?: boolean;
@@ -2248,8 +2250,10 @@ declare module '@sendbird/uikit-react/ui/OpenChannelFileMessage' {
22482250

22492251
declare module '@sendbird/uikit-react/ui/OpenChannelOGMessage' {
22502252
import type SenbirdUIKitGlobal from 'SendbirdUIKitGlobal';
2251-
interface OOpenChannelOGMessageProps {
2253+
interface OpenChannelOGMessageProps {
22522254
message: SenbirdUIKitGlobal.ClientUserMessage;
2255+
isOperator?: boolean;
2256+
isEphemeral?: boolean;
22532257
className?: string | Array<string>;
22542258
disabled?: boolean;
22552259
showEdit(bool: boolean): void;
@@ -2259,15 +2263,17 @@ declare module '@sendbird/uikit-react/ui/OpenChannelOGMessage' {
22592263
chainBottom?: boolean;
22602264
userId: string;
22612265
}
2262-
const OOpenChannelOGMessage: React.FC<OOpenChannelOGMessageProps>;
2263-
export default OOpenChannelOGMessage;
2266+
const OpenChannelOGMessage: React.FC<OpenChannelOGMessageProps>;
2267+
export default OpenChannelOGMessage;
22642268
}
22652269

22662270
declare module '@sendbird/uikit-react/ui/OpenChannelThumbnailMessage' {
22672271
import type SenbirdUIKitGlobal from 'SendbirdUIKitGlobal';
22682272
interface OpenChannelThumbnailMessageProps {
22692273
className?: string | Array<string>;
22702274
message: SenbirdUIKitGlobal.ClientFileMessage;
2275+
isOperator?: boolean;
2276+
isEphemeral?: boolean;
22712277
disabled: boolean;
22722278
userId: string;
22732279
chainTop: boolean;
@@ -2281,15 +2287,17 @@ declare module '@sendbird/uikit-react/ui/OpenChannelThumbnailMessage' {
22812287
}
22822288

22832289
declare module '@sendbird/uikit-react/ui/OpenChannelUserMessage' {
2284-
import type SenbirdUIKitGlobal from 'SendbirdUIKitGlobal';
2290+
import type SendbirdUIKitGlobal from 'SendbirdUIKitGlobal';
22852291
interface OpenChannelUserMessageProps {
22862292
className?: string | Array<string>;
2287-
message: SenbirdUIKitGlobal.ClientUserMessage;
2293+
message: SendbirdUIKitGlobal.ClientUserMessage;
2294+
isOperator?: boolean;
2295+
isEphemeral?: boolean;
22882296
userId: string;
22892297
disabled?: boolean;
22902298
showEdit(bool: boolean): void;
22912299
showRemove(bool: boolean): void;
2292-
resendMessage(message: SenbirdUIKitGlobal.ClientUserMessage): void;
2300+
resendMessage(message: SendbirdUIKitGlobal.ClientUserMessage): void;
22932301
chainTop?: boolean;
22942302
chainBottom?: boolean;
22952303
}

src/smart-components/Channel/components/ChannelHeader/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ const ChannelHeader: React.FC = () => {
8383
)
8484
}
8585
{
86-
showSearchIcon && (
86+
(showSearchIcon && !currentGroupChannel?.isEphemeral) && (
8787
<IconButton
8888
className="sendbird-chat-header__right__search"
8989
width="32px"

src/smart-components/ChannelList/components/AddChannel/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ export const AddChannel: React.VoidFunctionComponent = () => {
1212
const state = useSendbirdStateContext();
1313
const isOnline = state?.config?.isOnline;
1414
const disabled = !isOnline;
15-
const { overrideInviteUser } = useChannelListContext();
15+
const {
16+
overrideInviteUser,
17+
onBeforeCreateChannel,
18+
} = useChannelListContext();
1619

1720
return (
1821
<>
@@ -41,6 +44,7 @@ export const AddChannel: React.VoidFunctionComponent = () => {
4144
onCreateChannel={() => {
4245
setShowModal(false);
4346
}}
47+
onBeforeCreateChannel={onBeforeCreateChannel}
4448
/>
4549
)
4650
}

src/smart-components/ChannelList/components/ChannelPreview/index.tsx

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ const ChannelPreview: React.FC<ChannelPreviewInterface> = ({
115115
color={LabelColors.ONBACKGROUND_1}
116116
>
117117
<div>
118-
{ channelName }
118+
{channelName}
119119
</div>
120120
</Label>
121121
<Label
@@ -140,28 +140,29 @@ const ChannelPreview: React.FC<ChannelPreviewInterface> = ({
140140
}
141141
</div>
142142
{
143-
isMessageStatusEnabled
144-
? (
145-
<MessageStatus
146-
className="sendbird-channel-preview__content__upper__last-message-at"
147-
channel={channel}
148-
message={channel?.lastMessage as UserMessage | FileMessage}
149-
isDateSeparatorConsidered={false}
150-
/>
151-
)
152-
: (
153-
<Label
154-
className="sendbird-channel-preview__content__upper__last-message-at"
155-
type={LabelTypography.CAPTION_3}
156-
color={LabelColors.ONBACKGROUND_2}
157-
>
158-
{utils.getLastMessageCreatedAt({
159-
channel,
160-
locale: dateLocale,
161-
stringSet,
162-
})}
163-
</Label>
164-
)
143+
(!channel?.isEphemeral && isMessageStatusEnabled) && (
144+
<MessageStatus
145+
className="sendbird-channel-preview__content__upper__last-message-at"
146+
channel={channel}
147+
message={channel?.lastMessage as UserMessage | FileMessage}
148+
isDateSeparatorConsidered={false}
149+
/>
150+
)
151+
}
152+
{
153+
(!channel?.isEphemeral && !isMessageStatusEnabled) && (
154+
<Label
155+
className="sendbird-channel-preview__content__upper__last-message-at"
156+
type={LabelTypography.CAPTION_3}
157+
color={LabelColors.ONBACKGROUND_2}
158+
>
159+
{utils.getLastMessageCreatedAt({
160+
channel,
161+
locale: dateLocale,
162+
stringSet,
163+
})}
164+
</Label>
165+
)
165166
}
166167
</div>
167168
<div className="sendbird-channel-preview__content__lower">
@@ -186,25 +187,29 @@ const ChannelPreview: React.FC<ChannelPreviewInterface> = ({
186187
)
187188
}
188189
</Label>
189-
<div className="sendbird-channel-preview__content__lower__unread-message-count">
190-
{
191-
(isMentionEnabled && channel?.unreadMentionCount > 0)
192-
? (
193-
<MentionUserLabel
194-
className="sendbird-channel-preview__content__lower__unread-message-count__mention"
195-
color="purple"
196-
>
197-
{'@'}
198-
</MentionUserLabel>
199-
)
200-
: null
201-
}
202-
{
203-
utils.getChannelUnreadMessageCount(channel) // return number
204-
? <Badge count={utils.getChannelUnreadMessageCount(channel)} />
205-
: null
206-
}
207-
</div>
190+
{
191+
!channel?.isEphemeral && (
192+
<div className="sendbird-channel-preview__content__lower__unread-message-count">
193+
{
194+
(isMentionEnabled && channel?.unreadMentionCount > 0)
195+
? (
196+
<MentionUserLabel
197+
className="sendbird-channel-preview__content__lower__unread-message-count__mention"
198+
color="purple"
199+
>
200+
{'@'}
201+
</MentionUserLabel>
202+
)
203+
: null
204+
}
205+
{
206+
utils.getChannelUnreadMessageCount(channel) // return number
207+
? <Badge count={utils.getChannelUnreadMessageCount(channel)} />
208+
: null
209+
}
210+
</div>
211+
)
212+
}
208213
</div>
209214
</div>
210215
{

src/smart-components/OpenChannel/components/OpenChannelMessage/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ export default function MessagOpenChannelMessageeHoc(props: OpenChannelMessagePr
147147
<OpenChannelFileMessage
148148
message={message as FileMessage}
149149
isOperator={currentOpenChannel?.isOperator((message as FileMessage)?.sender?.userId)}
150+
isEphemeral={currentOpenChannel?.isEphemeral}
150151
disabled={editDisabled}
151152
userId={userId}
152153
showRemove={setShowRemove}
@@ -164,6 +165,7 @@ export default function MessagOpenChannelMessageeHoc(props: OpenChannelMessagePr
164165
<OpenChannelOGMessage
165166
message={message as UserMessage}
166167
isOperator={currentOpenChannel?.isOperator((message as UserMessage)?.sender?.userId)}
168+
isEphemeral={currentOpenChannel?.isEphemeral}
167169
userId={userId}
168170
showEdit={setShowEdit}
169171
disabled={editDisabled}
@@ -182,6 +184,7 @@ export default function MessagOpenChannelMessageeHoc(props: OpenChannelMessagePr
182184
<OpenChannelThumbnailMessage
183185
message={message as FileMessage}
184186
isOperator={currentOpenChannel?.isOperator((message as FileMessage)?.sender?.userId)}
187+
isEphemeral={currentOpenChannel?.isEphemeral}
185188
disabled={editDisabled}
186189
userId={userId}
187190
showRemove={setShowRemove}
@@ -200,6 +203,7 @@ export default function MessagOpenChannelMessageeHoc(props: OpenChannelMessagePr
200203
<OpenChannelUserMessage
201204
message={message as UserMessage}
202205
isOperator={currentOpenChannel?.isOperator((message as UserMessage)?.sender?.userId)}
206+
isEphemeral={currentOpenChannel?.isEphemeral}
203207
userId={userId}
204208
disabled={editDisabled}
205209
showEdit={setShowEdit}
@@ -237,7 +241,7 @@ export default function MessagOpenChannelMessageeHoc(props: OpenChannelMessagePr
237241
(showFileViewer && message?.messageType === 'file') && (
238242
<FileViewer
239243
onClose={() => setShowFileViewer(false)}
240-
message={message}
244+
message={message as FileMessage}
241245
onDelete={() => deleteMessage(message)}
242246
isByMe={isByMe}
243247
/>

0 commit comments

Comments
 (0)