diff --git a/.changeset/gentle-dolphins-boil.md b/.changeset/gentle-dolphins-boil.md new file mode 100644 index 0000000000..c7fc746516 --- /dev/null +++ b/.changeset/gentle-dolphins-boil.md @@ -0,0 +1,5 @@ +--- +'@ai-sdk/react': patch +--- + +fix (ai/react): useObject stop & isLoading reset at end of stream diff --git a/packages/react/src/use-object.ts b/packages/react/src/use-object.ts index 390542ffac..b0551aadb9 100644 --- a/packages/react/src/use-object.ts +++ b/packages/react/src/use-object.ts @@ -148,15 +148,17 @@ function useObject({ mutate(currentObject); } }, + + close() { + setIsLoading(false); + abortControllerRef.current = null; + }, }), ); setError(undefined); } catch (error) { setError(error); - } finally { - setIsLoading(false); - abortControllerRef.current = null; } }; diff --git a/packages/react/src/use-object.ui.test.tsx b/packages/react/src/use-object.ui.test.tsx index 3b9cb3769e..9e7e8a0c45 100644 --- a/packages/react/src/use-object.ui.test.tsx +++ b/packages/react/src/use-object.ui.test.tsx @@ -111,8 +111,10 @@ describe('text stream', () => { streamController.enqueue('"Hello, world!"}'); streamController.close(); - await screen.findByTestId('loading'); - expect(screen.getByTestId('loading')).toHaveTextContent('false'); + // wait for element "loading" to have text content "false": + await waitFor(() => { + expect(screen.getByTestId('loading')).toHaveTextContent('true'); + }); }); });