reactjrx 1.105.1 → 1.107.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/dist/index.cjs
CHANGED
|
@@ -71,6 +71,9 @@ function useObserve(source$, optionsOrDeps, maybeDeps) {
|
|
|
71
71
|
);
|
|
72
72
|
const sourceRef = useLiveRef(source$);
|
|
73
73
|
const optionsRef = useLiveRef(options);
|
|
74
|
+
const getSnapshot = React.useCallback(() => {
|
|
75
|
+
return valueRef.current;
|
|
76
|
+
}, []);
|
|
74
77
|
const subscribe = React.useCallback(
|
|
75
78
|
(next) => {
|
|
76
79
|
const source = sourceRef.current;
|
|
@@ -100,10 +103,7 @@ function useObserve(source$, optionsOrDeps, maybeDeps) {
|
|
|
100
103
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
101
104
|
[...deps]
|
|
102
105
|
);
|
|
103
|
-
const
|
|
104
|
-
return valueRef.current;
|
|
105
|
-
}, []);
|
|
106
|
-
const result = React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
106
|
+
const result = React.useSyncExternalStore(subscribe, getSnapshot);
|
|
107
107
|
return result;
|
|
108
108
|
}
|
|
109
109
|
function useSubscribe(source, deps = []) {
|
|
@@ -161,9 +161,8 @@ const useSubject = ({
|
|
|
161
161
|
}, [completeOnUnmountRef, onBeforeCompleteRef, subject]);
|
|
162
162
|
return subject;
|
|
163
163
|
};
|
|
164
|
-
const
|
|
164
|
+
const useObservableCallback = () => {
|
|
165
165
|
const subject = useSubject();
|
|
166
|
-
const event$ = useLiveRef(subject.current.asObservable());
|
|
167
166
|
const trigger = React.useCallback(
|
|
168
167
|
(arg) => {
|
|
169
168
|
subject.current.next(arg);
|
|
@@ -171,7 +170,7 @@ const useObserveCallback = () => {
|
|
|
171
170
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
172
171
|
[]
|
|
173
172
|
);
|
|
174
|
-
return [
|
|
173
|
+
return [subject.current, trigger];
|
|
175
174
|
};
|
|
176
175
|
const useBehaviorSubject = (state) => {
|
|
177
176
|
const subject = useConstant(() => new rxjs.BehaviorSubject(state));
|
|
@@ -709,13 +708,20 @@ function useQuery$(options, queryClient) {
|
|
|
709
708
|
return result;
|
|
710
709
|
}
|
|
711
710
|
function useMutation$(options, queryClient) {
|
|
711
|
+
const stateSubject = useBehaviorSubject({
|
|
712
|
+
status: "idle",
|
|
713
|
+
isPending: false,
|
|
714
|
+
isError: false,
|
|
715
|
+
isSuccess: false,
|
|
716
|
+
isIdle: true
|
|
717
|
+
});
|
|
712
718
|
const mutationFnAsync = (variables) => {
|
|
713
719
|
let lastData;
|
|
714
720
|
return new Promise((resolve, reject) => {
|
|
715
721
|
const source = typeof options.mutationFn === "function" ? options.mutationFn(variables) : options.mutationFn;
|
|
716
722
|
source.pipe(rxjs.take(1)).subscribe({
|
|
717
723
|
next: (data) => {
|
|
718
|
-
lastData = data;
|
|
724
|
+
lastData = { value: data };
|
|
719
725
|
},
|
|
720
726
|
error: (error) => {
|
|
721
727
|
reject(error);
|
|
@@ -723,7 +729,7 @@ function useMutation$(options, queryClient) {
|
|
|
723
729
|
complete: () => {
|
|
724
730
|
if (lastData === void 0)
|
|
725
731
|
return reject(new Error("Stream completed without any data"));
|
|
726
|
-
resolve(lastData);
|
|
732
|
+
resolve(lastData.value);
|
|
727
733
|
}
|
|
728
734
|
});
|
|
729
735
|
});
|
|
@@ -735,7 +741,11 @@ function useMutation$(options, queryClient) {
|
|
|
735
741
|
},
|
|
736
742
|
queryClient
|
|
737
743
|
);
|
|
738
|
-
|
|
744
|
+
const { status, isPending, isError, isSuccess, isIdle } = result;
|
|
745
|
+
React.useEffect(() => {
|
|
746
|
+
stateSubject.current.next({ status, isPending, isError, isSuccess, isIdle });
|
|
747
|
+
}, [status, isPending, isError, isSuccess, isIdle, stateSubject]);
|
|
748
|
+
return { ...result, state$: stateSubject.current };
|
|
739
749
|
}
|
|
740
750
|
function hasObjectPrototype(o) {
|
|
741
751
|
return Object.prototype.toString.call(o) === "[object Object]";
|
|
@@ -3506,9 +3516,9 @@ exports.useLiveRef = useLiveRef;
|
|
|
3506
3516
|
exports.useMount = useMount;
|
|
3507
3517
|
exports.useMutation = useMutation;
|
|
3508
3518
|
exports.useMutation$ = useMutation$;
|
|
3519
|
+
exports.useObservableCallback = useObservableCallback;
|
|
3509
3520
|
exports.useObservableState = useObservableState;
|
|
3510
3521
|
exports.useObserve = useObserve;
|
|
3511
|
-
exports.useObserveCallback = useObserveCallback;
|
|
3512
3522
|
exports.usePersistSignals = usePersistSignals;
|
|
3513
3523
|
exports.useQuery = useQuery;
|
|
3514
3524
|
exports.useQuery$ = useQuery$;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from './lib/binding/useObserve';
|
|
2
2
|
export * from './lib/binding/useSubscribe';
|
|
3
|
-
export * from './lib/binding/
|
|
3
|
+
export * from './lib/binding/useObservableCallback';
|
|
4
4
|
export * from './lib/binding/useObservableState';
|
|
5
5
|
export * from './lib/binding/useSubject';
|
|
6
6
|
export * from './lib/binding/useBehaviorSubject';
|
package/dist/index.js
CHANGED
|
@@ -53,6 +53,9 @@ function useObserve(source$, optionsOrDeps, maybeDeps) {
|
|
|
53
53
|
);
|
|
54
54
|
const sourceRef = useLiveRef(source$);
|
|
55
55
|
const optionsRef = useLiveRef(options);
|
|
56
|
+
const getSnapshot = useCallback(() => {
|
|
57
|
+
return valueRef.current;
|
|
58
|
+
}, []);
|
|
56
59
|
const subscribe = useCallback(
|
|
57
60
|
(next) => {
|
|
58
61
|
const source = sourceRef.current;
|
|
@@ -82,10 +85,7 @@ function useObserve(source$, optionsOrDeps, maybeDeps) {
|
|
|
82
85
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
83
86
|
[...deps]
|
|
84
87
|
);
|
|
85
|
-
const
|
|
86
|
-
return valueRef.current;
|
|
87
|
-
}, []);
|
|
88
|
-
const result = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
88
|
+
const result = useSyncExternalStore(subscribe, getSnapshot);
|
|
89
89
|
return result;
|
|
90
90
|
}
|
|
91
91
|
function useSubscribe(source, deps = []) {
|
|
@@ -143,9 +143,8 @@ const useSubject = ({
|
|
|
143
143
|
}, [completeOnUnmountRef, onBeforeCompleteRef, subject]);
|
|
144
144
|
return subject;
|
|
145
145
|
};
|
|
146
|
-
const
|
|
146
|
+
const useObservableCallback = () => {
|
|
147
147
|
const subject = useSubject();
|
|
148
|
-
const event$ = useLiveRef(subject.current.asObservable());
|
|
149
148
|
const trigger = useCallback(
|
|
150
149
|
(arg) => {
|
|
151
150
|
subject.current.next(arg);
|
|
@@ -153,7 +152,7 @@ const useObserveCallback = () => {
|
|
|
153
152
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
154
153
|
[]
|
|
155
154
|
);
|
|
156
|
-
return [
|
|
155
|
+
return [subject.current, trigger];
|
|
157
156
|
};
|
|
158
157
|
const useBehaviorSubject = (state) => {
|
|
159
158
|
const subject = useConstant(() => new BehaviorSubject(state));
|
|
@@ -691,13 +690,20 @@ function useQuery$(options, queryClient) {
|
|
|
691
690
|
return result;
|
|
692
691
|
}
|
|
693
692
|
function useMutation$(options, queryClient) {
|
|
693
|
+
const stateSubject = useBehaviorSubject({
|
|
694
|
+
status: "idle",
|
|
695
|
+
isPending: false,
|
|
696
|
+
isError: false,
|
|
697
|
+
isSuccess: false,
|
|
698
|
+
isIdle: true
|
|
699
|
+
});
|
|
694
700
|
const mutationFnAsync = (variables) => {
|
|
695
701
|
let lastData;
|
|
696
702
|
return new Promise((resolve, reject) => {
|
|
697
703
|
const source = typeof options.mutationFn === "function" ? options.mutationFn(variables) : options.mutationFn;
|
|
698
704
|
source.pipe(take(1)).subscribe({
|
|
699
705
|
next: (data) => {
|
|
700
|
-
lastData = data;
|
|
706
|
+
lastData = { value: data };
|
|
701
707
|
},
|
|
702
708
|
error: (error) => {
|
|
703
709
|
reject(error);
|
|
@@ -705,7 +711,7 @@ function useMutation$(options, queryClient) {
|
|
|
705
711
|
complete: () => {
|
|
706
712
|
if (lastData === void 0)
|
|
707
713
|
return reject(new Error("Stream completed without any data"));
|
|
708
|
-
resolve(lastData);
|
|
714
|
+
resolve(lastData.value);
|
|
709
715
|
}
|
|
710
716
|
});
|
|
711
717
|
});
|
|
@@ -717,7 +723,11 @@ function useMutation$(options, queryClient) {
|
|
|
717
723
|
},
|
|
718
724
|
queryClient
|
|
719
725
|
);
|
|
720
|
-
|
|
726
|
+
const { status, isPending, isError, isSuccess, isIdle } = result;
|
|
727
|
+
useEffect(() => {
|
|
728
|
+
stateSubject.current.next({ status, isPending, isError, isSuccess, isIdle });
|
|
729
|
+
}, [status, isPending, isError, isSuccess, isIdle, stateSubject]);
|
|
730
|
+
return { ...result, state$: stateSubject.current };
|
|
721
731
|
}
|
|
722
732
|
function hasObjectPrototype(o) {
|
|
723
733
|
return Object.prototype.toString.call(o) === "[object Object]";
|
|
@@ -3489,9 +3499,9 @@ export {
|
|
|
3489
3499
|
useMount,
|
|
3490
3500
|
useMutation,
|
|
3491
3501
|
useMutation$,
|
|
3502
|
+
useObservableCallback,
|
|
3492
3503
|
useObservableState,
|
|
3493
3504
|
useObserve,
|
|
3494
|
-
useObserveCallback,
|
|
3495
3505
|
usePersistSignals,
|
|
3496
3506
|
useQuery,
|
|
3497
3507
|
useQuery$,
|
|
@@ -1,5 +1,77 @@
|
|
|
1
|
-
import { DefaultError, QueryClient, UseMutationOptions } from '@tanstack/react-query';
|
|
1
|
+
import { DefaultError, QueryClient, UseMutationOptions, UseMutationResult } from '@tanstack/react-query';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
3
|
export declare function useMutation$<TData = unknown, TError = DefaultError, TVariables = void, TContext = unknown>(options: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, "mutationFn"> & {
|
|
4
4
|
mutationFn: ((variables: TVariables) => Observable<TData>) | Observable<TData>;
|
|
5
|
-
}, queryClient?: QueryClient):
|
|
5
|
+
}, queryClient?: QueryClient): {
|
|
6
|
+
state$: import('rxjs').BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
|
|
7
|
+
data: undefined;
|
|
8
|
+
variables: undefined;
|
|
9
|
+
error: null;
|
|
10
|
+
isError: false;
|
|
11
|
+
isIdle: true;
|
|
12
|
+
isPending: false;
|
|
13
|
+
isSuccess: false;
|
|
14
|
+
status: "idle";
|
|
15
|
+
mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
|
|
16
|
+
reset: () => void;
|
|
17
|
+
context: TContext | undefined;
|
|
18
|
+
failureCount: number;
|
|
19
|
+
failureReason: TError | null;
|
|
20
|
+
isPaused: boolean;
|
|
21
|
+
submittedAt: number;
|
|
22
|
+
mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
|
|
23
|
+
} | {
|
|
24
|
+
state$: import('rxjs').BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
|
|
25
|
+
data: undefined;
|
|
26
|
+
variables: TVariables;
|
|
27
|
+
error: null;
|
|
28
|
+
isError: false;
|
|
29
|
+
isIdle: false;
|
|
30
|
+
isPending: true;
|
|
31
|
+
isSuccess: false;
|
|
32
|
+
status: "pending";
|
|
33
|
+
mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
|
|
34
|
+
reset: () => void;
|
|
35
|
+
context: TContext | undefined;
|
|
36
|
+
failureCount: number;
|
|
37
|
+
failureReason: TError | null;
|
|
38
|
+
isPaused: boolean;
|
|
39
|
+
submittedAt: number;
|
|
40
|
+
mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
|
|
41
|
+
} | {
|
|
42
|
+
state$: import('rxjs').BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
|
|
43
|
+
data: undefined;
|
|
44
|
+
error: TError;
|
|
45
|
+
variables: TVariables;
|
|
46
|
+
isError: true;
|
|
47
|
+
isIdle: false;
|
|
48
|
+
isPending: false;
|
|
49
|
+
isSuccess: false;
|
|
50
|
+
status: "error";
|
|
51
|
+
mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
|
|
52
|
+
reset: () => void;
|
|
53
|
+
context: TContext | undefined;
|
|
54
|
+
failureCount: number;
|
|
55
|
+
failureReason: TError | null;
|
|
56
|
+
isPaused: boolean;
|
|
57
|
+
submittedAt: number;
|
|
58
|
+
mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
|
|
59
|
+
} | {
|
|
60
|
+
state$: import('rxjs').BehaviorSubject<Pick<UseMutationResult<TData, TError, TVariables, TContext>, "status" | "isPending" | "isError" | "isSuccess" | "isIdle">>;
|
|
61
|
+
data: TData;
|
|
62
|
+
error: null;
|
|
63
|
+
variables: TVariables;
|
|
64
|
+
isError: false;
|
|
65
|
+
isIdle: false;
|
|
66
|
+
isPending: false;
|
|
67
|
+
isSuccess: true;
|
|
68
|
+
status: "success";
|
|
69
|
+
mutate: import('@tanstack/react-query').UseMutateFunction<TData, TError, TVariables, TContext>;
|
|
70
|
+
reset: () => void;
|
|
71
|
+
context: TContext | undefined;
|
|
72
|
+
failureCount: number;
|
|
73
|
+
failureReason: TError | null;
|
|
74
|
+
isPaused: boolean;
|
|
75
|
+
submittedAt: number;
|
|
76
|
+
mutateAsync: import('@tanstack/react-query').UseMutateAsyncFunction<TData, TError, TVariables, TContext>;
|
|
77
|
+
};
|
package/package.json
CHANGED