diff --git a/services/raggr/raggr-frontend/src/components/ChatScreen.tsx b/services/raggr/raggr-frontend/src/components/ChatScreen.tsx index 58c4e36..de48f33 100644 --- a/services/raggr/raggr-frontend/src/components/ChatScreen.tsx +++ b/services/raggr/raggr-frontend/src/components/ChatScreen.tsx @@ -40,6 +40,7 @@ export const ChatScreen = ({ setAuthenticated }: ChatScreenProps) => { const [selectedConversation, setSelectedConversation] = useState(null); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); + const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); const simbaAnswers = ["meow.", "hiss...", "purrrrrr", "yowOWROWWowowr"]; @@ -131,11 +132,12 @@ export const ChatScreen = ({ setAuthenticated }: ChatScreenProps) => { }, [selectedConversation?.id]); const handleQuestionSubmit = async () => { - if (!query.trim()) return; // Don't submit empty messages + if (!query.trim() || isLoading) return; // Don't submit empty messages or while loading const currMessages = messages.concat([{ text: query, speaker: "user" }]); setMessages(currMessages); setQuery(""); // Clear input immediately after submission + setIsLoading(true); if (simbaMode) { console.log("simba mode activated"); @@ -150,6 +152,7 @@ export const ChatScreen = ({ setAuthenticated }: ChatScreenProps) => { }, ]), ); + setIsLoading(false); return; } @@ -170,6 +173,8 @@ export const ChatScreen = ({ setAuthenticated }: ChatScreenProps) => { if (error instanceof Error && error.message.includes("Session expired")) { setAuthenticated(false); } + } finally { + setIsLoading(false); } }; @@ -281,6 +286,7 @@ export const ChatScreen = ({ setAuthenticated }: ChatScreenProps) => { } return ; })} + {isLoading && }
@@ -294,6 +300,7 @@ export const ChatScreen = ({ setAuthenticated }: ChatScreenProps) => { handleKeyDown={handleKeyDown} handleQuestionSubmit={handleQuestionSubmit} setSimbaMode={setSimbaMode} + isLoading={isLoading} /> diff --git a/services/raggr/raggr-frontend/src/components/MessageInput.tsx b/services/raggr/raggr-frontend/src/components/MessageInput.tsx index 0ad7a00..6b37623 100644 --- a/services/raggr/raggr-frontend/src/components/MessageInput.tsx +++ b/services/raggr/raggr-frontend/src/components/MessageInput.tsx @@ -1,43 +1,56 @@ import { useEffect, useState, useRef } from "react"; type MessageInputProps = { - handleQueryChange: (event: React.ChangeEvent) => void; - handleKeyDown: (event: React.ChangeEvent) => void; - handleQuestionSubmit: () => void; - setSimbaMode: (sdf: boolean) => void; - query: string; -} + handleQueryChange: (event: React.ChangeEvent) => void; + handleKeyDown: (event: React.ChangeEvent) => void; + handleQuestionSubmit: () => void; + setSimbaMode: (sdf: boolean) => void; + query: string; + isLoading: boolean; +}; -export const MessageInput = ({query, handleKeyDown, handleQueryChange, handleQuestionSubmit, setSimbaMode}: MessageInputProps) => { - return ( -
-
-