@tanstack/angular-query-experimental 5.25.0 → 5.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/esm2022/create-base-query.mjs +11 -7
- package/build/esm2022/inject-is-fetching.mjs +6 -3
- package/build/esm2022/inject-is-mutating.mjs +6 -3
- package/build/esm2022/inject-mutation-state.mjs +24 -18
- package/build/esm2022/inject-mutation.mjs +26 -17
- package/build/esm2022/util/lazy-init/lazy-init.mjs +31 -0
- package/build/esm2022/util/lazy-signal-initializer/lazy-signal-initializer.mjs +14 -0
- package/build/fesm2022/tanstack-angular-query-experimental.mjs +75 -39
- package/build/fesm2022/tanstack-angular-query-experimental.mjs.map +1 -1
- package/build/inject-mutation.d.ts +1 -1
- package/build/util/lazy-signal-initializer/lazy-signal-initializer.d.ts +4 -0
- package/package.json +1 -1
- package/src/__tests__/inject-mutation-state.test.ts +71 -2
- package/src/__tests__/inject-mutation.test.ts +102 -3
- package/src/__tests__/inject-query.test.ts +31 -2
- package/src/__tests__/test-utils.ts +48 -1
- package/src/__tests__/util/lazy-init/lazy-init.test.ts +126 -0
- package/src/__tests__/util/lazy-signal-initializer/lazy-signal-initializer.test.ts +130 -0
- package/src/create-base-query.ts +25 -17
- package/src/inject-is-fetching.ts +5 -2
- package/src/inject-is-mutating.ts +5 -2
- package/src/inject-mutation-state.ts +41 -25
- package/src/inject-mutation.ts +63 -32
- package/src/{lazy-init.ts → util/lazy-init/lazy-init.ts} +3 -1
- package/src/util/lazy-signal-initializer/lazy-signal-initializer.ts +28 -0
- package/build/esm2022/lazy-init.mjs +0 -30
- /package/build/{lazy-init.d.ts → util/lazy-init/lazy-init.d.ts} +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { DestroyRef, Injector, computed, effect, inject, runInInjectionContext, signal, untracked, } from '@angular/core';
|
|
1
|
+
import { DestroyRef, Injector, NgZone, computed, effect, inject, runInInjectionContext, signal, untracked, } from '@angular/core';
|
|
2
2
|
import { notifyManager } from '@tanstack/query-core';
|
|
3
3
|
import { signalProxy } from './signal-proxy';
|
|
4
|
-
import { lazyInit } from './lazy-init';
|
|
4
|
+
import { lazyInit } from './util/lazy-init/lazy-init';
|
|
5
5
|
/**
|
|
6
6
|
* Base implementation for `injectQuery` and `injectInfiniteQuery`.
|
|
7
7
|
*/
|
|
8
8
|
export function createBaseQuery(options, Observer, queryClient) {
|
|
9
9
|
const injector = inject(Injector);
|
|
10
|
+
const ngZone = inject(NgZone);
|
|
10
11
|
return lazyInit(() => {
|
|
11
12
|
return runInInjectionContext(injector, () => {
|
|
12
13
|
const destroyRef = inject(DestroyRef);
|
|
@@ -23,8 +24,7 @@ export function createBaseQuery(options, Observer, queryClient) {
|
|
|
23
24
|
});
|
|
24
25
|
const observer = new Observer(queryClient, defaultedOptionsSignal());
|
|
25
26
|
const resultSignal = signal(observer.getOptimisticResult(defaultedOptionsSignal()));
|
|
26
|
-
|
|
27
|
-
untracked(() => effect(() => {
|
|
27
|
+
effect(() => {
|
|
28
28
|
const defaultedOptions = defaultedOptionsSignal();
|
|
29
29
|
observer.setOptions(defaultedOptions, {
|
|
30
30
|
// Do not notify on updates because of changes in the options because
|
|
@@ -34,12 +34,16 @@ export function createBaseQuery(options, Observer, queryClient) {
|
|
|
34
34
|
untracked(() => {
|
|
35
35
|
resultSignal.set(observer.getOptimisticResult(defaultedOptions));
|
|
36
36
|
});
|
|
37
|
-
})
|
|
37
|
+
});
|
|
38
38
|
// observer.trackResult is not used as this optimization is not needed for Angular
|
|
39
|
-
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) =>
|
|
39
|
+
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => {
|
|
40
|
+
ngZone.run(() => {
|
|
41
|
+
resultSignal.set(val);
|
|
42
|
+
});
|
|
43
|
+
}));
|
|
40
44
|
destroyRef.onDestroy(unsubscribe);
|
|
41
45
|
return signalProxy(resultSignal);
|
|
42
46
|
});
|
|
43
47
|
});
|
|
44
48
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2UtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3JlYXRlLWJhc2UtcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixRQUFRLEVBQ1IsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBU3JEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FPN0IsT0FRQyxFQUNELFFBQThCLEVBQzlCLFdBQXdCO0lBRXhCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFN0IsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ25CLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDckM7Ozs7O2VBS0c7WUFDSCxNQUFNLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUN0RCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQ3JCLENBQUE7Z0JBQ0QsZ0JBQWdCLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxDQUFBO2dCQUNsRCxPQUFPLGdCQUFnQixDQUFBO1lBQ3pCLENBQUMsQ0FBQyxDQUFBO1lBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBTTNCLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUE7WUFFeEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUN6QixRQUFRLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUN2RCxDQUFBO1lBRUQsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDVixNQUFNLGdCQUFnQixHQUFHLHNCQUFzQixFQUFFLENBQUE7Z0JBQ2pELFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3BDLHFFQUFxRTtvQkFDckUsc0VBQXNFO29CQUN0RSxTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFBO2dCQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFBO2dCQUNsRSxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1lBRUYsa0ZBQWtGO1lBQ2xGLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQ3BDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUF1QyxFQUFFLEVBQUU7Z0JBQ25FLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNkLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQTtZQUNELFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7WUFFakMsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUF5QyxDQUFBO1FBQzFFLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVzdHJveVJlZixcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgbm90aWZ5TWFuYWdlciB9IGZyb20gJ0B0YW5zdGFjay9xdWVyeS1jb3JlJ1xuaW1wb3J0IHsgc2lnbmFsUHJveHkgfSBmcm9tICcuL3NpZ25hbC1wcm94eSdcbmltcG9ydCB7IGxhenlJbml0IH0gZnJvbSAnLi91dGlsL2xhenktaW5pdC9sYXp5LWluaXQnXG5pbXBvcnQgdHlwZSB7XG4gIFF1ZXJ5Q2xpZW50LFxuICBRdWVyeUtleSxcbiAgUXVlcnlPYnNlcnZlcixcbiAgUXVlcnlPYnNlcnZlclJlc3VsdCxcbn0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJhc2VRdWVyeU9wdGlvbnMsIENyZWF0ZUJhc2VRdWVyeVJlc3VsdCB9IGZyb20gJy4vdHlwZXMnXG5cbi8qKlxuICogQmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgYGluamVjdFF1ZXJ5YCBhbmQgYGluamVjdEluZmluaXRlUXVlcnlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZVF1ZXJ5PFxuICBUUXVlcnlGbkRhdGEsXG4gIFRFcnJvcixcbiAgVERhdGEsXG4gIFRRdWVyeURhdGEsXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5LFxuPihcbiAgb3B0aW9uczogKFxuICAgIGNsaWVudDogUXVlcnlDbGllbnQsXG4gICkgPT4gQ3JlYXRlQmFzZVF1ZXJ5T3B0aW9uczxcbiAgICBUUXVlcnlGbkRhdGEsXG4gICAgVEVycm9yLFxuICAgIFREYXRhLFxuICAgIFRRdWVyeURhdGEsXG4gICAgVFF1ZXJ5S2V5XG4gID4sXG4gIE9ic2VydmVyOiB0eXBlb2YgUXVlcnlPYnNlcnZlcixcbiAgcXVlcnlDbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuKTogQ3JlYXRlQmFzZVF1ZXJ5UmVzdWx0PFREYXRhLCBURXJyb3I+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG4gIGNvbnN0IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgcmV0dXJuIGxhenlJbml0KCgpID0+IHtcbiAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpXG4gICAgICAvKipcbiAgICAgICAqIFNpZ25hbCB0aGF0IGhhcyB0aGUgZGVmYXVsdCBvcHRpb25zIGZyb20gcXVlcnkgY2xpZW50IGFwcGxpZWRcbiAgICAgICAqIGNvbXB1dGVkKCkgaXMgdXNlZCBzbyBzaWduYWxzIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvcHRpb25zXG4gICAgICAgKiBtYWtpbmcgaXQgcmVhY3RpdmUuIFdyYXBwaW5nIG9wdGlvbnMgaW4gYSBmdW5jdGlvbiBlbnN1cmVzIGVtYmVkZGVkIGV4cHJlc3Npb25zXG4gICAgICAgKiBhcmUgcHJlc2VydmVkIGFuZCBjYW4ga2VlcCBiZWluZyBhcHBsaWVkIGFmdGVyIHNpZ25hbCBjaGFuZ2VzXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSBxdWVyeUNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKFxuICAgICAgICAgIG9wdGlvbnMocXVlcnlDbGllbnQpLFxuICAgICAgICApXG4gICAgICAgIGRlZmF1bHRlZE9wdGlvbnMuX29wdGltaXN0aWNSZXN1bHRzID0gJ29wdGltaXN0aWMnXG4gICAgICAgIHJldHVybiBkZWZhdWx0ZWRPcHRpb25zXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcjxcbiAgICAgICAgVFF1ZXJ5Rm5EYXRhLFxuICAgICAgICBURXJyb3IsXG4gICAgICAgIFREYXRhLFxuICAgICAgICBUUXVlcnlEYXRhLFxuICAgICAgICBUUXVlcnlLZXlcbiAgICAgID4ocXVlcnlDbGllbnQsIGRlZmF1bHRlZE9wdGlvbnNTaWduYWwoKSlcblxuICAgICAgY29uc3QgcmVzdWx0U2lnbmFsID0gc2lnbmFsKFxuICAgICAgICBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnNTaWduYWwoKSksXG4gICAgICApXG5cbiAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSBkZWZhdWx0ZWRPcHRpb25zU2lnbmFsKClcbiAgICAgICAgb2JzZXJ2ZXIuc2V0T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLCB7XG4gICAgICAgICAgLy8gRG8gbm90IG5vdGlmeSBvbiB1cGRhdGVzIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgb3B0aW9ucyBiZWNhdXNlXG4gICAgICAgICAgLy8gdGhlc2UgY2hhbmdlcyBzaG91bGQgYWxyZWFkeSBiZSByZWZsZWN0ZWQgaW4gdGhlIG9wdGltaXN0aWMgcmVzdWx0LlxuICAgICAgICAgIGxpc3RlbmVyczogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgcmVzdWx0U2lnbmFsLnNldChvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpKVxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgLy8gb2JzZXJ2ZXIudHJhY2tSZXN1bHQgaXMgbm90IHVzZWQgYXMgdGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IG5lZWRlZCBmb3IgQW5ndWxhclxuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvYnNlcnZlci5zdWJzY3JpYmUoXG4gICAgICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscygodmFsOiBRdWVyeU9ic2VydmVyUmVzdWx0PFREYXRhLCBURXJyb3I+KSA9PiB7XG4gICAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICByZXN1bHRTaWduYWwuc2V0KHZhbClcbiAgICAgICAgICB9KVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIGRlc3Ryb3lSZWYub25EZXN0cm95KHVuc3Vic2NyaWJlKVxuXG4gICAgICByZXR1cm4gc2lnbmFsUHJveHkocmVzdWx0U2lnbmFsKSBhcyBDcmVhdGVCYXNlUXVlcnlSZXN1bHQ8VERhdGEsIFRFcnJvcj5cbiAgICB9KVxuICB9KVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DestroyRef, inject, signal } from '@angular/core';
|
|
1
|
+
import { DestroyRef, NgZone, inject, signal } from '@angular/core';
|
|
2
2
|
import { notifyManager } from '@tanstack/query-core';
|
|
3
3
|
import { assertInjector } from './util/assert-injector/assert-injector';
|
|
4
4
|
import { injectQueryClient } from './inject-query-client';
|
|
@@ -6,6 +6,7 @@ export function injectIsFetching(filters, injector) {
|
|
|
6
6
|
return assertInjector(injectIsFetching, injector, () => {
|
|
7
7
|
const queryClient = injectQueryClient();
|
|
8
8
|
const destroyRef = inject(DestroyRef);
|
|
9
|
+
const ngZone = inject(NgZone);
|
|
9
10
|
const cache = queryClient.getQueryCache();
|
|
10
11
|
// isFetching is the prev value initialized on mount *
|
|
11
12
|
let isFetching = queryClient.isFetching(filters);
|
|
@@ -15,11 +16,13 @@ export function injectIsFetching(filters, injector) {
|
|
|
15
16
|
if (isFetching !== newIsFetching) {
|
|
16
17
|
// * and update with each change
|
|
17
18
|
isFetching = newIsFetching;
|
|
18
|
-
|
|
19
|
+
ngZone.run(() => {
|
|
20
|
+
result.set(isFetching);
|
|
21
|
+
});
|
|
19
22
|
}
|
|
20
23
|
}));
|
|
21
24
|
destroyRef.onDestroy(unsubscribe);
|
|
22
25
|
return result;
|
|
23
26
|
});
|
|
24
27
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LWlzLWZldGNoaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luamVjdC1pcy1mZXRjaGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xFLE9BQU8sRUFBcUIsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBR3pELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsT0FBc0IsRUFDdEIsUUFBbUI7SUFFbkIsT0FBTyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNyRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFN0IsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3pDLHNEQUFzRDtRQUN0RCxJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVqQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUNqQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3JELElBQUksVUFBVSxLQUFLLGFBQWEsRUFBRTtnQkFDaEMsZ0NBQWdDO2dCQUNoQyxVQUFVLEdBQUcsYUFBYSxDQUFBO2dCQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO2dCQUN4QixDQUFDLENBQUMsQ0FBQTthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUVELFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7UUFFakMsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBOZ1pvbmUsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IHR5cGUgUXVlcnlGaWx0ZXJzLCBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJy4vdXRpbC9hc3NlcnQtaW5qZWN0b3IvYXNzZXJ0LWluamVjdG9yJ1xuaW1wb3J0IHsgaW5qZWN0UXVlcnlDbGllbnQgfSBmcm9tICcuL2luamVjdC1xdWVyeS1jbGllbnQnXG5pbXBvcnQgdHlwZSB7IEluamVjdG9yLCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SXNGZXRjaGluZyhcbiAgZmlsdGVycz86IFF1ZXJ5RmlsdGVycyxcbiAgaW5qZWN0b3I/OiBJbmplY3Rvcixcbik6IFNpZ25hbDxudW1iZXI+IHtcbiAgcmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdElzRmV0Y2hpbmcsIGluamVjdG9yLCAoKSA9PiB7XG4gICAgY29uc3QgcXVlcnlDbGllbnQgPSBpbmplY3RRdWVyeUNsaWVudCgpXG4gICAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuICAgIGNvbnN0IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgICBjb25zdCBjYWNoZSA9IHF1ZXJ5Q2xpZW50LmdldFF1ZXJ5Q2FjaGUoKVxuICAgIC8vIGlzRmV0Y2hpbmcgaXMgdGhlIHByZXYgdmFsdWUgaW5pdGlhbGl6ZWQgb24gbW91bnQgKlxuICAgIGxldCBpc0ZldGNoaW5nID0gcXVlcnlDbGllbnQuaXNGZXRjaGluZyhmaWx0ZXJzKVxuXG4gICAgY29uc3QgcmVzdWx0ID0gc2lnbmFsKGlzRmV0Y2hpbmcpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9IGNhY2hlLnN1YnNjcmliZShcbiAgICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscygoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0lzRmV0Y2hpbmcgPSBxdWVyeUNsaWVudC5pc0ZldGNoaW5nKGZpbHRlcnMpXG4gICAgICAgIGlmIChpc0ZldGNoaW5nICE9PSBuZXdJc0ZldGNoaW5nKSB7XG4gICAgICAgICAgLy8gKiBhbmQgdXBkYXRlIHdpdGggZWFjaCBjaGFuZ2VcbiAgICAgICAgICBpc0ZldGNoaW5nID0gbmV3SXNGZXRjaGluZ1xuICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnNldChpc0ZldGNoaW5nKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgIClcblxuICAgIGRlc3Ryb3lSZWYub25EZXN0cm95KHVuc3Vic2NyaWJlKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DestroyRef, inject, signal } from '@angular/core';
|
|
1
|
+
import { DestroyRef, NgZone, inject, signal } from '@angular/core';
|
|
2
2
|
import { notifyManager } from '@tanstack/query-core';
|
|
3
3
|
import { assertInjector } from './util/assert-injector/assert-injector';
|
|
4
4
|
import { injectQueryClient } from './inject-query-client';
|
|
@@ -6,6 +6,7 @@ export function injectIsMutating(filters, injector) {
|
|
|
6
6
|
return assertInjector(injectIsMutating, injector, () => {
|
|
7
7
|
const queryClient = injectQueryClient();
|
|
8
8
|
const destroyRef = inject(DestroyRef);
|
|
9
|
+
const ngZone = inject(NgZone);
|
|
9
10
|
const cache = queryClient.getMutationCache();
|
|
10
11
|
// isMutating is the prev value initialized on mount *
|
|
11
12
|
let isMutating = queryClient.isMutating(filters);
|
|
@@ -15,11 +16,13 @@ export function injectIsMutating(filters, injector) {
|
|
|
15
16
|
if (isMutating !== newIsMutating) {
|
|
16
17
|
// * and update with each change
|
|
17
18
|
isMutating = newIsMutating;
|
|
18
|
-
|
|
19
|
+
ngZone.run(() => {
|
|
20
|
+
result.set(isMutating);
|
|
21
|
+
});
|
|
19
22
|
}
|
|
20
23
|
}));
|
|
21
24
|
destroyRef.onDestroy(unsubscribe);
|
|
22
25
|
return result;
|
|
23
26
|
});
|
|
24
27
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LWlzLW11dGF0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luamVjdC1pcy1tdXRhdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xFLE9BQU8sRUFBd0IsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBR3pELE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsT0FBeUIsRUFDekIsUUFBbUI7SUFFbkIsT0FBTyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNyRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFN0IsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFDNUMsc0RBQXNEO1FBQ3RELElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRWpDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQ2pDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzVCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDckQsSUFBSSxVQUFVLEtBQUssYUFBYSxFQUFFO2dCQUNoQyxnQ0FBZ0M7Z0JBQ2hDLFVBQVUsR0FBRyxhQUFhLENBQUE7Z0JBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUVqQyxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIE5nWm9uZSwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgdHlwZSBNdXRhdGlvbkZpbHRlcnMsIG5vdGlmeU1hbmFnZXIgfSBmcm9tICdAdGFuc3RhY2svcXVlcnktY29yZSdcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnLi91dGlsL2Fzc2VydC1pbmplY3Rvci9hc3NlcnQtaW5qZWN0b3InXG5pbXBvcnQgeyBpbmplY3RRdWVyeUNsaWVudCB9IGZyb20gJy4vaW5qZWN0LXF1ZXJ5LWNsaWVudCdcbmltcG9ydCB0eXBlIHsgSW5qZWN0b3IsIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJc011dGF0aW5nKFxuICBmaWx0ZXJzPzogTXV0YXRpb25GaWx0ZXJzLFxuICBpbmplY3Rvcj86IEluamVjdG9yLFxuKTogU2lnbmFsPG51bWJlcj4ge1xuICByZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0SXNNdXRhdGluZywgaW5qZWN0b3IsICgpID0+IHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IGluamVjdFF1ZXJ5Q2xpZW50KClcbiAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpXG4gICAgY29uc3Qgbmdab25lID0gaW5qZWN0KE5nWm9uZSlcblxuICAgIGNvbnN0IGNhY2hlID0gcXVlcnlDbGllbnQuZ2V0TXV0YXRpb25DYWNoZSgpXG4gICAgLy8gaXNNdXRhdGluZyBpcyB0aGUgcHJldiB2YWx1ZSBpbml0aWFsaXplZCBvbiBtb3VudCAqXG4gICAgbGV0IGlzTXV0YXRpbmcgPSBxdWVyeUNsaWVudC5pc011dGF0aW5nKGZpbHRlcnMpXG5cbiAgICBjb25zdCByZXN1bHQgPSBzaWduYWwoaXNNdXRhdGluZylcblxuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gY2FjaGUuc3Vic2NyaWJlKFxuICAgICAgbm90aWZ5TWFuYWdlci5iYXRjaENhbGxzKCgpID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXNNdXRhdGluZyA9IHF1ZXJ5Q2xpZW50LmlzTXV0YXRpbmcoZmlsdGVycylcbiAgICAgICAgaWYgKGlzTXV0YXRpbmcgIT09IG5ld0lzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyAqIGFuZCB1cGRhdGUgd2l0aCBlYWNoIGNoYW5nZVxuICAgICAgICAgIGlzTXV0YXRpbmcgPSBuZXdJc011dGF0aW5nXG4gICAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICByZXN1bHQuc2V0KGlzTXV0YXRpbmcpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKVxuXG4gICAgZGVzdHJveVJlZi5vbkRlc3Ryb3kodW5zdWJzY3JpYmUpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pXG59XG4iXX0=
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { DestroyRef, effect, inject, signal, untracked } from '@angular/core';
|
|
1
|
+
import { DestroyRef, NgZone, effect, inject, signal, untracked, } from '@angular/core';
|
|
2
2
|
import { notifyManager, replaceEqualDeep, } from '@tanstack/query-core';
|
|
3
3
|
import { assertInjector } from './util/assert-injector/assert-injector';
|
|
4
4
|
import { injectQueryClient } from './inject-query-client';
|
|
5
|
+
import { lazySignalInitializer } from './util/lazy-signal-initializer/lazy-signal-initializer';
|
|
5
6
|
function getResult(mutationCache, options) {
|
|
6
7
|
return mutationCache
|
|
7
8
|
.findAll(options.filters)
|
|
@@ -13,24 +14,29 @@ export function injectMutationState(mutationStateOptionsFn = () => ({}), options
|
|
|
13
14
|
return assertInjector(injectMutationState, options?.injector, () => {
|
|
14
15
|
const destroyRef = inject(DestroyRef);
|
|
15
16
|
const queryClient = injectQueryClient();
|
|
17
|
+
const ngZone = inject(NgZone);
|
|
16
18
|
const mutationCache = queryClient.getMutationCache();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
return lazySignalInitializer((injector) => {
|
|
20
|
+
const result = signal(getResult(mutationCache, mutationStateOptionsFn()));
|
|
21
|
+
effect(() => {
|
|
22
|
+
const mutationStateOptions = mutationStateOptionsFn();
|
|
23
|
+
untracked(() => {
|
|
24
|
+
// Setting the signal from an effect because it's both 'computed' from options()
|
|
25
|
+
// and needs to be set imperatively in the mutationCache listener.
|
|
26
|
+
result.set(getResult(mutationCache, mutationStateOptions));
|
|
27
|
+
});
|
|
28
|
+
}, { injector });
|
|
29
|
+
const unsubscribe = mutationCache.subscribe(notifyManager.batchCalls(() => {
|
|
30
|
+
const nextResult = replaceEqualDeep(result(), getResult(mutationCache, mutationStateOptionsFn()));
|
|
31
|
+
if (result() !== nextResult) {
|
|
32
|
+
ngZone.run(() => {
|
|
33
|
+
result.set(nextResult);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}));
|
|
37
|
+
destroyRef.onDestroy(unsubscribe);
|
|
38
|
+
return result;
|
|
25
39
|
});
|
|
26
|
-
const unsubscribe = mutationCache.subscribe(notifyManager.batchCalls(() => {
|
|
27
|
-
const nextResult = replaceEqualDeep(result(), getResult(mutationCache, mutationStateOptionsFn()));
|
|
28
|
-
if (result() !== nextResult) {
|
|
29
|
-
result.set(nextResult);
|
|
30
|
-
}
|
|
31
|
-
}));
|
|
32
|
-
destroyRef.onDestroy(unsubscribe);
|
|
33
|
-
return result;
|
|
34
40
|
});
|
|
35
41
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LW11dGF0aW9uLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luamVjdC1tdXRhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQU1MLGFBQWEsRUFDYixnQkFBZ0IsR0FDakIsTUFBTSxzQkFBc0IsQ0FBQTtBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0RBQXdELENBQUE7QUFVOUYsU0FBUyxTQUFTLENBQ2hCLGFBQTRCLEVBQzVCLE9BQXNDO0lBRXRDLE9BQU8sYUFBYTtTQUNqQixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUN4QixHQUFHLENBQ0YsQ0FBQyxRQUFRLEVBQVcsRUFBRSxDQUNwQixDQUFDLE9BQU8sQ0FBQyxNQUFNO1FBQ2IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ1osUUFBNkQsQ0FDOUQ7UUFDSCxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBWSxDQUNqQyxDQUFBO0FBQ0wsQ0FBQztBQU1ELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMseUJBQThELEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQ3hFLE9BQW9DO0lBRXBDLE9BQU8sY0FBYyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNyQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU3QixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUVwRCxPQUFPLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUNuQixTQUFTLENBQUMsYUFBYSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FDbkQsQ0FBQTtZQUVELE1BQU0sQ0FDSixHQUFHLEVBQUU7Z0JBQ0gsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsRUFBRSxDQUFBO2dCQUNyRCxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLGdGQUFnRjtvQkFDaEYsa0VBQWtFO29CQUNsRSxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFBO2dCQUM1RCxDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsRUFDRCxFQUFFLFFBQVEsRUFBRSxDQUNiLENBQUE7WUFFRCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUN6QyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDNUIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQ2pDLE1BQU0sRUFBRSxFQUNSLFNBQVMsQ0FBQyxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUNuRCxDQUFBO2dCQUNELElBQUksTUFBTSxFQUFFLEtBQUssVUFBVSxFQUFFO29CQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFBO29CQUN4QixDQUFDLENBQUMsQ0FBQTtpQkFDSDtZQUNILENBQUMsQ0FBQyxDQUNILENBQUE7WUFFRCxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRWpDLE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZXN0cm95UmVmLFxuICBOZ1pvbmUsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIHR5cGUgRGVmYXVsdEVycm9yLFxuICB0eXBlIE11dGF0aW9uLFxuICB0eXBlIE11dGF0aW9uQ2FjaGUsXG4gIHR5cGUgTXV0YXRpb25GaWx0ZXJzLFxuICB0eXBlIE11dGF0aW9uU3RhdGUsXG4gIG5vdGlmeU1hbmFnZXIsXG4gIHJlcGxhY2VFcXVhbERlZXAsXG59IGZyb20gJ0B0YW5zdGFjay9xdWVyeS1jb3JlJ1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICcuL3V0aWwvYXNzZXJ0LWluamVjdG9yL2Fzc2VydC1pbmplY3RvcidcbmltcG9ydCB7IGluamVjdFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9pbmplY3QtcXVlcnktY2xpZW50J1xuaW1wb3J0IHsgbGF6eVNpZ25hbEluaXRpYWxpemVyIH0gZnJvbSAnLi91dGlsL2xhenktc2lnbmFsLWluaXRpYWxpemVyL2xhenktc2lnbmFsLWluaXRpYWxpemVyJ1xuaW1wb3J0IHR5cGUgeyBJbmplY3RvciwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxudHlwZSBNdXRhdGlvblN0YXRlT3B0aW9uczxUUmVzdWx0ID0gTXV0YXRpb25TdGF0ZT4gPSB7XG4gIGZpbHRlcnM/OiBNdXRhdGlvbkZpbHRlcnNcbiAgc2VsZWN0PzogKFxuICAgIG11dGF0aW9uOiBNdXRhdGlvbjx1bmtub3duLCBEZWZhdWx0RXJyb3IsIHVua25vd24sIHVua25vd24+LFxuICApID0+IFRSZXN1bHRcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0PFRSZXN1bHQgPSBNdXRhdGlvblN0YXRlPihcbiAgbXV0YXRpb25DYWNoZTogTXV0YXRpb25DYWNoZSxcbiAgb3B0aW9uczogTXV0YXRpb25TdGF0ZU9wdGlvbnM8VFJlc3VsdD4sXG4pOiBBcnJheTxUUmVzdWx0PiB7XG4gIHJldHVybiBtdXRhdGlvbkNhY2hlXG4gICAgLmZpbmRBbGwob3B0aW9ucy5maWx0ZXJzKVxuICAgIC5tYXAoXG4gICAgICAobXV0YXRpb24pOiBUUmVzdWx0ID0+XG4gICAgICAgIChvcHRpb25zLnNlbGVjdFxuICAgICAgICAgID8gb3B0aW9ucy5zZWxlY3QoXG4gICAgICAgICAgICAgIG11dGF0aW9uIGFzIE11dGF0aW9uPHVua25vd24sIERlZmF1bHRFcnJvciwgdW5rbm93biwgdW5rbm93bj4sXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBtdXRhdGlvbi5zdGF0ZSkgYXMgVFJlc3VsdCxcbiAgICApXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0TXV0YXRpb25TdGF0ZU9wdGlvbnMge1xuICBpbmplY3Rvcj86IEluamVjdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RNdXRhdGlvblN0YXRlPFRSZXN1bHQgPSBNdXRhdGlvblN0YXRlPihcbiAgbXV0YXRpb25TdGF0ZU9wdGlvbnNGbjogKCkgPT4gTXV0YXRpb25TdGF0ZU9wdGlvbnM8VFJlc3VsdD4gPSAoKSA9PiAoe30pLFxuICBvcHRpb25zPzogSW5qZWN0TXV0YXRpb25TdGF0ZU9wdGlvbnMsXG4pOiBTaWduYWw8QXJyYXk8VFJlc3VsdD4+IHtcbiAgcmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdE11dGF0aW9uU3RhdGUsIG9wdGlvbnM/LmluamVjdG9yLCAoKSA9PiB7XG4gICAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gaW5qZWN0UXVlcnlDbGllbnQoKVxuICAgIGNvbnN0IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgICBjb25zdCBtdXRhdGlvbkNhY2hlID0gcXVlcnlDbGllbnQuZ2V0TXV0YXRpb25DYWNoZSgpXG5cbiAgICByZXR1cm4gbGF6eVNpZ25hbEluaXRpYWxpemVyKChpbmplY3RvcikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gc2lnbmFsPEFycmF5PFRSZXN1bHQ+PihcbiAgICAgICAgZ2V0UmVzdWx0KG11dGF0aW9uQ2FjaGUsIG11dGF0aW9uU3RhdGVPcHRpb25zRm4oKSksXG4gICAgICApXG5cbiAgICAgIGVmZmVjdChcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG11dGF0aW9uU3RhdGVPcHRpb25zID0gbXV0YXRpb25TdGF0ZU9wdGlvbnNGbigpXG4gICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFNldHRpbmcgdGhlIHNpZ25hbCBmcm9tIGFuIGVmZmVjdCBiZWNhdXNlIGl0J3MgYm90aCAnY29tcHV0ZWQnIGZyb20gb3B0aW9ucygpXG4gICAgICAgICAgICAvLyBhbmQgbmVlZHMgdG8gYmUgc2V0IGltcGVyYXRpdmVseSBpbiB0aGUgbXV0YXRpb25DYWNoZSBsaXN0ZW5lci5cbiAgICAgICAgICAgIHJlc3VsdC5zZXQoZ2V0UmVzdWx0KG11dGF0aW9uQ2FjaGUsIG11dGF0aW9uU3RhdGVPcHRpb25zKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9LFxuICAgICAgICB7IGluamVjdG9yIH0sXG4gICAgICApXG5cbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gbXV0YXRpb25DYWNoZS5zdWJzY3JpYmUoXG4gICAgICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscygoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dFJlc3VsdCA9IHJlcGxhY2VFcXVhbERlZXAoXG4gICAgICAgICAgICByZXN1bHQoKSxcbiAgICAgICAgICAgIGdldFJlc3VsdChtdXRhdGlvbkNhY2hlLCBtdXRhdGlvblN0YXRlT3B0aW9uc0ZuKCkpLFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocmVzdWx0KCkgIT09IG5leHRSZXN1bHQpIHtcbiAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICByZXN1bHQuc2V0KG5leHRSZXN1bHQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG5cbiAgICAgIGRlc3Ryb3lSZWYub25EZXN0cm95KHVuc3Vic2NyaWJlKVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSlcbiAgfSlcbn1cbiJdfQ==
|
|
@@ -1,29 +1,38 @@
|
|
|
1
|
-
import { DestroyRef, computed, effect, inject, signal } from '@angular/core';
|
|
1
|
+
import { DestroyRef, Injector, NgZone, computed, effect, inject, runInInjectionContext, signal, } from '@angular/core';
|
|
2
2
|
import { MutationObserver, notifyManager } from '@tanstack/query-core';
|
|
3
3
|
import { assertInjector } from './util/assert-injector/assert-injector';
|
|
4
4
|
import { signalProxy } from './signal-proxy';
|
|
5
5
|
import { injectQueryClient } from './inject-query-client';
|
|
6
6
|
import { noop } from './util';
|
|
7
|
+
import { lazyInit } from './util/lazy-init/lazy-init';
|
|
7
8
|
export function injectMutation(options, injector) {
|
|
8
9
|
return assertInjector(injectMutation, injector, () => {
|
|
9
10
|
const queryClient = injectQueryClient();
|
|
11
|
+
const currentInjector = inject(Injector);
|
|
10
12
|
const destroyRef = inject(DestroyRef);
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
observer
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
const ngZone = inject(NgZone);
|
|
14
|
+
return lazyInit(() => runInInjectionContext(currentInjector, () => {
|
|
15
|
+
const observer = new MutationObserver(queryClient, options(queryClient));
|
|
16
|
+
const mutate = (variables, mutateOptions) => {
|
|
17
|
+
observer.mutate(variables, mutateOptions).catch(noop);
|
|
18
|
+
};
|
|
19
|
+
effect(() => {
|
|
20
|
+
observer.setOptions(options(queryClient));
|
|
21
|
+
});
|
|
22
|
+
const result = signal(observer.getCurrentResult());
|
|
23
|
+
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => {
|
|
24
|
+
ngZone.run(() => {
|
|
25
|
+
result.set(val);
|
|
26
|
+
});
|
|
27
|
+
}));
|
|
28
|
+
destroyRef.onDestroy(unsubscribe);
|
|
29
|
+
const resultSignal = computed(() => ({
|
|
30
|
+
...result(),
|
|
31
|
+
mutate,
|
|
32
|
+
mutateAsync: result().mutate,
|
|
33
|
+
}));
|
|
34
|
+
return signalProxy(resultSignal);
|
|
25
35
|
}));
|
|
26
|
-
return signalProxy(resultSignal);
|
|
27
36
|
});
|
|
28
37
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LW11dGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luamVjdC1tdXRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRTdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQVlyRCxNQUFNLFVBQVUsY0FBYyxDQU01QixPQUUrRCxFQUMvRCxRQUFtQjtJQUVuQixPQUFPLGNBQWMsQ0FBQyxjQUFjLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3ZDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBRTdCLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUNuQixxQkFBcUIsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksZ0JBQWdCLENBS25DLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtZQUNwQyxNQUFNLE1BQU0sR0FLUixDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsRUFBRTtnQkFDL0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3ZELENBQUMsQ0FBQTtZQUVELE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtZQUMzQyxDQUFDLENBQUMsQ0FBQTtZQUVGLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFBO1lBRWxELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQ3BDLGFBQWEsQ0FBQyxVQUFVLENBQ3RCLENBQ0UsR0FBZ0UsRUFDaEUsRUFBRTtnQkFDRixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNqQixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FDRixDQUNGLENBQUE7WUFFRCxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRWpDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxHQUFHLE1BQU0sRUFBRTtnQkFDWCxNQUFNO2dCQUNOLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNO2FBQzdCLENBQUMsQ0FBQyxDQUFBO1lBRUgsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUs5QixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIEluamVjdG9yLFxuICBOZ1pvbmUsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBNdXRhdGlvbk9ic2VydmVyLCBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJy4vdXRpbC9hc3NlcnQtaW5qZWN0b3IvYXNzZXJ0LWluamVjdG9yJ1xuaW1wb3J0IHsgc2lnbmFsUHJveHkgfSBmcm9tICcuL3NpZ25hbC1wcm94eSdcbmltcG9ydCB7IGluamVjdFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9pbmplY3QtcXVlcnktY2xpZW50J1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vdXRpbCdcblxuaW1wb3J0IHsgbGF6eUluaXQgfSBmcm9tICcuL3V0aWwvbGF6eS1pbml0L2xhenktaW5pdCdcbmltcG9ydCB0eXBlIHtcbiAgRGVmYXVsdEVycm9yLFxuICBNdXRhdGlvbk9ic2VydmVyUmVzdWx0LFxuICBRdWVyeUNsaWVudCxcbn0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgdHlwZSB7XG4gIENyZWF0ZU11dGF0ZUZ1bmN0aW9uLFxuICBDcmVhdGVNdXRhdGlvbk9wdGlvbnMsXG4gIENyZWF0ZU11dGF0aW9uUmVzdWx0LFxufSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0TXV0YXRpb248XG4gIFREYXRhID0gdW5rbm93bixcbiAgVEVycm9yID0gRGVmYXVsdEVycm9yLFxuICBUVmFyaWFibGVzID0gdm9pZCxcbiAgVENvbnRleHQgPSB1bmtub3duLFxuPihcbiAgb3B0aW9uczogKFxuICAgIGNsaWVudDogUXVlcnlDbGllbnQsXG4gICkgPT4gQ3JlYXRlTXV0YXRpb25PcHRpb25zPFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PixcbiAgaW5qZWN0b3I/OiBJbmplY3Rvcixcbik6IENyZWF0ZU11dGF0aW9uUmVzdWx0PFREYXRhLCBURXJyb3IsIFRWYXJpYWJsZXMsIFRDb250ZXh0PiB7XG4gIHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RNdXRhdGlvbiwgaW5qZWN0b3IsICgpID0+IHtcbiAgICBjb25zdCBxdWVyeUNsaWVudCA9IGluamVjdFF1ZXJ5Q2xpZW50KClcbiAgICBjb25zdCBjdXJyZW50SW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG4gICAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuICAgIGNvbnN0IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpXG5cbiAgICByZXR1cm4gbGF6eUluaXQoKCkgPT5cbiAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChjdXJyZW50SW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcjxcbiAgICAgICAgICBURGF0YSxcbiAgICAgICAgICBURXJyb3IsXG4gICAgICAgICAgVFZhcmlhYmxlcyxcbiAgICAgICAgICBUQ29udGV4dFxuICAgICAgICA+KHF1ZXJ5Q2xpZW50LCBvcHRpb25zKHF1ZXJ5Q2xpZW50KSlcbiAgICAgICAgY29uc3QgbXV0YXRlOiBDcmVhdGVNdXRhdGVGdW5jdGlvbjxcbiAgICAgICAgICBURGF0YSxcbiAgICAgICAgICBURXJyb3IsXG4gICAgICAgICAgVFZhcmlhYmxlcyxcbiAgICAgICAgICBUQ29udGV4dFxuICAgICAgICA+ID0gKHZhcmlhYmxlcywgbXV0YXRlT3B0aW9ucykgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm11dGF0ZSh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpLmNhdGNoKG5vb3ApXG4gICAgICAgIH1cblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLnNldE9wdGlvbnMob3B0aW9ucyhxdWVyeUNsaWVudCkpXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc2lnbmFsKG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSlcblxuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG9ic2VydmVyLnN1YnNjcmliZShcbiAgICAgICAgICBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIHZhbDogTXV0YXRpb25PYnNlcnZlclJlc3VsdDxURGF0YSwgVEVycm9yLCBUVmFyaWFibGVzLCBUQ29udGV4dD4sXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnNldCh2YWwpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICksXG4gICAgICAgIClcblxuICAgICAgICBkZXN0cm95UmVmLm9uRGVzdHJveSh1bnN1YnNjcmliZSlcblxuICAgICAgICBjb25zdCByZXN1bHRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiAoe1xuICAgICAgICAgIC4uLnJlc3VsdCgpLFxuICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICBtdXRhdGVBc3luYzogcmVzdWx0KCkubXV0YXRlLFxuICAgICAgICB9KSlcblxuICAgICAgICByZXR1cm4gc2lnbmFsUHJveHkocmVzdWx0U2lnbmFsKSBhcyB1bmtub3duIGFzIENyZWF0ZU11dGF0aW9uUmVzdWx0PFxuICAgICAgICAgIFREYXRhLFxuICAgICAgICAgIFRFcnJvcixcbiAgICAgICAgICBUVmFyaWFibGVzLFxuICAgICAgICAgIFRDb250ZXh0XG4gICAgICAgID5cbiAgICAgIH0pLFxuICAgIClcbiAgfSlcbn1cbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { untracked } from '@angular/core';
|
|
2
|
+
export function lazyInit(initializer) {
|
|
3
|
+
let object = null;
|
|
4
|
+
const initializeObject = () => {
|
|
5
|
+
if (!object) {
|
|
6
|
+
object = untracked(() => initializer());
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
queueMicrotask(() => initializeObject());
|
|
10
|
+
return new Proxy({}, {
|
|
11
|
+
get(_, prop, receiver) {
|
|
12
|
+
initializeObject();
|
|
13
|
+
return Reflect.get(object, prop, receiver);
|
|
14
|
+
},
|
|
15
|
+
has(_, prop) {
|
|
16
|
+
initializeObject();
|
|
17
|
+
return Reflect.has(object, prop);
|
|
18
|
+
},
|
|
19
|
+
ownKeys() {
|
|
20
|
+
initializeObject();
|
|
21
|
+
return Reflect.ownKeys(object);
|
|
22
|
+
},
|
|
23
|
+
getOwnPropertyDescriptor() {
|
|
24
|
+
return {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1pbml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWwvbGF6eS1pbml0L2xhenktaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpDLE1BQU0sVUFBVSxRQUFRLENBQW1CLFdBQW9CO0lBQzdELElBQUksTUFBTSxHQUFhLElBQUksQ0FBQTtJQUUzQixNQUFNLGdCQUFnQixHQUFHLEdBQUcsRUFBRTtRQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO1NBQ3hDO0lBQ0gsQ0FBQyxDQUFBO0lBRUQsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtJQUV4QyxPQUFPLElBQUksS0FBSyxDQUFJLEVBQU8sRUFBRTtRQUMzQixHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRO1lBQ25CLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDakQsQ0FBQztRQUNELEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSTtZQUNULGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQVcsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBQ0QsT0FBTztZQUNMLGdCQUFnQixFQUFFLENBQUE7WUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQVcsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFDRCx3QkFBd0I7WUFDdEIsT0FBTztnQkFDTCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FBQTtRQUNILENBQUM7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGxhenlJbml0PFQgZXh0ZW5kcyBvYmplY3Q+KGluaXRpYWxpemVyOiAoKSA9PiBUKTogVCB7XG4gIGxldCBvYmplY3Q6IFQgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0IGluaXRpYWxpemVPYmplY3QgPSAoKSA9PiB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIG9iamVjdCA9IHVudHJhY2tlZCgoKSA9PiBpbml0aWFsaXplcigpKVxuICAgIH1cbiAgfVxuXG4gIHF1ZXVlTWljcm90YXNrKCgpID0+IGluaXRpYWxpemVPYmplY3QoKSlcblxuICByZXR1cm4gbmV3IFByb3h5PFQ+KHt9IGFzIFQsIHtcbiAgICBnZXQoXywgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgIGluaXRpYWxpemVPYmplY3QoKVxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KG9iamVjdCBhcyBULCBwcm9wLCByZWNlaXZlcilcbiAgICB9LFxuICAgIGhhcyhfLCBwcm9wKSB7XG4gICAgICBpbml0aWFsaXplT2JqZWN0KClcbiAgICAgIHJldHVybiBSZWZsZWN0LmhhcyhvYmplY3QgYXMgVCwgcHJvcClcbiAgICB9LFxuICAgIG93bktleXMoKSB7XG4gICAgICBpbml0aWFsaXplT2JqZWN0KClcbiAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMob2JqZWN0IGFzIFQpXG4gICAgfSxcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Injector, computed, inject, untracked, } from '@angular/core';
|
|
2
|
+
export function lazySignalInitializer(initializerFn) {
|
|
3
|
+
const injector = inject(Injector);
|
|
4
|
+
let source = null;
|
|
5
|
+
const unwrapSignal = () => {
|
|
6
|
+
if (!source) {
|
|
7
|
+
source = untracked(() => initializerFn(injector));
|
|
8
|
+
}
|
|
9
|
+
return source();
|
|
10
|
+
};
|
|
11
|
+
queueMicrotask(() => unwrapSignal());
|
|
12
|
+
return computed(unwrapSignal);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1zaWduYWwtaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbC9sYXp5LXNpZ25hbC1pbml0aWFsaXplci9sYXp5LXNpZ25hbC1pbml0aWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBSXRCLE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsYUFBcUM7SUFFckMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRWpDLElBQUksTUFBTSxHQUFxQixJQUFJLENBQUE7SUFFbkMsTUFBTSxZQUFZLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1NBQ2xEO1FBQ0QsT0FBTyxNQUFNLEVBQUUsQ0FBQTtJQUNqQixDQUFDLENBQUE7SUFFRCxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUVwQyxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0b3IsXG4gIHR5cGUgU2lnbmFsLFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbnR5cGUgU2lnbmFsSW5pdGlhbGl6ZXJGbjxUPiA9IChpbmplY3RvcjogSW5qZWN0b3IpID0+IFNpZ25hbDxUPlxuXG5leHBvcnQgZnVuY3Rpb24gbGF6eVNpZ25hbEluaXRpYWxpemVyPFQ+KFxuICBpbml0aWFsaXplckZuOiBTaWduYWxJbml0aWFsaXplckZuPFQ+LFxuKSB7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKVxuXG4gIGxldCBzb3VyY2U6IFNpZ25hbDxUPiB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgdW53cmFwU2lnbmFsID0gKCkgPT4ge1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICBzb3VyY2UgPSB1bnRyYWNrZWQoKCkgPT4gaW5pdGlhbGl6ZXJGbihpbmplY3RvcikpXG4gICAgfVxuICAgIHJldHVybiBzb3VyY2UoKVxuICB9XG5cbiAgcXVldWVNaWNyb3Rhc2soKCkgPT4gdW53cmFwU2lnbmFsKCkpXG5cbiAgcmV0dXJuIGNvbXB1dGVkKHVud3JhcFNpZ25hbClcbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { notifyManager, InfiniteQueryObserver, MutationObserver, replaceEqualDeep, QueriesObserver, QueryObserver } from '@tanstack/query-core';
|
|
2
2
|
export * from '@tanstack/query-core';
|
|
3
|
-
import { untracked, computed, Injector, inject, DestroyRef, signal, effect, runInInjectionContext, assertInInjectionContext, InjectionToken, ENVIRONMENT_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
|
|
3
|
+
import { untracked, computed, Injector, inject, NgZone, DestroyRef, signal, effect, runInInjectionContext, assertInInjectionContext, InjectionToken, ENVIRONMENT_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
|
|
4
4
|
|
|
5
5
|
/* istanbul ignore file */
|
|
6
6
|
|
|
@@ -55,7 +55,7 @@ function lazyInit(initializer) {
|
|
|
55
55
|
let object = null;
|
|
56
56
|
const initializeObject = () => {
|
|
57
57
|
if (!object) {
|
|
58
|
-
object = initializer();
|
|
58
|
+
object = untracked(() => initializer());
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
queueMicrotask(() => initializeObject());
|
|
@@ -86,6 +86,7 @@ function lazyInit(initializer) {
|
|
|
86
86
|
*/
|
|
87
87
|
function createBaseQuery(options, Observer, queryClient) {
|
|
88
88
|
const injector = inject(Injector);
|
|
89
|
+
const ngZone = inject(NgZone);
|
|
89
90
|
return lazyInit(() => {
|
|
90
91
|
return runInInjectionContext(injector, () => {
|
|
91
92
|
const destroyRef = inject(DestroyRef);
|
|
@@ -102,8 +103,7 @@ function createBaseQuery(options, Observer, queryClient) {
|
|
|
102
103
|
});
|
|
103
104
|
const observer = new Observer(queryClient, defaultedOptionsSignal());
|
|
104
105
|
const resultSignal = signal(observer.getOptimisticResult(defaultedOptionsSignal()));
|
|
105
|
-
|
|
106
|
-
untracked(() => effect(() => {
|
|
106
|
+
effect(() => {
|
|
107
107
|
const defaultedOptions = defaultedOptionsSignal();
|
|
108
108
|
observer.setOptions(defaultedOptions, {
|
|
109
109
|
// Do not notify on updates because of changes in the options because
|
|
@@ -113,9 +113,13 @@ function createBaseQuery(options, Observer, queryClient) {
|
|
|
113
113
|
untracked(() => {
|
|
114
114
|
resultSignal.set(observer.getOptimisticResult(defaultedOptions));
|
|
115
115
|
});
|
|
116
|
-
})
|
|
116
|
+
});
|
|
117
117
|
// observer.trackResult is not used as this optimization is not needed for Angular
|
|
118
|
-
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) =>
|
|
118
|
+
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => {
|
|
119
|
+
ngZone.run(() => {
|
|
120
|
+
resultSignal.set(val);
|
|
121
|
+
});
|
|
122
|
+
}));
|
|
119
123
|
destroyRef.onDestroy(unsubscribe);
|
|
120
124
|
return signalProxy(resultSignal);
|
|
121
125
|
});
|
|
@@ -214,6 +218,7 @@ function injectIsFetching(filters, injector) {
|
|
|
214
218
|
return assertInjector(injectIsFetching, injector, () => {
|
|
215
219
|
const queryClient = injectQueryClient();
|
|
216
220
|
const destroyRef = inject(DestroyRef);
|
|
221
|
+
const ngZone = inject(NgZone);
|
|
217
222
|
const cache = queryClient.getQueryCache();
|
|
218
223
|
// isFetching is the prev value initialized on mount *
|
|
219
224
|
let isFetching = queryClient.isFetching(filters);
|
|
@@ -223,7 +228,9 @@ function injectIsFetching(filters, injector) {
|
|
|
223
228
|
if (isFetching !== newIsFetching) {
|
|
224
229
|
// * and update with each change
|
|
225
230
|
isFetching = newIsFetching;
|
|
226
|
-
|
|
231
|
+
ngZone.run(() => {
|
|
232
|
+
result.set(isFetching);
|
|
233
|
+
});
|
|
227
234
|
}
|
|
228
235
|
}));
|
|
229
236
|
destroyRef.onDestroy(unsubscribe);
|
|
@@ -235,6 +242,7 @@ function injectIsMutating(filters, injector) {
|
|
|
235
242
|
return assertInjector(injectIsMutating, injector, () => {
|
|
236
243
|
const queryClient = injectQueryClient();
|
|
237
244
|
const destroyRef = inject(DestroyRef);
|
|
245
|
+
const ngZone = inject(NgZone);
|
|
238
246
|
const cache = queryClient.getMutationCache();
|
|
239
247
|
// isMutating is the prev value initialized on mount *
|
|
240
248
|
let isMutating = queryClient.isMutating(filters);
|
|
@@ -244,7 +252,9 @@ function injectIsMutating(filters, injector) {
|
|
|
244
252
|
if (isMutating !== newIsMutating) {
|
|
245
253
|
// * and update with each change
|
|
246
254
|
isMutating = newIsMutating;
|
|
247
|
-
|
|
255
|
+
ngZone.run(() => {
|
|
256
|
+
result.set(isMutating);
|
|
257
|
+
});
|
|
248
258
|
}
|
|
249
259
|
}));
|
|
250
260
|
destroyRef.onDestroy(unsubscribe);
|
|
@@ -257,26 +267,47 @@ function noop() { }
|
|
|
257
267
|
function injectMutation(options, injector) {
|
|
258
268
|
return assertInjector(injectMutation, injector, () => {
|
|
259
269
|
const queryClient = injectQueryClient();
|
|
270
|
+
const currentInjector = inject(Injector);
|
|
260
271
|
const destroyRef = inject(DestroyRef);
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
observer
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
272
|
+
const ngZone = inject(NgZone);
|
|
273
|
+
return lazyInit(() => runInInjectionContext(currentInjector, () => {
|
|
274
|
+
const observer = new MutationObserver(queryClient, options(queryClient));
|
|
275
|
+
const mutate = (variables, mutateOptions) => {
|
|
276
|
+
observer.mutate(variables, mutateOptions).catch(noop);
|
|
277
|
+
};
|
|
278
|
+
effect(() => {
|
|
279
|
+
observer.setOptions(options(queryClient));
|
|
280
|
+
});
|
|
281
|
+
const result = signal(observer.getCurrentResult());
|
|
282
|
+
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => {
|
|
283
|
+
ngZone.run(() => {
|
|
284
|
+
result.set(val);
|
|
285
|
+
});
|
|
286
|
+
}));
|
|
287
|
+
destroyRef.onDestroy(unsubscribe);
|
|
288
|
+
const resultSignal = computed(() => ({
|
|
289
|
+
...result(),
|
|
290
|
+
mutate,
|
|
291
|
+
mutateAsync: result().mutate,
|
|
292
|
+
}));
|
|
293
|
+
return signalProxy(resultSignal);
|
|
275
294
|
}));
|
|
276
|
-
return signalProxy(resultSignal);
|
|
277
295
|
});
|
|
278
296
|
}
|
|
279
297
|
|
|
298
|
+
function lazySignalInitializer(initializerFn) {
|
|
299
|
+
const injector = inject(Injector);
|
|
300
|
+
let source = null;
|
|
301
|
+
const unwrapSignal = () => {
|
|
302
|
+
if (!source) {
|
|
303
|
+
source = untracked(() => initializerFn(injector));
|
|
304
|
+
}
|
|
305
|
+
return source();
|
|
306
|
+
};
|
|
307
|
+
queueMicrotask(() => unwrapSignal());
|
|
308
|
+
return computed(unwrapSignal);
|
|
309
|
+
}
|
|
310
|
+
|
|
280
311
|
function getResult(mutationCache, options) {
|
|
281
312
|
return mutationCache
|
|
282
313
|
.findAll(options.filters)
|
|
@@ -288,24 +319,29 @@ function injectMutationState(mutationStateOptionsFn = () => ({}), options) {
|
|
|
288
319
|
return assertInjector(injectMutationState, options?.injector, () => {
|
|
289
320
|
const destroyRef = inject(DestroyRef);
|
|
290
321
|
const queryClient = injectQueryClient();
|
|
322
|
+
const ngZone = inject(NgZone);
|
|
291
323
|
const mutationCache = queryClient.getMutationCache();
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
324
|
+
return lazySignalInitializer((injector) => {
|
|
325
|
+
const result = signal(getResult(mutationCache, mutationStateOptionsFn()));
|
|
326
|
+
effect(() => {
|
|
327
|
+
const mutationStateOptions = mutationStateOptionsFn();
|
|
328
|
+
untracked(() => {
|
|
329
|
+
// Setting the signal from an effect because it's both 'computed' from options()
|
|
330
|
+
// and needs to be set imperatively in the mutationCache listener.
|
|
331
|
+
result.set(getResult(mutationCache, mutationStateOptions));
|
|
332
|
+
});
|
|
333
|
+
}, { injector });
|
|
334
|
+
const unsubscribe = mutationCache.subscribe(notifyManager.batchCalls(() => {
|
|
335
|
+
const nextResult = replaceEqualDeep(result(), getResult(mutationCache, mutationStateOptionsFn()));
|
|
336
|
+
if (result() !== nextResult) {
|
|
337
|
+
ngZone.run(() => {
|
|
338
|
+
result.set(nextResult);
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
}));
|
|
342
|
+
destroyRef.onDestroy(unsubscribe);
|
|
343
|
+
return result;
|
|
300
344
|
});
|
|
301
|
-
const unsubscribe = mutationCache.subscribe(notifyManager.batchCalls(() => {
|
|
302
|
-
const nextResult = replaceEqualDeep(result(), getResult(mutationCache, mutationStateOptionsFn()));
|
|
303
|
-
if (result() !== nextResult) {
|
|
304
|
-
result.set(nextResult);
|
|
305
|
-
}
|
|
306
|
-
}));
|
|
307
|
-
destroyRef.onDestroy(unsubscribe);
|
|
308
|
-
return result;
|
|
309
345
|
});
|
|
310
346
|
}
|
|
311
347
|
|