diff --git a/apps/desktop/src/pages/ConversationPage.tsx b/apps/desktop/src/pages/ConversationPage.tsx index 63b11b7..54a6e5e 100644 --- a/apps/desktop/src/pages/ConversationPage.tsx +++ b/apps/desktop/src/pages/ConversationPage.tsx @@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next'; import { useParams } from 'react-router-dom'; import { Virtuoso, type VirtuosoHandle } from 'react-virtuoso'; +import { ComposerActionsMenu } from '../components/ComposerActionsMenu'; import { ConversationHeader } from '../components/ConversationHeader'; import { EmojiPicker } from '../components/EmojiPicker'; import { EmptyState } from '../components/EmptyState'; @@ -16,10 +17,8 @@ import { ArrowRightIcon, ChevronDownIcon, ChevronUpIcon, - EyeOffIcon, PencilIcon, PlusIcon, - PollIcon, ReplyIcon, SearchIcon, SendIcon, @@ -237,6 +236,8 @@ export function ConversationPage() { const [mentionState, setMentionState] = useState<{ query: string; start: number } | null>(null); const [emojiOpen, setEmojiOpen] = useState(false); const [gifPickerOpen, setGifPickerOpen] = useState(false); + const [actionsMenuOpen, setActionsMenuOpen] = useState(false); + const actionsMenuAnchorRef = useRef(null); // Sticky toggle: when on, the next image(s) sent are marked view-once. // Auto-clears on a successful send so the composer doesn't accidentally // burn the message-after-next. @@ -1243,55 +1244,32 @@ export function ConversationPage() { className="hidden" onChange={(e) => handleFilesChosen(e.target.files)} /> + {/* [+] popover trigger — opens ComposerActionsMenu (file/poll/whiteboard/watch/game) */} - - - - + onCreateWhiteboard={() => void handleCreateWhiteboard()} + onStartWatchTogether={() => setWatchDialogOpen(true)} + onStartGame={() => setGameDialogOpen(true)} + canStartGame={conversation?.members?.length === 2} + />
- { @@ -1898,32 +1862,3 @@ function AttachmentPreview({ ); } -function WhiteboardIcon(props: React.SVGProps) { - return ( - - - - - ); -} - -function PlayBoxIcon(props: React.SVGProps) { - return ( - - - - - ); -} - -function GameIcon(props: React.SVGProps) { - return ( - - - - - ); -}