mirror of
https://github.com/jkingsman/Remote-Terminal-for-MeshCore.git
synced 2026-03-28 17:43:05 +01:00
Abort serch requests on unmount
This commit is contained in:
@@ -123,6 +123,12 @@ export function SearchView({
|
||||
inputRef.current?.focus();
|
||||
}, [prefillRequest]);
|
||||
|
||||
useEffect(() => {
|
||||
return () => {
|
||||
abortRef.current?.abort();
|
||||
};
|
||||
}, []);
|
||||
|
||||
// Fetch search results
|
||||
useEffect(() => {
|
||||
if (!debouncedQuery) {
|
||||
|
||||
@@ -283,4 +283,35 @@ describe('SearchView', () => {
|
||||
expect.any(AbortSignal)
|
||||
);
|
||||
});
|
||||
|
||||
it('aborts the load-more request on unmount', async () => {
|
||||
const pageResults = Array.from({ length: 50 }, (_, i) =>
|
||||
createSearchResult({ id: i + 1, text: `result ${i}` })
|
||||
);
|
||||
let resolveLoadMore: ((value: Message[]) => void) | null = null;
|
||||
mockGetMessages.mockResolvedValueOnce(pageResults).mockImplementationOnce(
|
||||
() =>
|
||||
new Promise<Message[]>((resolve) => {
|
||||
resolveLoadMore = resolve;
|
||||
})
|
||||
);
|
||||
|
||||
const { unmount } = render(<SearchView {...defaultProps} />);
|
||||
|
||||
await typeAndWaitForResults('result');
|
||||
fireEvent.click(screen.getByText('Load more results'));
|
||||
|
||||
const loadMoreSignal = mockGetMessages.mock.calls[1]?.[1] as AbortSignal | undefined;
|
||||
expect(loadMoreSignal).toBeInstanceOf(AbortSignal);
|
||||
expect(loadMoreSignal?.aborted).toBe(false);
|
||||
|
||||
unmount();
|
||||
|
||||
expect(loadMoreSignal?.aborted).toBe(true);
|
||||
|
||||
await act(async () => {
|
||||
resolveLoadMore?.([createSearchResult({ id: 99, text: 'late result' })]);
|
||||
await Promise.resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user