diff --git a/packages/instantsearch-ui-components/src/components/chat/Chat.tsx b/packages/instantsearch-ui-components/src/components/chat/Chat.tsx index 0cfa2f41368..921f0484b93 100644 --- a/packages/instantsearch-ui-components/src/components/chat/Chat.tsx +++ b/packages/instantsearch-ui-components/src/components/chat/Chat.tsx @@ -7,7 +7,7 @@ import { createChatMessagesComponent } from './ChatMessages'; import { createChatPromptComponent } from './ChatPrompt'; import { createChatToggleButtonComponent } from './ChatToggleButton'; -import type { MutableRef, Renderer, ComponentProps } from '../../types'; +import type { Renderer, ComponentProps } from '../../types'; import type { ChatHeaderProps } from './ChatHeader'; import type { ChatMessagesProps } from './ChatMessages'; import type { ChatPromptProps } from './ChatPrompt'; @@ -62,8 +62,6 @@ export function createChatComponent({ createElement, Fragment }: Renderer) { const ChatMessages = createChatMessagesComponent({ createElement, Fragment }); const ChatPrompt = createChatPromptComponent({ createElement, Fragment }); - const promptRef: MutableRef = { current: null }; - return function Chat({ open, maximized = false, @@ -95,14 +93,16 @@ export function createChatComponent({ createElement, Fragment }: Renderer) { > - + { toggleButtonProps.onClick?.(); - promptRef.current?.focus?.(); + if (!open) { + promptProps.promptRef?.current?.focus(); + } }} /> diff --git a/packages/instantsearch-ui-components/src/components/chat/ChatPrompt.tsx b/packages/instantsearch-ui-components/src/components/chat/ChatPrompt.tsx index 2c64492a12c..b52304ed8d4 100644 --- a/packages/instantsearch-ui-components/src/components/chat/ChatPrompt.tsx +++ b/packages/instantsearch-ui-components/src/components/chat/ChatPrompt.tsx @@ -122,9 +122,9 @@ export type ChatPromptProps = Omit< */ onInput?: ComponentProps<'textarea'>['onInput']; /** - * Ref callback to get access to the focus function + * Ref to the prompt textarea element for focus management */ - ref?: MutableRef; + promptRef?: MutableRef; }; export function createChatPromptComponent({ createElement }: Renderer) { @@ -158,12 +158,12 @@ export function createChatPromptComponent({ createElement }: Renderer) { const setTextAreaRef = ( element: HTMLTextAreaElement | null, - ref?: MutableRef + promptRef?: MutableRef ) => { textAreaElement = element; - if (ref) { - ref.current = element; + if (promptRef) { + promptRef.current = element; } if (element) { @@ -194,7 +194,7 @@ export function createChatPromptComponent({ createElement }: Renderer) { onSubmit, onKeyDown, onStop, - ref, + promptRef, ...props } = userProps; @@ -267,7 +267,7 @@ export function createChatPromptComponent({ createElement }: Renderer) { >