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