1
1
import React , { useState , FormEvent , useRef , useEffect } from 'react' ;
2
- import { Conversation } from '../../types/chat' ;
2
+ import { Conversation , Message } from '../../types/chat' ;
3
3
import { Send , Square , Copy , RotateCcw , Share2 , Pencil , Loader2 } from 'lucide-react' ;
4
4
import MarkdownContent from './MarkdownContent' ;
5
5
import MessageToolboxMenu , { ToolboxAction } from '../ui/MessageToolboxMenu' ;
6
+ import { MessageHelper } from '../../services/message-helper' ;
6
7
7
8
interface ChatMessageAreaProps {
8
9
activeConversation : Conversation | null ;
@@ -30,12 +31,19 @@ export const ChatMessageArea: React.FC<ChatMessageAreaProps> = ({
30
31
const [ hoveredMessageId , setHoveredMessageId ] = useState < string | null > ( null ) ;
31
32
const [ editingMessageId , setEditingMessageId ] = useState < string | null > ( null ) ;
32
33
const [ editingContent , setEditingContent ] = useState ( '' ) ;
34
+ const [ messagesList , setMessagesList ] = useState < Message [ ] > ( [ ] ) ;
33
35
34
36
// Scroll to bottom when messages change
35
37
useEffect ( ( ) => {
36
38
setTimeout ( ( ) => {
37
39
messagesEndRef . current ?. scrollIntoView ( { behavior : 'smooth' } ) ;
38
40
} , 50 ) ;
41
+
42
+ console . log ( activeConversation ) ;
43
+
44
+ if ( activeConversation ) {
45
+ setMessagesList ( MessageHelper . mapMessagesTreeToList ( activeConversation ) ) ;
46
+ }
39
47
} , [ activeConversation ?. messages ] ) ;
40
48
41
49
const handleSubmit = ( e : FormEvent ) => {
@@ -70,23 +78,16 @@ export const ChatMessageArea: React.FC<ChatMessageAreaProps> = ({
70
78
setEditingContent ( content ) ;
71
79
} ;
72
80
73
- // Handle save edit
74
- const handleSaveEdit = ( ) => {
75
- if ( editingMessageId && onEditMessage && editingContent . trim ( ) ) {
76
- onEditMessage ( editingMessageId , editingContent ) ;
77
- setEditingMessageId ( null ) ;
78
- setEditingContent ( '' ) ;
79
- }
80
- } ;
81
-
82
81
// Handle send edited message
83
82
const handleSendEditedMessage = ( ) => {
84
- if ( editingMessageId && editingContent . trim ( ) ) {
83
+ if ( editingMessageId && onEditMessage && editingContent . trim ( ) ) {
84
+ const newContent = editingContent ;
85
+
85
86
// First cancel the edit mode
86
87
setEditingMessageId ( null ) ;
87
88
setEditingContent ( '' ) ;
88
89
89
- onSendMessage ( input ) ;
90
+ onEditMessage ( editingMessageId , newContent ) ;
90
91
}
91
92
} ;
92
93
@@ -109,6 +110,10 @@ export const ChatMessageArea: React.FC<ChatMessageAreaProps> = ({
109
110
console . error ( `Function not implemented yet: ${ action } ` ) ;
110
111
} ;
111
112
113
+ const getMessagesList = ( ) => {
114
+ return messagesList ;
115
+ }
116
+
112
117
// If no active conversation is selected
113
118
if ( ! activeConversation ) {
114
119
return (
@@ -125,7 +130,7 @@ export const ChatMessageArea: React.FC<ChatMessageAreaProps> = ({
125
130
< div className = "flex flex-col h-full" >
126
131
{ /* Messages area */ }
127
132
< div className = "flex-1 p-4 space-y-4 overflow-y-auto" >
128
- { activeConversation . messages . filter ( m => m . role !== 'system' ) . map ( ( message ) => {
133
+ { getMessagesList ( ) . map ( ( message ) => {
129
134
const isUserMessage = message . role === 'user' ;
130
135
const isEditing = editingMessageId === message . messageId ;
131
136
0 commit comments