Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/instantsearch.js/src/widgets/chat/chat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ function ChatWrapper({
maximized,
onToggleMaximize: () => setMaximized(!maximized),
onClear: clearMessages,
canClear: Boolean(chatMessages?.length) && !isClearing,
canClear: Boolean(chatMessages?.length) && !isClearing && chatStatus === 'ready',
closeIconComponent: headerProps.closeIconComponent,
minimizeIconComponent: headerProps.minimizeIconComponent,
maximizeIconComponent: headerProps.maximizeIconComponent,
Expand Down
2 changes: 1 addition & 1 deletion packages/react-instantsearch/src/widgets/Chat.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ function ChatInner<
maximized,
onToggleMaximize: () => setMaximized(!maximized),
onClear: clearMessages,
canClear: Boolean(messages?.length) && !isClearing,
canClear: Boolean(messages?.length) && !isClearing && status === 'ready',
titleIconComponent: headerTitleIconComponent,
closeIconComponent: headerCloseIconComponent,
minimizeIconComponent: headerMinimizeIconComponent,
Expand Down
40 changes: 40 additions & 0 deletions tests/common/widgets/chat/options.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,46 @@ export function createOptionsTests(
);
});

test('disables clear button when chat is in progress', async () => {
const searchClient = createSearchClient();
const chat = new Chat({});

await setup({
instantSearchOptions: {
indexName: 'indexName',
searchClient,
},
widgetParams: {
javascript: createDefaultWidgetParams(chat),
react: createDefaultWidgetParams(chat),
vue: {},
},
});

await openChat(act);

await act(async () => {
chat._state.messages = [
{
id: '1',
role: 'user' as const,
parts: [{ type: 'text' as const, text: 'hello' }],
},
];
await wait(0);
});

const clearButton = document.querySelector('.ais-ChatHeader-clear');
expect(clearButton).not.toBeDisabled();

await act(async () => {
chat._state.status = 'streaming';
await wait(0);
});

expect(clearButton).toBeDisabled();
});

describe('cssClasses', () => {
test('adds custom CSS classes', async () => {
const searchClient = createSearchClient();
Expand Down
Loading