From c269e841f6739f1524a5f4b2d3a5f9c1240fc7b5 Mon Sep 17 00:00:00 2001 From: Gigiaj Date: Tue, 17 Jun 2025 20:15:26 -0500 Subject: [PATCH] restructure to use different rendering strat --- .../room/message/MessageOptionsMenu.tsx | 112 ++++++++++-------- 1 file changed, 64 insertions(+), 48 deletions(-) diff --git a/src/app/features/room/message/MessageOptionsMenu.tsx b/src/app/features/room/message/MessageOptionsMenu.tsx index d0c7277b..bc229ede 100644 --- a/src/app/features/room/message/MessageOptionsMenu.tsx +++ b/src/app/features/room/message/MessageOptionsMenu.tsx @@ -31,7 +31,11 @@ import { MessageSourceCodeItem, } from './Message'; import { ScreenSize, useScreenSizeContext } from '../../../hooks/useScreenSize'; -import { BottomSheetMenu } from './MobileContextMenu'; +import MobileContextMenu from '../../../molecules/mobile-context-menu/MobileContextMenu'; + +const EmojiBoard = lazy(() => + import('../../../components/emoji-board').then((module) => ({ default: module.EmojiBoard })) +); type BaseOptionProps = { mEvent: MatrixEvent; @@ -85,7 +89,10 @@ export const MessageDropdownMenu = forwardRef( size="300" after={} radii="300" - onClick={handleAddReactions} + onClick={(e) => { + handleAddReactions(e); + closeMenu(); + }} > Add Reaction @@ -93,7 +100,7 @@ export const MessageDropdownMenu = forwardRef( )} {relations && ( - + {}} /> )} ( type ExtendedOptionsProps = BaseOptionProps & { imagePackRooms: Room[] | undefined; - onActiveStateChange: React.Dispatch>; menuAnchor: RectCords | undefined; emojiBoardAnchor: RectCords | undefined; handleOpenEmojiBoard: MouseEventHandler; handleOpenMenu: MouseEventHandler; setMenuAnchor: React.Dispatch>; setEmojiBoardAnchor: React.Dispatch>; - isMobileSheetOpen; - setMobileSheetOpen; + isOptionsMenuOpen; + setOptionsMenuOpen; + isEmojiBoardOpen; + setEmojiBoardOpen; }; export function MessageOptionsMenu({ @@ -176,7 +184,6 @@ export function MessageOptionsMenu({ onReactionToggle, onReplyClick, onEditId, - onActiveStateChange, closeMenu, menuAnchor, emojiBoardAnchor, @@ -185,13 +192,11 @@ export function MessageOptionsMenu({ handleAddReactions, setMenuAnchor, setEmojiBoardAnchor, - isMobileSheetOpen, - setMobileSheetOpen, + isOptionsMenuOpen, + setOptionsMenuOpen, + isEmojiBoardOpen, + setEmojiBoardOpen, }: ExtendedOptionsProps) { - useEffect(() => { - onActiveStateChange?.(!!menuAnchor || !!emojiBoardAnchor); - }, [emojiBoardAnchor, menuAnchor, onActiveStateChange]); - const screenSize = useScreenSizeContext(); const isMobile = screenSize === ScreenSize.Mobile; const [view, setView] = useState('options'); @@ -218,47 +223,58 @@ export function MessageOptionsMenu({ if (isMobile) { return ( - setMobileSheetOpen(false)} isOpen={isMobileSheetOpen}> - {view === 'options' ? ( - { + <> + {isOptionsMenuOpen && ( + { closeMenu(); - setMobileSheetOpen(false); }} - handleAddReactions={() => setView('emoji')} - /> - ) : ( - -
- setView('options')}> - - - - Add Reaction - -
- { - onReactionToggle(mEvent.getId(), key); - setEmojiBoardAnchor(undefined); + isOpen={isOptionsMenuOpen} + > + { closeMenu(); - setMobileSheetOpen(false); }} - onCustomEmojiSelect={(mxc, shortcode) => { - onReactionToggle(mEvent.getId(), mxc, shortcode); - setEmojiBoardAnchor(undefined); - closeMenu(); - setMobileSheetOpen(false); - }} - requestClose={() => setEmojiBoardAnchor(undefined)} + handleAddReactions={handleAddReactions} /> -
+
)} -
+ + {isEmojiBoardOpen && ( + { + closeMenu(); + setEmojiBoardOpen(false); + }} + isOpen={isEmojiBoardOpen} + > + Loading

}> + { + onReactionToggle(mEvent.getId(), key); + setEmojiBoardAnchor(undefined); + setEmojiBoardOpen(false); + (document.activeElement as HTMLElement)?.blur(); + }} + onCustomEmojiSelect={(mxc, shortcode) => { + onReactionToggle(mEvent.getId(), mxc, shortcode); + setEmojiBoardAnchor(undefined); + setEmojiBoardOpen(false); + (document.activeElement as HTMLElement)?.blur(); + }} + requestClose={() => { + setEmojiBoardAnchor(undefined); + setEmojiBoardOpen(false); + }} + /> +
+
+ )} + ); }