hide the ChatBox instead of unmount it to prevent lose chat history.
This commit is contained in:
+3
-4
@@ -61,15 +61,14 @@ function App() {
|
||||
|
||||
{/* Main Display Area containing MainContent, ChatBox, and Settings */}
|
||||
<div className="main-display-area">
|
||||
{showSettings ? (
|
||||
<SettingsPanel onClose={() => setShowSettings(false)} />
|
||||
) : (
|
||||
{showSettings && <SettingsPanel onClose={() => setShowSettings(false)} />}
|
||||
{!showSettings && (
|
||||
<>
|
||||
{showInstrumentSelection && <InstrumentSelection />}
|
||||
<MainContent />
|
||||
{showChatBox && <ChatBox />}
|
||||
</>
|
||||
)}
|
||||
<ChatBox isVisible={showChatBox && !showSettings} />
|
||||
</div>
|
||||
|
||||
{/* Track Control */}
|
||||
|
||||
+35
-16
@@ -1,4 +1,4 @@
|
||||
import React, { useState, useRef, useEffect, memo } from 'react';
|
||||
import React, { useState, useRef, useEffect, memo, useCallback } from 'react';
|
||||
import { FaPlus, FaBan } from 'react-icons/fa';
|
||||
import { UserMessage, AssistantMessage } from './chat';
|
||||
import { AgentCore } from '../agent/core/AgentCore';
|
||||
@@ -44,7 +44,11 @@ const createLLMProvider = (): LLMProvider => {
|
||||
}
|
||||
};
|
||||
|
||||
const ChatBox: React.FC = () => {
|
||||
interface ChatBoxProps {
|
||||
isVisible: boolean;
|
||||
}
|
||||
|
||||
const ChatBox: React.FC<ChatBoxProps> = ({ isVisible }) => {
|
||||
const [inputValue, setInputValue] = useState('');
|
||||
const textareaRef = useRef<HTMLTextAreaElement>(null);
|
||||
|
||||
@@ -62,6 +66,33 @@ const ChatBox: React.FC = () => {
|
||||
// Track if this is the first message (for system prompt logging)
|
||||
const [isFirstMessage, setIsFirstMessage] = useState(true);
|
||||
|
||||
const generateMessageId = (): string => {
|
||||
return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
|
||||
};
|
||||
|
||||
const clearChatUI = useCallback(async () => {
|
||||
// Clear UI state
|
||||
setMessages([]);
|
||||
|
||||
// Reset first message flag so system prompt will be logged again
|
||||
setIsFirstMessage(true);
|
||||
|
||||
// Auto-show welcome message after clearing (like on app startup)
|
||||
try {
|
||||
const result = await processUserMessage('/welcome');
|
||||
if (result.pseudoAssistantResponse) {
|
||||
const pseudoId = generateMessageId();
|
||||
setMessages(prev => [...prev, {
|
||||
id: pseudoId,
|
||||
role: 'assistant',
|
||||
content: result.pseudoAssistantResponse!,
|
||||
}]);
|
||||
}
|
||||
} catch {
|
||||
// ignore errors, just don't show welcome if it fails
|
||||
}
|
||||
}, []);
|
||||
|
||||
// Initialize AgentCore with configured provider and register clear UI callback
|
||||
useEffect(() => {
|
||||
const initializeProvider = async () => {
|
||||
@@ -103,11 +134,7 @@ const ChatBox: React.FC = () => {
|
||||
// ignore
|
||||
}
|
||||
})();
|
||||
}, []);
|
||||
|
||||
const generateMessageId = (): string => {
|
||||
return `msg_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
|
||||
};
|
||||
}, [clearChatUI]);
|
||||
|
||||
const handleAbort = () => {
|
||||
if (abortController) {
|
||||
@@ -128,14 +155,6 @@ const ChatBox: React.FC = () => {
|
||||
}
|
||||
};
|
||||
|
||||
const clearChatUI = () => {
|
||||
// Clear UI state
|
||||
setMessages([]);
|
||||
|
||||
// Reset first message flag so system prompt will be logged again
|
||||
setIsFirstMessage(true);
|
||||
};
|
||||
|
||||
const handleClearCommand = () => {
|
||||
const { setStatus } = useProjectStore.getState();
|
||||
clearChatHistoryAndUI(setStatus);
|
||||
@@ -519,7 +538,7 @@ const ChatBox: React.FC = () => {
|
||||
}, [isProcessing, isExecutingTools]);
|
||||
|
||||
return (
|
||||
<div className="chatbox">
|
||||
<div className="chatbox" style={{ display: isVisible ? 'flex' : 'none' }}>
|
||||
<div className="chatbox-header">
|
||||
<h3>K.G.Studio Musician Assistant</h3>
|
||||
<div className="chatbox-actions">
|
||||
|
||||
@@ -25,13 +25,13 @@ export const clearChatHistoryWithStatus = (setStatus?: (message: string) => void
|
||||
};
|
||||
|
||||
// Global callback for clearing UI state
|
||||
let globalClearChatUI: (() => void) | null = null;
|
||||
let globalClearChatUI: (() => void | Promise<void>) | null = null;
|
||||
|
||||
/**
|
||||
* Register a callback to clear chat UI state
|
||||
* This allows external components to clear the ChatBox UI
|
||||
*/
|
||||
export const registerClearChatUICallback = (callback: () => void) => {
|
||||
export const registerClearChatUICallback = (callback: () => void | Promise<void>) => {
|
||||
globalClearChatUI = callback;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user