From f27adc3360cfa1600c9f659c608ce56a40f93a79 Mon Sep 17 00:00:00 2001 From: Alexander Daichendt Date: Wed, 12 Feb 2025 13:28:28 +0100 Subject: [PATCH] feat: editing of messages --- client/src/components/ChatMessage.tsx | 62 ++++++++++++++++++++---- client/src/components/ChatProvider.tsx | 2 + client/src/components/MessageDisplay.tsx | 13 ++++- client/src/contexts/ChatContext.tsx | 2 + client/src/hooks/useWebSocket.ts | 7 +++ client/src/reducers/chatReducers.ts | 19 ++++++++ server/src/handleClientMessage.ts | 21 ++++++++ 7 files changed, 115 insertions(+), 11 deletions(-) diff --git a/client/src/components/ChatMessage.tsx b/client/src/components/ChatMessage.tsx index 752759f..cb6ee59 100644 --- a/client/src/components/ChatMessage.tsx +++ b/client/src/components/ChatMessage.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useState } from "react"; import { ChatMessage } from "../../../shared"; function ChatMessageDisplay({ @@ -10,14 +10,28 @@ function ChatMessageDisplay({ message: ChatMessage; userId: string | undefined; onDelete: (messageId: string) => void; - onEdit: (messageId: string) => void; + onEdit: (messageId: string, newContent: string) => void; }) { + const [isEditing, setIsEditing] = useState(false); + const [editContent, setEditContent] = useState(message.content); const isOwn = userId === message.author.userId; const timestamp = new Date(message.timestamp).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", }); + const handleSave = () => { + if (editContent.trim() !== message.content) { + onEdit(message.id, editContent); + } + setIsEditing(false); + }; + + const handleCancel = () => { + setEditContent(message.content); + setIsEditing(false); + }; + return (
-
- {message.content} -
- {isOwn && ( + {isEditing ? ( +
+