Skip to content

Commit f8a9ec0

Browse files
authored
1 parent 278822f commit f8a9ec0

File tree

3 files changed

+111
-27
lines changed

3 files changed

+111
-27
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import React, { useState } from 'react';
2+
import ChannelSettings from '../../../ChannelSettings';
3+
import { CustomSampleAppId, CustomSampleUserNames } from './const';
4+
import GroupChannelList from '../../../GroupChannelList';
5+
import Channel from '../../../Channel';
6+
import SendbirdProvider from '../../../../lib/Sendbird';
7+
import MessageContent from '../../../../ui/MessageContent';
8+
9+
const userName = CustomSampleUserNames[0];
10+
const MessageContentLongPress = () => {
11+
const [channelUrl, setChannelUrl] = useState();
12+
const [showSettings, setShowSettings] = useState(false);
13+
14+
const setCurrentChannel = (channel) => {
15+
setChannelUrl(channel?.url);
16+
};
17+
18+
return (
19+
<SendbirdProvider
20+
appId={CustomSampleAppId}
21+
userId={userName}
22+
nickname={userName}
23+
theme="dark"
24+
showSearchIcon
25+
allowProfileEdit
26+
breakpoint={/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)}
27+
>
28+
<div style={{ height: '100%', width: '100%', display: 'flex' }}>
29+
<div className="sendbird-app__channellist-wrap">
30+
<GroupChannelList
31+
selectedChannelUrl={channelUrl}
32+
onChannelSelect={setCurrentChannel}
33+
onChannelCreated={setCurrentChannel}
34+
/>
35+
</div>
36+
<div className="sendbird-app__conversation-wrap">
37+
<Channel
38+
channelUrl={channelUrl}
39+
onChatHeaderActionClick={() => {
40+
setShowSettings(true);
41+
}}
42+
renderMessageContent={(props) => (
43+
<MessageContent
44+
{...props}
45+
onLongPress={(e, contentRef) => {
46+
if (contentRef?.current) {
47+
const belowContainer = document.createElement('div');
48+
belowContainer.style.cssText = 'background-color: white;';
49+
belowContainer.innerText = 'This post is appended!';
50+
contentRef.current.appendChild(belowContainer);
51+
}
52+
}}
53+
/>
54+
)}
55+
/>
56+
</div>
57+
{showSettings && (
58+
<div className="sendbird-app__settingspanel-wrap">
59+
<ChannelSettings
60+
channelUrl={channelUrl}
61+
onCloseClick={() => {
62+
setShowSettings(false);
63+
}}
64+
/>
65+
</div>
66+
)}
67+
</div>
68+
</SendbirdProvider>
69+
);
70+
};
71+
72+
export default MessageContentLongPress;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const age = 75;
2+
export const CustomSampleAppId = process.env.STORYBOOK_APP_ID;
3+
export const CustomSampleUserNames = [
4+
`hoon${age}1`,
5+
`hoon${age}2`,
6+
`hoon${age}3`,
7+
`hoon${age}4`,
8+
`eunseo${age}1`,
9+
];

src/ui/MessageContent/index.tsx

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import MobileFeedbackMenu from '../MobileFeedbackMenu';
4444
import MessageFeedbackModal from '../../modules/Channel/components/MessageFeedbackModal';
4545
import { SbFeedbackStatus } from './types';
4646
import MessageFeedbackFailedModal from '../../modules/Channel/components/MessageFeedbackFailedModal';
47+
import { MobileBottomSheetProps } from '../MobileMenu/types';
4748

4849
export interface MessageContentProps {
4950
className?: string | Array<string>;
@@ -80,6 +81,7 @@ export interface MessageContentProps {
8081
renderMessageMenu?: (props: MessageMenuProps) => ReactNode;
8182
renderEmojiMenu?: (props: MessageEmojiMenuProps) => ReactNode;
8283
renderEmojiReactions?: (props: EmojiReactionsProps) => ReactNode;
84+
renderMobileMenuOnLongPress?: (props: MobileBottomSheetProps) => React.ReactElement;
8385
}
8486

8587
export default function MessageContent(props: MessageContentProps): ReactElement {
@@ -129,6 +131,9 @@ export default function MessageContent(props: MessageContentProps): ReactElement
129131
renderEmojiReactions = (props: EmojiReactionsProps) => (
130132
<EmojiReactions {...props} />
131133
),
134+
renderMobileMenuOnLongPress = (props: MobileBottomSheetProps) => (
135+
<MobileMenu {...props} />
136+
),
132137
} = props;
133138

134139
const { dateLocale } = useLocalization();
@@ -460,33 +465,31 @@ export default function MessageContent(props: MessageContentProps): ReactElement
460465
{
461466
showMenu && (
462467
message?.isUserMessage?.() || message?.isFileMessage?.() || message?.isMultipleFilesMessage?.()
463-
) && (
464-
<MobileMenu
465-
parentRef={contentRef}
466-
channel={channel}
467-
hideMenu={() => { setShowMenu(false); }}
468-
message={message}
469-
isReactionEnabled={isReactionEnabledInChannel}
470-
isByMe={isByMe}
471-
userId={userId}
472-
replyType={replyType}
473-
disabled={disabled}
474-
showRemove={showRemove}
475-
emojiContainer={emojiContainer}
476-
resendMessage={resendMessage}
477-
deleteMessage={deleteMessage}
478-
setQuoteMessage={setQuoteMessage}
479-
toggleReaction={toggleReaction}
480-
showEdit={showEdit}
481-
onReplyInThread={({ message }) => {
482-
if (threadReplySelectType === ThreadReplySelectType.THREAD) {
483-
onReplyInThread?.({ message });
484-
} else if (threadReplySelectType === ThreadReplySelectType.PARENT) {
485-
scrollToMessage?.(message?.parentMessage?.createdAt || 0, message?.parentMessageId || 0);
486-
}
487-
}}
488-
/>
489-
)
468+
) && renderMobileMenuOnLongPress({
469+
parentRef: contentRef,
470+
channel,
471+
hideMenu: () => { setShowMenu(false); },
472+
message,
473+
isReactionEnabled: isReactionEnabledInChannel,
474+
isByMe,
475+
userId,
476+
replyType,
477+
disabled,
478+
showRemove,
479+
emojiContainer,
480+
resendMessage,
481+
deleteMessage,
482+
setQuoteMessage,
483+
toggleReaction,
484+
showEdit,
485+
onReplyInThread: ({ message }) => {
486+
if (threadReplySelectType === ThreadReplySelectType.THREAD) {
487+
onReplyInThread?.({ message });
488+
} else if (threadReplySelectType === ThreadReplySelectType.PARENT) {
489+
scrollToMessage?.(message?.parentMessage?.createdAt || 0, message?.parentMessageId || 0);
490+
}
491+
},
492+
})
490493
}
491494
{
492495
message?.myFeedback?.rating && showFeedbackOptionsMenu && (

0 commit comments

Comments
 (0)