import GooseLogo from './GooseLogo'; import AnimatedIcons from './AnimatedIcons'; import FlyingBird from './FlyingBird'; import { ChatState } from '../types/chatState'; import { defineMessages, useIntl } from '../i18n'; interface LoadingGooseProps { message?: string; chatState?: ChatState; } const i18n = defineMessages({ loadingConversation: { id: 'loadingGoose.loadingConversation', defaultMessage: 'loading conversation...', }, thinking: { id: 'loadingGoose.thinking', defaultMessage: 'goose is thinking…', }, streaming: { id: 'loadingGoose.streaming', defaultMessage: 'goose is working on it…', }, waiting: { id: 'loadingGoose.waiting', defaultMessage: 'goose is waiting…', }, compacting: { id: 'loadingGoose.compacting', defaultMessage: 'goose is compacting the conversation...', }, idle: { id: 'loadingGoose.idle', defaultMessage: 'goose is working on it…', }, restartingAgent: { id: 'loadingGoose.restartingAgent', defaultMessage: 'restarting session...', }, }); const STATE_ICONS: Record = { [ChatState.LoadingConversation]: , [ChatState.Thinking]: , [ChatState.Streaming]: , [ChatState.WaitingForUserInput]: ( ), [ChatState.Compacting]: , [ChatState.Idle]: , [ChatState.RestartingAgent]: , }; const STATE_MESSAGE_KEYS: Record = { [ChatState.LoadingConversation]: 'loadingConversation', [ChatState.Thinking]: 'thinking', [ChatState.Streaming]: 'streaming', [ChatState.WaitingForUserInput]: 'waiting', [ChatState.Compacting]: 'compacting', [ChatState.Idle]: 'idle', [ChatState.RestartingAgent]: 'restartingAgent', }; const LoadingGoose = ({ message, chatState = ChatState.Idle }: LoadingGooseProps) => { const intl = useIntl(); const displayMessage = message || intl.formatMessage(i18n[STATE_MESSAGE_KEYS[chatState]]); const icon = STATE_ICONS[chatState]; return (
{icon} {displayMessage}
); }; export default LoadingGoose;