diff --git a/frontend/src/components/types/index.ts b/frontend/src/components/types/index.ts index cf46ab0a..0d6172ab 100644 --- a/frontend/src/components/types/index.ts +++ b/frontend/src/components/types/index.ts @@ -1,5 +1,7 @@ -export type TextAreaProps = { +export type InputProps = { + type: 'text' | 'number'; value: string | string[] | number; + colorVariant?: 'silver' | 'jet' | 'gray'; isAutoFocused?: boolean; id?: string; maxLength?: number; @@ -17,8 +19,3 @@ export type TextAreaProps = { e: React.KeyboardEvent, ) => void; }; - -export type InputProps = TextAreaProps & { - type: 'text' | 'number'; - colorVariant?: 'silver' | 'jet' | 'gray'; -}; diff --git a/frontend/src/conversation/Conversation.tsx b/frontend/src/conversation/Conversation.tsx index b15103f3..487e8ea7 100644 --- a/frontend/src/conversation/Conversation.tsx +++ b/frontend/src/conversation/Conversation.tsx @@ -20,13 +20,12 @@ import { sendFeedback } from './conversationApi'; import { useTranslation } from 'react-i18next'; import ArrowDown from './../assets/arrow-down.svg'; import RetryIcon from '../components/RetryIcon'; -import TextArea from '../components/TextArea'; export default function Conversation() { const queries = useSelector(selectQueries); const status = useSelector(selectStatus); const dispatch = useDispatch(); const endMessageRef = useRef(null); - const [prompt, setPrompt] = useState(''); + const inputRef = useRef(null); const [isDarkTheme] = useDarkTheme(); const [hasScrolledToLast, setHasScrolledToLast] = useState(true); const fetchStream = useRef(null); @@ -41,6 +40,13 @@ export default function Conversation() { !eventInterrupt && scrollIntoView(); }, [queries.length, queries[queries.length - 1]]); + useEffect(() => { + const element = document.getElementById('inputbox') as HTMLInputElement; + if (element) { + element.focus(); + } + }, []); + useEffect(() => { return () => { if (status !== 'idle') { @@ -106,14 +112,14 @@ export default function Conversation() { }; const handleQuestionSubmission = () => { - if (prompt.length && status !== 'loading') { + if (inputRef.current?.textContent && status !== 'loading') { if (lastQueryReturnedErr) { // update last failed query with new prompt dispatch( updateQuery({ index: queries.length - 1, query: { - prompt, + prompt: inputRef.current.textContent, }, }), ); @@ -122,9 +128,9 @@ export default function Conversation() { isRetry: true, }); } else { - handleQuestion({ question: prompt }); + handleQuestion({ question: inputRef.current.textContent }); } - setPrompt(''); + inputRef.current.textContent = ''; } }; @@ -230,19 +236,21 @@ export default function Conversation() {
- + >
{status === 'loading' ? (