@umituz/react-native-tanstack 1.2.10 → 1.2.12
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/react-native-tanstack",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.12",
|
|
4
4
|
"description": "TanStack Query configuration and utilities for React Native apps - Pre-configured QueryClient with AsyncStorage persistence",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -3,29 +3,32 @@
|
|
|
3
3
|
* Presentation layer - Optimistic update helper
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { useMutation, useQueryClient
|
|
6
|
+
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Optimistic update configuration
|
|
10
10
|
*/
|
|
11
|
-
export interface OptimisticUpdateConfig<TData, TVariables> {
|
|
11
|
+
export interface OptimisticUpdateConfig<TData, TVariables, TError = Error> {
|
|
12
12
|
queryKey: readonly unknown[];
|
|
13
13
|
updater: (oldData: TData | undefined, variables: TVariables) => TData;
|
|
14
14
|
invalidateOnSuccess?: boolean;
|
|
15
|
+
mutationFn: (variables: TVariables) => Promise<TData>;
|
|
16
|
+
onError?: (error: TError, variables: TVariables, context: unknown) => void;
|
|
17
|
+
onSettled?: (data: TData | undefined, error: TError | null, variables: TVariables, context: unknown) => void;
|
|
18
|
+
onSuccess?: (data: TData, variables: TVariables, context: unknown) => void;
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
/**
|
|
18
22
|
* Hook for mutations with optimistic updates and automatic rollback
|
|
19
23
|
*/
|
|
20
24
|
export function useOptimisticUpdate<TData = unknown, TVariables = unknown, TError = Error>(
|
|
21
|
-
config: OptimisticUpdateConfig<TData, TVariables
|
|
22
|
-
MutationOptions<TData, TError, TVariables>,
|
|
25
|
+
config: OptimisticUpdateConfig<TData, TVariables, TError>,
|
|
23
26
|
) {
|
|
24
27
|
const queryClient = useQueryClient();
|
|
25
|
-
const { queryKey, updater, invalidateOnSuccess = true, onError, onSettled,
|
|
28
|
+
const { queryKey, updater, invalidateOnSuccess = true, onError, onSettled, onSuccess, mutationFn } = config;
|
|
26
29
|
|
|
27
30
|
return useMutation({
|
|
28
|
-
|
|
31
|
+
mutationFn,
|
|
29
32
|
onMutate: async (variables: TVariables) => {
|
|
30
33
|
await queryClient.cancelQueries({ queryKey });
|
|
31
34
|
const previousData = queryClient.getQueryData<TData>(queryKey);
|
|
@@ -42,10 +45,11 @@ export function useOptimisticUpdate<TData = unknown, TVariables = unknown, TErro
|
|
|
42
45
|
|
|
43
46
|
return { previousData };
|
|
44
47
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
48
|
+
onError: (error: TError, variables: TVariables, context: unknown) => {
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
const ctx = context as any;
|
|
51
|
+
if (ctx?.previousData !== undefined) {
|
|
52
|
+
queryClient.setQueryData(queryKey, ctx.previousData);
|
|
49
53
|
|
|
50
54
|
if (__DEV__) {
|
|
51
55
|
// eslint-disable-next-line no-console
|
|
@@ -57,8 +61,12 @@ export function useOptimisticUpdate<TData = unknown, TVariables = unknown, TErro
|
|
|
57
61
|
onError(error, variables, context);
|
|
58
62
|
}
|
|
59
63
|
},
|
|
60
|
-
|
|
61
|
-
|
|
64
|
+
onSuccess: (data: TData, variables: TVariables, context: unknown) => {
|
|
65
|
+
if (onSuccess) {
|
|
66
|
+
onSuccess(data, variables, context);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
onSettled: (data: TData | undefined, error: TError | null, variables: TVariables, context: unknown) => {
|
|
62
70
|
if (invalidateOnSuccess && !error) {
|
|
63
71
|
queryClient.invalidateQueries({ queryKey });
|
|
64
72
|
}
|
|
@@ -74,8 +82,7 @@ export function useOptimisticUpdate<TData = unknown, TVariables = unknown, TErro
|
|
|
74
82
|
* Hook for list mutations with optimistic updates
|
|
75
83
|
*/
|
|
76
84
|
export function useOptimisticListUpdate<TData extends unknown[], TVariables = unknown>(
|
|
77
|
-
config: OptimisticUpdateConfig<TData, TVariables
|
|
78
|
-
MutationOptions<TData, Error, TVariables>,
|
|
85
|
+
config: OptimisticUpdateConfig<TData, TVariables, Error>,
|
|
79
86
|
) {
|
|
80
|
-
return useOptimisticUpdate<TData, TVariables>(config);
|
|
87
|
+
return useOptimisticUpdate<TData, TVariables, Error>(config);
|
|
81
88
|
}
|
|
@@ -51,6 +51,8 @@ export interface CursorPaginationOptions<TData> {
|
|
|
51
51
|
enabled?: boolean;
|
|
52
52
|
staleTime?: number;
|
|
53
53
|
gcTime?: number;
|
|
54
|
+
refetchOnMount?: boolean | 'always';
|
|
55
|
+
refetchOnWindowFocus?: boolean | 'always';
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
/**
|
|
@@ -90,6 +92,8 @@ export interface OffsetPaginationOptions<TData> {
|
|
|
90
92
|
enabled?: boolean;
|
|
91
93
|
staleTime?: number;
|
|
92
94
|
gcTime?: number;
|
|
95
|
+
refetchOnMount?: boolean | 'always';
|
|
96
|
+
refetchOnWindowFocus?: boolean | 'always';
|
|
93
97
|
}
|
|
94
98
|
|
|
95
99
|
/**
|