From 3ead68b3e7b64b6e12d1d7d34588b33b6e10123f Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Fri, 20 Mar 2026 18:32:18 +0100 Subject: [PATCH] refactor: migrate Message context menu to centralized store --- packages/web/src/components/chat/Message.tsx | 31 +++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/packages/web/src/components/chat/Message.tsx b/packages/web/src/components/chat/Message.tsx index 0d369611..e3c1003b 100644 --- a/packages/web/src/components/chat/Message.tsx +++ b/packages/web/src/components/chat/Message.tsx @@ -3,7 +3,8 @@ import { createPortal } from 'react-dom'; import type { MessageWithUser } from '@backspace/shared'; import { MarkdownRenderer } from './MarkdownRenderer'; import { Avatar } from '../ui/Avatar'; -import { ContextMenu } from '../ui/ContextMenu'; +import { useContextMenu } from '../../hooks/useContextMenu'; +import type { ContextMenuItem } from '../../stores/contextMenuStore'; import { useAuthStore } from '../../stores/authStore'; import { useChatStore } from '../../stores/chatStore'; import { useSpaceStore } from '../../stores/spaceStore'; @@ -156,10 +157,17 @@ export function Message({ message, isCompact, isFirstInGroup }: MessageProps) { }); }; - const contextMenuItems = []; + const contextMenuItems: ContextMenuItem[] = []; if (isAuthor) { contextMenuItems.push({ + key: 'edit', + type: 'action', label: 'Edit Message', + icon: ( + + + + ), onClick: () => { setEditContent(message.content ?? ''); setIsEditing(true); @@ -168,12 +176,21 @@ export function Message({ message, isCompact, isFirstInGroup }: MessageProps) { } if (canDelete) { contextMenuItems.push({ + key: 'delete', + type: 'action', label: 'Delete Message', + icon: ( + + + + ), onClick: () => deleteMessage(message.id, channelKey), danger: true, }); } + const { onContextMenu } = useContextMenu(contextMenuItems); + const handleEditSubmit = async (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); @@ -519,9 +536,9 @@ export function Message({ message, isCompact, isFirstInGroup }: MessageProps) { ); - if (contextMenuItems.length > 0) { - return {content}; - } - - return content; + return ( +
0 ? onContextMenu : undefined}> + {content} +
+ ); }