From e28280179adfa56ab2efcfc1647265af860530a0 Mon Sep 17 00:00:00 2001 From: Kim Ode Date: Wed, 27 Sep 2023 16:04:11 +0200 Subject: [PATCH] Fix useVolatileQuery request (#52) --- packages/mst-query/src/MstQueryHandler.ts | 4 +++ packages/mst-query/src/hooks.ts | 29 +++------------------- packages/mst-query/tests/mstQuery.test.tsx | 20 +++++++++++---- 3 files changed, 23 insertions(+), 30 deletions(-) diff --git a/packages/mst-query/src/MstQueryHandler.ts b/packages/mst-query/src/MstQueryHandler.ts index f753a5b..45a64dd 100644 --- a/packages/mst-query/src/MstQueryHandler.ts +++ b/packages/mst-query/src/MstQueryHandler.ts @@ -184,6 +184,10 @@ export class MstQueryHandler { run(options: QueryOptions = {}) { const endpoint = this.options.endpoint ?? this.queryClient.config.queryOptions?.endpoint; + + if (!endpoint) { + throw new Error('No query endpoint or global endpoint configured'); + } this.setVariables({ request: options.request, pagination: options.pagination }); this.options.meta = options.meta; diff --git a/packages/mst-query/src/hooks.ts b/packages/mst-query/src/hooks.ts index 21369e7..d2e86db 100644 --- a/packages/mst-query/src/hooks.ts +++ b/packages/mst-query/src/hooks.ts @@ -147,31 +147,10 @@ export function useVolatileQuery( ) { const queryClient = useContext(Context)! as QueryClient; const query = useRefQuery(VolatileQuery, queryClient); - const [observer] = useState(() => new QueryObserver(query, true)); - options = mergeWithDefaultOptions('queryOptions', options, queryClient); - - useEffect(() => { - if (options.endpoint) { - query.__MstQueryHandler.options.endpoint = options.endpoint; - } - - observer.setOptions(options); - - return () => { - observer.unsubscribe(); - }; - }, [options]); + if (!query.__MstQueryHandler.options.endpoint) { + query.__MstQueryHandler.options.endpoint = options.endpoint as any; + } - return { - data: query.data as typeof query['data'], - error: query.error, - isFetched: query.isFetched, - isLoading: query.isLoading, - isRefetching: query.isRefetching, - isFetchingMore: query.isFetchingMore, - query: query, - refetch: query.refetch, - cachedAt: query.__MstQueryHandler.cachedAt, - }; + return useQuery(query, options); } diff --git a/packages/mst-query/tests/mstQuery.test.tsx b/packages/mst-query/tests/mstQuery.test.tsx index c3e33dc..7765446 100644 --- a/packages/mst-query/tests/mstQuery.test.tsx +++ b/packages/mst-query/tests/mstQuery.test.tsx @@ -709,22 +709,32 @@ test('subscription query', async () => { expect(q.subscriptionQuery.data?.count).toBe(5); }); -test('volatile query', () => { - const { render, q } = setup(); +test('volatile query', async () => { + const { render } = setup(); + + const text = 'testing'; + let renders = 0; const Comp = observer(() => { const { query, data } = useVolatileQuery({ - async endpoint() { - return { testing: 'testing' }; + request: { data: text }, + async endpoint({ request }) { + return { testing: request.data }; }, }); + renders++; if (!data) { return null; } return
{data.testing}
; }); - render(); + const { findByText } = render(); + await wait(0); + + await findByText(text); + + expect(renders).toBe(3); }); test('request with optional values', async () => {