@tanstack/angular-query-experimental 5.25.0 → 5.26.0
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 +4 -5
- package/build/esm2022/inject-mutation-state.mjs +20 -17
- package/build/esm2022/inject-mutation.mjs +21 -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 +52 -35
- 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 +12 -15
- package/src/inject-mutation-state.ts +30 -24
- package/src/inject-mutation.ts +49 -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,7 +1,7 @@
|
|
|
1
1
|
import { DestroyRef, Injector, 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
|
*/
|
|
@@ -23,8 +23,7 @@ export function createBaseQuery(options, Observer, queryClient) {
|
|
|
23
23
|
});
|
|
24
24
|
const observer = new Observer(queryClient, defaultedOptionsSignal());
|
|
25
25
|
const resultSignal = signal(observer.getOptimisticResult(defaultedOptionsSignal()));
|
|
26
|
-
|
|
27
|
-
untracked(() => effect(() => {
|
|
26
|
+
effect(() => {
|
|
28
27
|
const defaultedOptions = defaultedOptionsSignal();
|
|
29
28
|
observer.setOptions(defaultedOptions, {
|
|
30
29
|
// Do not notify on updates because of changes in the options because
|
|
@@ -34,7 +33,7 @@ export function createBaseQuery(options, Observer, queryClient) {
|
|
|
34
33
|
untracked(() => {
|
|
35
34
|
resultSignal.set(observer.getOptimisticResult(defaultedOptions));
|
|
36
35
|
});
|
|
37
|
-
})
|
|
36
|
+
});
|
|
38
37
|
// observer.trackResult is not used as this optimization is not needed for Angular
|
|
39
38
|
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => resultSignal.set(val)));
|
|
40
39
|
destroyRef.onDestroy(unsubscribe);
|
|
@@ -42,4 +41,4 @@ export function createBaseQuery(options, Observer, queryClient) {
|
|
|
42
41
|
});
|
|
43
42
|
});
|
|
44
43
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWJhc2UtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3JlYXRlLWJhc2UtcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFJckQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQU83QixPQVFDLEVBQ0QsUUFBOEIsRUFDOUIsV0FBd0I7SUFFeEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRWpDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNuQixPQUFPLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQ3JDOzs7OztlQUtHO1lBQ0gsTUFBTSxzQkFBc0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUMzQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FDdEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUNyQixDQUFBO2dCQUNELGdCQUFnQixDQUFDLGtCQUFrQixHQUFHLFlBQVksQ0FBQTtnQkFDbEQsT0FBTyxnQkFBZ0IsQ0FBQTtZQUN6QixDQUFDLENBQUMsQ0FBQTtZQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQU0zQixXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFBO1lBRXhDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FDekIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FDdkQsQ0FBQTtZQUVELE1BQU0sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1YsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsRUFBRSxDQUFBO2dCQUNqRCxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFO29CQUNwQyxxRUFBcUU7b0JBQ3JFLHNFQUFzRTtvQkFDdEUsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQTtnQkFDRixTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQTtnQkFDbEUsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLENBQUMsQ0FBQTtZQUVGLGtGQUFrRjtZQUNsRixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUNwQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3pELENBQUE7WUFDRCxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRWpDLE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBeUMsQ0FBQTtRQUMxRSxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIEluamVjdG9yLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgc2lnbmFsLFxuICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBub3RpZnlNYW5hZ2VyIH0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgeyBzaWduYWxQcm94eSB9IGZyb20gJy4vc2lnbmFsLXByb3h5J1xuaW1wb3J0IHsgbGF6eUluaXQgfSBmcm9tICcuL3V0aWwvbGF6eS1pbml0L2xhenktaW5pdCdcbmltcG9ydCB0eXBlIHsgUXVlcnlDbGllbnQsIFF1ZXJ5S2V5LCBRdWVyeU9ic2VydmVyIH0gZnJvbSAnQHRhbnN0YWNrL3F1ZXJ5LWNvcmUnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJhc2VRdWVyeU9wdGlvbnMsIENyZWF0ZUJhc2VRdWVyeVJlc3VsdCB9IGZyb20gJy4vdHlwZXMnXG5cbi8qKlxuICogQmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgYGluamVjdFF1ZXJ5YCBhbmQgYGluamVjdEluZmluaXRlUXVlcnlgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFzZVF1ZXJ5PFxuICBUUXVlcnlGbkRhdGEsXG4gIFRFcnJvcixcbiAgVERhdGEsXG4gIFRRdWVyeURhdGEsXG4gIFRRdWVyeUtleSBleHRlbmRzIFF1ZXJ5S2V5LFxuPihcbiAgb3B0aW9uczogKFxuICAgIGNsaWVudDogUXVlcnlDbGllbnQsXG4gICkgPT4gQ3JlYXRlQmFzZVF1ZXJ5T3B0aW9uczxcbiAgICBUUXVlcnlGbkRhdGEsXG4gICAgVEVycm9yLFxuICAgIFREYXRhLFxuICAgIFRRdWVyeURhdGEsXG4gICAgVFF1ZXJ5S2V5XG4gID4sXG4gIE9ic2VydmVyOiB0eXBlb2YgUXVlcnlPYnNlcnZlcixcbiAgcXVlcnlDbGllbnQ6IFF1ZXJ5Q2xpZW50LFxuKTogQ3JlYXRlQmFzZVF1ZXJ5UmVzdWx0PFREYXRhLCBURXJyb3I+IHtcbiAgY29uc3QgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpXG5cbiAgcmV0dXJuIGxhenlJbml0KCgpID0+IHtcbiAgICByZXR1cm4gcnVuSW5JbmplY3Rpb25Db250ZXh0KGluamVjdG9yLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpXG4gICAgICAvKipcbiAgICAgICAqIFNpZ25hbCB0aGF0IGhhcyB0aGUgZGVmYXVsdCBvcHRpb25zIGZyb20gcXVlcnkgY2xpZW50IGFwcGxpZWRcbiAgICAgICAqIGNvbXB1dGVkKCkgaXMgdXNlZCBzbyBzaWduYWxzIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvcHRpb25zXG4gICAgICAgKiBtYWtpbmcgaXQgcmVhY3RpdmUuIFdyYXBwaW5nIG9wdGlvbnMgaW4gYSBmdW5jdGlvbiBlbnN1cmVzIGVtYmVkZGVkIGV4cHJlc3Npb25zXG4gICAgICAgKiBhcmUgcHJlc2VydmVkIGFuZCBjYW4ga2VlcCBiZWluZyBhcHBsaWVkIGFmdGVyIHNpZ25hbCBjaGFuZ2VzXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSBxdWVyeUNsaWVudC5kZWZhdWx0UXVlcnlPcHRpb25zKFxuICAgICAgICAgIG9wdGlvbnMocXVlcnlDbGllbnQpLFxuICAgICAgICApXG4gICAgICAgIGRlZmF1bHRlZE9wdGlvbnMuX29wdGltaXN0aWNSZXN1bHRzID0gJ29wdGltaXN0aWMnXG4gICAgICAgIHJldHVybiBkZWZhdWx0ZWRPcHRpb25zXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcjxcbiAgICAgICAgVFF1ZXJ5Rm5EYXRhLFxuICAgICAgICBURXJyb3IsXG4gICAgICAgIFREYXRhLFxuICAgICAgICBUUXVlcnlEYXRhLFxuICAgICAgICBUUXVlcnlLZXlcbiAgICAgID4ocXVlcnlDbGllbnQsIGRlZmF1bHRlZE9wdGlvbnNTaWduYWwoKSlcblxuICAgICAgY29uc3QgcmVzdWx0U2lnbmFsID0gc2lnbmFsKFxuICAgICAgICBvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnNTaWduYWwoKSksXG4gICAgICApXG5cbiAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZE9wdGlvbnMgPSBkZWZhdWx0ZWRPcHRpb25zU2lnbmFsKClcbiAgICAgICAgb2JzZXJ2ZXIuc2V0T3B0aW9ucyhkZWZhdWx0ZWRPcHRpb25zLCB7XG4gICAgICAgICAgLy8gRG8gbm90IG5vdGlmeSBvbiB1cGRhdGVzIGJlY2F1c2Ugb2YgY2hhbmdlcyBpbiB0aGUgb3B0aW9ucyBiZWNhdXNlXG4gICAgICAgICAgLy8gdGhlc2UgY2hhbmdlcyBzaG91bGQgYWxyZWFkeSBiZSByZWZsZWN0ZWQgaW4gdGhlIG9wdGltaXN0aWMgcmVzdWx0LlxuICAgICAgICAgIGxpc3RlbmVyczogZmFsc2UsXG4gICAgICAgIH0pXG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgcmVzdWx0U2lnbmFsLnNldChvYnNlcnZlci5nZXRPcHRpbWlzdGljUmVzdWx0KGRlZmF1bHRlZE9wdGlvbnMpKVxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgLy8gb2JzZXJ2ZXIudHJhY2tSZXN1bHQgaXMgbm90IHVzZWQgYXMgdGhpcyBvcHRpbWl6YXRpb24gaXMgbm90IG5lZWRlZCBmb3IgQW5ndWxhclxuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvYnNlcnZlci5zdWJzY3JpYmUoXG4gICAgICAgIG5vdGlmeU1hbmFnZXIuYmF0Y2hDYWxscygodmFsKSA9PiByZXN1bHRTaWduYWwuc2V0KHZhbCkpLFxuICAgICAgKVxuICAgICAgZGVzdHJveVJlZi5vbkRlc3Ryb3kodW5zdWJzY3JpYmUpXG5cbiAgICAgIHJldHVybiBzaWduYWxQcm94eShyZXN1bHRTaWduYWwpIGFzIENyZWF0ZUJhc2VRdWVyeVJlc3VsdDxURGF0YSwgVEVycm9yPlxuICAgIH0pXG4gIH0pXG59XG4iXX0=
|
|
@@ -2,6 +2,7 @@ import { DestroyRef, 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)
|
|
@@ -14,23 +15,25 @@ export function injectMutationState(mutationStateOptionsFn = () => ({}), options
|
|
|
14
15
|
const destroyRef = inject(DestroyRef);
|
|
15
16
|
const queryClient = injectQueryClient();
|
|
16
17
|
const mutationCache = queryClient.getMutationCache();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
return lazySignalInitializer((injector) => {
|
|
19
|
+
const result = signal(getResult(mutationCache, mutationStateOptionsFn()));
|
|
20
|
+
effect(() => {
|
|
21
|
+
const mutationStateOptions = mutationStateOptionsFn();
|
|
22
|
+
untracked(() => {
|
|
23
|
+
// Setting the signal from an effect because it's both 'computed' from options()
|
|
24
|
+
// and needs to be set imperatively in the mutationCache listener.
|
|
25
|
+
result.set(getResult(mutationCache, mutationStateOptions));
|
|
26
|
+
});
|
|
27
|
+
}, { injector });
|
|
28
|
+
const unsubscribe = mutationCache.subscribe(notifyManager.batchCalls(() => {
|
|
29
|
+
const nextResult = replaceEqualDeep(result(), getResult(mutationCache, mutationStateOptionsFn()));
|
|
30
|
+
if (result() !== nextResult) {
|
|
31
|
+
result.set(nextResult);
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
destroyRef.onDestroy(unsubscribe);
|
|
35
|
+
return result;
|
|
25
36
|
});
|
|
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
37
|
});
|
|
35
38
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LW11dGF0aW9uLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luamVjdC1tdXRhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3RSxPQUFPLEVBTUwsYUFBYSxFQUNiLGdCQUFnQixHQUNqQixNQUFNLHNCQUFzQixDQUFBO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQTtBQVU5RixTQUFTLFNBQVMsQ0FDaEIsYUFBNEIsRUFDNUIsT0FBc0M7SUFFdEMsT0FBTyxhQUFhO1NBQ2pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ3hCLEdBQUcsQ0FDRixDQUFDLFFBQVEsRUFBVyxFQUFFLENBQ3BCLENBQUMsT0FBTyxDQUFDLE1BQU07UUFDYixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDWixRQUE2RCxDQUM5RDtRQUNILENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFZLENBQ2pDLENBQUE7QUFDTCxDQUFDO0FBTUQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyx5QkFBOEQsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFDeEUsT0FBb0M7SUFFcEMsT0FBTyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDakUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixFQUFFLENBQUE7UUFFdkMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUE7UUFFcEQsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FDbkIsU0FBUyxDQUFDLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQ25ELENBQUE7WUFFRCxNQUFNLENBQ0osR0FBRyxFQUFFO2dCQUNILE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQTtnQkFDckQsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDYixnRkFBZ0Y7b0JBQ2hGLGtFQUFrRTtvQkFDbEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQTtnQkFDNUQsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsQ0FDYixDQUFBO1lBRUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FDekMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUNqQyxNQUFNLEVBQUUsRUFDUixTQUFTLENBQUMsYUFBYSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FDbkQsQ0FBQTtnQkFDRCxJQUFJLE1BQU0sRUFBRSxLQUFLLFVBQVUsRUFBRTtvQkFDM0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtpQkFDdkI7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1lBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUVqQyxPQUFPLE1BQU0sQ0FBQTtRQUNmLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgZWZmZWN0LCBpbmplY3QsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIHR5cGUgRGVmYXVsdEVycm9yLFxuICB0eXBlIE11dGF0aW9uLFxuICB0eXBlIE11dGF0aW9uQ2FjaGUsXG4gIHR5cGUgTXV0YXRpb25GaWx0ZXJzLFxuICB0eXBlIE11dGF0aW9uU3RhdGUsXG4gIG5vdGlmeU1hbmFnZXIsXG4gIHJlcGxhY2VFcXVhbERlZXAsXG59IGZyb20gJ0B0YW5zdGFjay9xdWVyeS1jb3JlJ1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICcuL3V0aWwvYXNzZXJ0LWluamVjdG9yL2Fzc2VydC1pbmplY3RvcidcbmltcG9ydCB7IGluamVjdFF1ZXJ5Q2xpZW50IH0gZnJvbSAnLi9pbmplY3QtcXVlcnktY2xpZW50J1xuaW1wb3J0IHsgbGF6eVNpZ25hbEluaXRpYWxpemVyIH0gZnJvbSAnLi91dGlsL2xhenktc2lnbmFsLWluaXRpYWxpemVyL2xhenktc2lnbmFsLWluaXRpYWxpemVyJ1xuaW1wb3J0IHR5cGUgeyBJbmplY3RvciwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxudHlwZSBNdXRhdGlvblN0YXRlT3B0aW9uczxUUmVzdWx0ID0gTXV0YXRpb25TdGF0ZT4gPSB7XG4gIGZpbHRlcnM/OiBNdXRhdGlvbkZpbHRlcnNcbiAgc2VsZWN0PzogKFxuICAgIG11dGF0aW9uOiBNdXRhdGlvbjx1bmtub3duLCBEZWZhdWx0RXJyb3IsIHVua25vd24sIHVua25vd24+LFxuICApID0+IFRSZXN1bHRcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0PFRSZXN1bHQgPSBNdXRhdGlvblN0YXRlPihcbiAgbXV0YXRpb25DYWNoZTogTXV0YXRpb25DYWNoZSxcbiAgb3B0aW9uczogTXV0YXRpb25TdGF0ZU9wdGlvbnM8VFJlc3VsdD4sXG4pOiBBcnJheTxUUmVzdWx0PiB7XG4gIHJldHVybiBtdXRhdGlvbkNhY2hlXG4gICAgLmZpbmRBbGwob3B0aW9ucy5maWx0ZXJzKVxuICAgIC5tYXAoXG4gICAgICAobXV0YXRpb24pOiBUUmVzdWx0ID0+XG4gICAgICAgIChvcHRpb25zLnNlbGVjdFxuICAgICAgICAgID8gb3B0aW9ucy5zZWxlY3QoXG4gICAgICAgICAgICAgIG11dGF0aW9uIGFzIE11dGF0aW9uPHVua25vd24sIERlZmF1bHRFcnJvciwgdW5rbm93biwgdW5rbm93bj4sXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBtdXRhdGlvbi5zdGF0ZSkgYXMgVFJlc3VsdCxcbiAgICApXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0TXV0YXRpb25TdGF0ZU9wdGlvbnMge1xuICBpbmplY3Rvcj86IEluamVjdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RNdXRhdGlvblN0YXRlPFRSZXN1bHQgPSBNdXRhdGlvblN0YXRlPihcbiAgbXV0YXRpb25TdGF0ZU9wdGlvbnNGbjogKCkgPT4gTXV0YXRpb25TdGF0ZU9wdGlvbnM8VFJlc3VsdD4gPSAoKSA9PiAoe30pLFxuICBvcHRpb25zPzogSW5qZWN0TXV0YXRpb25TdGF0ZU9wdGlvbnMsXG4pOiBTaWduYWw8QXJyYXk8VFJlc3VsdD4+IHtcbiAgcmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdE11dGF0aW9uU3RhdGUsIG9wdGlvbnM/LmluamVjdG9yLCAoKSA9PiB7XG4gICAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKVxuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gaW5qZWN0UXVlcnlDbGllbnQoKVxuXG4gICAgY29uc3QgbXV0YXRpb25DYWNoZSA9IHF1ZXJ5Q2xpZW50LmdldE11dGF0aW9uQ2FjaGUoKVxuXG4gICAgcmV0dXJuIGxhenlTaWduYWxJbml0aWFsaXplcigoaW5qZWN0b3IpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNpZ25hbDxBcnJheTxUUmVzdWx0Pj4oXG4gICAgICAgIGdldFJlc3VsdChtdXRhdGlvbkNhY2hlLCBtdXRhdGlvblN0YXRlT3B0aW9uc0ZuKCkpLFxuICAgICAgKVxuXG4gICAgICBlZmZlY3QoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtdXRhdGlvblN0YXRlT3B0aW9ucyA9IG11dGF0aW9uU3RhdGVPcHRpb25zRm4oKVxuICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBTZXR0aW5nIHRoZSBzaWduYWwgZnJvbSBhbiBlZmZlY3QgYmVjYXVzZSBpdCdzIGJvdGggJ2NvbXB1dGVkJyBmcm9tIG9wdGlvbnMoKVxuICAgICAgICAgICAgLy8gYW5kIG5lZWRzIHRvIGJlIHNldCBpbXBlcmF0aXZlbHkgaW4gdGhlIG11dGF0aW9uQ2FjaGUgbGlzdGVuZXIuXG4gICAgICAgICAgICByZXN1bHQuc2V0KGdldFJlc3VsdChtdXRhdGlvbkNhY2hlLCBtdXRhdGlvblN0YXRlT3B0aW9ucykpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbmplY3RvciB9LFxuICAgICAgKVxuXG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG11dGF0aW9uQ2FjaGUuc3Vic2NyaWJlKFxuICAgICAgICBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHRSZXN1bHQgPSByZXBsYWNlRXF1YWxEZWVwKFxuICAgICAgICAgICAgcmVzdWx0KCksXG4gICAgICAgICAgICBnZXRSZXN1bHQobXV0YXRpb25DYWNoZSwgbXV0YXRpb25TdGF0ZU9wdGlvbnNGbigpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJlc3VsdCgpICE9PSBuZXh0UmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQuc2V0KG5leHRSZXN1bHQpXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgIClcblxuICAgICAgZGVzdHJveVJlZi5vbkRlc3Ryb3kodW5zdWJzY3JpYmUpXG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9KVxuICB9KVxufVxuIl19
|
|
@@ -1,29 +1,33 @@
|
|
|
1
|
-
import { DestroyRef, computed, effect, inject, signal } from '@angular/core';
|
|
1
|
+
import { DestroyRef, Injector, 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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
return lazyInit(() => runInInjectionContext(currentInjector, () => {
|
|
14
|
+
const observer = new MutationObserver(queryClient, options(queryClient));
|
|
15
|
+
const mutate = (variables, mutateOptions) => {
|
|
16
|
+
observer.mutate(variables, mutateOptions).catch(noop);
|
|
17
|
+
};
|
|
18
|
+
effect(() => {
|
|
19
|
+
observer.setOptions(options(queryClient));
|
|
20
|
+
});
|
|
21
|
+
const result = signal(observer.getCurrentResult());
|
|
22
|
+
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => result.set(val)));
|
|
23
|
+
destroyRef.onDestroy(unsubscribe);
|
|
24
|
+
const resultSignal = computed(() => ({
|
|
25
|
+
...result(),
|
|
26
|
+
mutate,
|
|
27
|
+
mutateAsync: result().mutate,
|
|
28
|
+
}));
|
|
29
|
+
return signalProxy(resultSignal);
|
|
25
30
|
}));
|
|
26
|
-
return signalProxy(resultSignal);
|
|
27
31
|
});
|
|
28
32
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0LW11dGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luamVjdC1tdXRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDdkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFFN0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBUXJELE1BQU0sVUFBVSxjQUFjLENBTTVCLE9BRStELEVBQy9ELFFBQW1CO0lBRW5CLE9BQU8sY0FBYyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixFQUFFLENBQUE7UUFDdkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVyQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FDbkIscUJBQXFCLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUtuQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7WUFDcEMsTUFBTSxNQUFNLEdBS1IsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEVBQUU7Z0JBQy9CLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN2RCxDQUFDLENBQUE7WUFFRCxNQUFNLENBQUMsR0FBRyxFQUFFO2dCQUNWLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUE7WUFDM0MsQ0FBQyxDQUFDLENBQUE7WUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQTtZQUVsRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUNwQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ25ELENBQUE7WUFFRCxVQUFVLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBRWpDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxHQUFHLE1BQU0sRUFBRTtnQkFDWCxNQUFNO2dCQUNOLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxNQUFNO2FBQzdCLENBQUMsQ0FBQyxDQUFBO1lBRUgsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUs5QixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIEluamVjdG9yLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTXV0YXRpb25PYnNlcnZlciwgbm90aWZ5TWFuYWdlciB9IGZyb20gJ0B0YW5zdGFjay9xdWVyeS1jb3JlJ1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICcuL3V0aWwvYXNzZXJ0LWluamVjdG9yL2Fzc2VydC1pbmplY3RvcidcbmltcG9ydCB7IHNpZ25hbFByb3h5IH0gZnJvbSAnLi9zaWduYWwtcHJveHknXG5pbXBvcnQgeyBpbmplY3RRdWVyeUNsaWVudCB9IGZyb20gJy4vaW5qZWN0LXF1ZXJ5LWNsaWVudCdcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL3V0aWwnXG5cbmltcG9ydCB7IGxhenlJbml0IH0gZnJvbSAnLi91dGlsL2xhenktaW5pdC9sYXp5LWluaXQnXG5pbXBvcnQgdHlwZSB7IERlZmF1bHRFcnJvciwgUXVlcnlDbGllbnQgfSBmcm9tICdAdGFuc3RhY2svcXVlcnktY29yZSdcbmltcG9ydCB0eXBlIHtcbiAgQ3JlYXRlTXV0YXRlRnVuY3Rpb24sXG4gIENyZWF0ZU11dGF0aW9uT3B0aW9ucyxcbiAgQ3JlYXRlTXV0YXRpb25SZXN1bHQsXG59IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RNdXRhdGlvbjxcbiAgVERhdGEgPSB1bmtub3duLFxuICBURXJyb3IgPSBEZWZhdWx0RXJyb3IsXG4gIFRWYXJpYWJsZXMgPSB2b2lkLFxuICBUQ29udGV4dCA9IHVua25vd24sXG4+KFxuICBvcHRpb25zOiAoXG4gICAgY2xpZW50OiBRdWVyeUNsaWVudCxcbiAgKSA9PiBDcmVhdGVNdXRhdGlvbk9wdGlvbnM8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+LFxuICBpbmplY3Rvcj86IEluamVjdG9yLFxuKTogQ3JlYXRlTXV0YXRpb25SZXN1bHQ8VERhdGEsIFRFcnJvciwgVFZhcmlhYmxlcywgVENvbnRleHQ+IHtcbiAgcmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdE11dGF0aW9uLCBpbmplY3RvciwgKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gaW5qZWN0UXVlcnlDbGllbnQoKVxuICAgIGNvbnN0IGN1cnJlbnRJbmplY3RvciA9IGluamVjdChJbmplY3RvcilcbiAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpXG5cbiAgICByZXR1cm4gbGF6eUluaXQoKCkgPT5cbiAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChjdXJyZW50SW5qZWN0b3IsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcjxcbiAgICAgICAgICBURGF0YSxcbiAgICAgICAgICBURXJyb3IsXG4gICAgICAgICAgVFZhcmlhYmxlcyxcbiAgICAgICAgICBUQ29udGV4dFxuICAgICAgICA+KHF1ZXJ5Q2xpZW50LCBvcHRpb25zKHF1ZXJ5Q2xpZW50KSlcbiAgICAgICAgY29uc3QgbXV0YXRlOiBDcmVhdGVNdXRhdGVGdW5jdGlvbjxcbiAgICAgICAgICBURGF0YSxcbiAgICAgICAgICBURXJyb3IsXG4gICAgICAgICAgVFZhcmlhYmxlcyxcbiAgICAgICAgICBUQ29udGV4dFxuICAgICAgICA+ID0gKHZhcmlhYmxlcywgbXV0YXRlT3B0aW9ucykgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLm11dGF0ZSh2YXJpYWJsZXMsIG11dGF0ZU9wdGlvbnMpLmNhdGNoKG5vb3ApXG4gICAgICAgIH1cblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgIG9ic2VydmVyLnNldE9wdGlvbnMob3B0aW9ucyhxdWVyeUNsaWVudCkpXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gc2lnbmFsKG9ic2VydmVyLmdldEN1cnJlbnRSZXN1bHQoKSlcblxuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG9ic2VydmVyLnN1YnNjcmliZShcbiAgICAgICAgICBub3RpZnlNYW5hZ2VyLmJhdGNoQ2FsbHMoKHZhbCkgPT4gcmVzdWx0LnNldCh2YWwpKSxcbiAgICAgICAgKVxuXG4gICAgICAgIGRlc3Ryb3lSZWYub25EZXN0cm95KHVuc3Vic2NyaWJlKVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgICAgICAgLi4ucmVzdWx0KCksXG4gICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgIG11dGF0ZUFzeW5jOiByZXN1bHQoKS5tdXRhdGUsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIHJldHVybiBzaWduYWxQcm94eShyZXN1bHRTaWduYWwpIGFzIHVua25vd24gYXMgQ3JlYXRlTXV0YXRpb25SZXN1bHQ8XG4gICAgICAgICAgVERhdGEsXG4gICAgICAgICAgVEVycm9yLFxuICAgICAgICAgIFRWYXJpYWJsZXMsXG4gICAgICAgICAgVENvbnRleHRcbiAgICAgICAgPlxuICAgICAgfSksXG4gICAgKVxuICB9KVxufVxuIl19
|
|
@@ -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==
|
|
@@ -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());
|
|
@@ -102,8 +102,7 @@ function createBaseQuery(options, Observer, queryClient) {
|
|
|
102
102
|
});
|
|
103
103
|
const observer = new Observer(queryClient, defaultedOptionsSignal());
|
|
104
104
|
const resultSignal = signal(observer.getOptimisticResult(defaultedOptionsSignal()));
|
|
105
|
-
|
|
106
|
-
untracked(() => effect(() => {
|
|
105
|
+
effect(() => {
|
|
107
106
|
const defaultedOptions = defaultedOptionsSignal();
|
|
108
107
|
observer.setOptions(defaultedOptions, {
|
|
109
108
|
// Do not notify on updates because of changes in the options because
|
|
@@ -113,7 +112,7 @@ function createBaseQuery(options, Observer, queryClient) {
|
|
|
113
112
|
untracked(() => {
|
|
114
113
|
resultSignal.set(observer.getOptimisticResult(defaultedOptions));
|
|
115
114
|
});
|
|
116
|
-
})
|
|
115
|
+
});
|
|
117
116
|
// observer.trackResult is not used as this optimization is not needed for Angular
|
|
118
117
|
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => resultSignal.set(val)));
|
|
119
118
|
destroyRef.onDestroy(unsubscribe);
|
|
@@ -257,26 +256,42 @@ function noop() { }
|
|
|
257
256
|
function injectMutation(options, injector) {
|
|
258
257
|
return assertInjector(injectMutation, injector, () => {
|
|
259
258
|
const queryClient = injectQueryClient();
|
|
259
|
+
const currentInjector = inject(Injector);
|
|
260
260
|
const destroyRef = inject(DestroyRef);
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
261
|
+
return lazyInit(() => runInInjectionContext(currentInjector, () => {
|
|
262
|
+
const observer = new MutationObserver(queryClient, options(queryClient));
|
|
263
|
+
const mutate = (variables, mutateOptions) => {
|
|
264
|
+
observer.mutate(variables, mutateOptions).catch(noop);
|
|
265
|
+
};
|
|
266
|
+
effect(() => {
|
|
267
|
+
observer.setOptions(options(queryClient));
|
|
268
|
+
});
|
|
269
|
+
const result = signal(observer.getCurrentResult());
|
|
270
|
+
const unsubscribe = observer.subscribe(notifyManager.batchCalls((val) => result.set(val)));
|
|
271
|
+
destroyRef.onDestroy(unsubscribe);
|
|
272
|
+
const resultSignal = computed(() => ({
|
|
273
|
+
...result(),
|
|
274
|
+
mutate,
|
|
275
|
+
mutateAsync: result().mutate,
|
|
276
|
+
}));
|
|
277
|
+
return signalProxy(resultSignal);
|
|
275
278
|
}));
|
|
276
|
-
return signalProxy(resultSignal);
|
|
277
279
|
});
|
|
278
280
|
}
|
|
279
281
|
|
|
282
|
+
function lazySignalInitializer(initializerFn) {
|
|
283
|
+
const injector = inject(Injector);
|
|
284
|
+
let source = null;
|
|
285
|
+
const unwrapSignal = () => {
|
|
286
|
+
if (!source) {
|
|
287
|
+
source = untracked(() => initializerFn(injector));
|
|
288
|
+
}
|
|
289
|
+
return source();
|
|
290
|
+
};
|
|
291
|
+
queueMicrotask(() => unwrapSignal());
|
|
292
|
+
return computed(unwrapSignal);
|
|
293
|
+
}
|
|
294
|
+
|
|
280
295
|
function getResult(mutationCache, options) {
|
|
281
296
|
return mutationCache
|
|
282
297
|
.findAll(options.filters)
|
|
@@ -289,23 +304,25 @@ function injectMutationState(mutationStateOptionsFn = () => ({}), options) {
|
|
|
289
304
|
const destroyRef = inject(DestroyRef);
|
|
290
305
|
const queryClient = injectQueryClient();
|
|
291
306
|
const mutationCache = queryClient.getMutationCache();
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
307
|
+
return lazySignalInitializer((injector) => {
|
|
308
|
+
const result = signal(getResult(mutationCache, mutationStateOptionsFn()));
|
|
309
|
+
effect(() => {
|
|
310
|
+
const mutationStateOptions = mutationStateOptionsFn();
|
|
311
|
+
untracked(() => {
|
|
312
|
+
// Setting the signal from an effect because it's both 'computed' from options()
|
|
313
|
+
// and needs to be set imperatively in the mutationCache listener.
|
|
314
|
+
result.set(getResult(mutationCache, mutationStateOptions));
|
|
315
|
+
});
|
|
316
|
+
}, { injector });
|
|
317
|
+
const unsubscribe = mutationCache.subscribe(notifyManager.batchCalls(() => {
|
|
318
|
+
const nextResult = replaceEqualDeep(result(), getResult(mutationCache, mutationStateOptionsFn()));
|
|
319
|
+
if (result() !== nextResult) {
|
|
320
|
+
result.set(nextResult);
|
|
321
|
+
}
|
|
322
|
+
}));
|
|
323
|
+
destroyRef.onDestroy(unsubscribe);
|
|
324
|
+
return result;
|
|
300
325
|
});
|
|
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
326
|
});
|
|
310
327
|
}
|
|
311
328
|
|