UNPKG

@tanstack/angular-query-experimental

Version:

Signals for managing, caching and syncing asynchronous and remote data in Angular

50 lines (49 loc) 1.66 kB
import { QueryClient, QueriesObserver, notifyManager } from "@tanstack/query-core"; import { assertInInjectionContext, runInInjectionContext, inject, Injector, DestroyRef, NgZone, computed, effect, signal } from "@angular/core"; import { injectIsRestoring } from "./inject-is-restoring.mjs"; function injectQueries({ queries, ...options }, injector) { !injector && assertInInjectionContext(injectQueries); return runInInjectionContext(injector ?? inject(Injector), () => { const destroyRef = inject(DestroyRef); const ngZone = inject(NgZone); const queryClient = inject(QueryClient); const isRestoring = injectIsRestoring(); const defaultedQueries = computed(() => { return queries().map((opts) => { const defaultedOptions = queryClient.defaultQueryOptions(opts); defaultedOptions._optimisticResults = isRestoring() ? "isRestoring" : "optimistic"; return defaultedOptions; }); }); const observer = new QueriesObserver( queryClient, defaultedQueries(), options ); effect(() => { observer.setQueries( defaultedQueries(), options ); }); const [, getCombinedResult] = observer.getOptimisticResult( defaultedQueries(), options.combine ); const result = signal(getCombinedResult()); effect(() => { const unsubscribe = isRestoring() ? () => void 0 : ngZone.runOutsideAngular( () => observer.subscribe(notifyManager.batchCalls(result.set)) ); destroyRef.onDestroy(unsubscribe); }); return result; }); } export { injectQueries }; //# sourceMappingURL=inject-queries.mjs.map