terminal-chat-ui
Version:
Shared UI components for terminal-based chat interfaces using Theater actors
43 lines (42 loc) • 1.32 kB
JavaScript
/**
* useMessageState - simplified message state management
*/
import { useState, useCallback } from 'react';
/**
* Simplified hook for managing message state in Theater chat interfaces
*/
export function useMessageState() {
const [messages, setMessages] = useState([]);
// Add a new message - simple append
const addMessage = useCallback((role, content, toolName, toolArgs) => {
const newMessage = {
role,
content,
timestamp: new Date(),
status: 'complete', // All messages are complete when added
...(toolName && { toolName }),
...(toolArgs && { toolArgs })
};
setMessages(prev => [...prev, newMessage]);
}, []);
// Add a tool message
const addToolMessage = useCallback((toolName, toolArgs = []) => {
addMessage('tool', '', toolName, toolArgs);
}, [addMessage]);
// Clear all messages
const clearMessages = useCallback(() => {
setMessages([]);
}, []);
// Remove a specific message
const removeMessage = useCallback((index) => {
setMessages(prev => prev.filter((_, i) => i !== index));
}, []);
return {
messages,
addMessage,
addToolMessage,
clearMessages,
removeMessage,
setMessages
};
}