diff --git a/frontend/app/view/waveai.tsx b/frontend/app/view/waveai.tsx index d821aa3b..3d52e3c2 100644 --- a/frontend/app/view/waveai.tsx +++ b/frontend/app/view/waveai.tsx @@ -52,6 +52,7 @@ export class WaveAiModel implements ViewModel { addMessageAtom: jotai.WritableAtom; updateLastMessageAtom: jotai.WritableAtom; simulateAssistantResponseAtom: jotai.WritableAtom>; + textAreaRef: React.RefObject; constructor(blockId: string) { this.blockId = blockId; @@ -127,6 +128,14 @@ export class WaveAiModel implements ViewModel { return history; } + giveFocus(): boolean { + if (this?.textAreaRef?.current) { + this.textAreaRef.current?.focus(); + return true; + } + return false; + } + useWaveAi() { const [messages] = jotai.useAtom(this.messagesAtom); const [, addMessage] = jotai.useAtom(this.addMessageAtom); @@ -341,18 +350,17 @@ interface ChatInputProps { onChange: (e: React.ChangeEvent) => void; onKeyDown: (e: React.KeyboardEvent) => void; onMouseDown: (e: React.MouseEvent) => void; + model: WaveAiModel; } const ChatInput = forwardRef( - ({ value, onChange, onKeyDown, onMouseDown, termFontSize }, ref) => { + ({ value, onChange, onKeyDown, onMouseDown, termFontSize, model }, ref) => { const textAreaRef = useRef(null); useImperativeHandle(ref, () => textAreaRef.current as HTMLTextAreaElement); useEffect(() => { - if (textAreaRef.current) { - textAreaRef.current.focus(); - } + model.textAreaRef = textAreaRef; }, []); const adjustTextAreaHeight = () => { @@ -586,6 +594,7 @@ const WaveAi = ({ model }: { model: WaveAiModel }) => {