@umituz/react-native-tanstack 1.2.10 → 1.2.11

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.10",
3
+ "version": "1.2.11",
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, type MutationOptions } from '@tanstack/react-query';
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, ...mutationOptions } = config;
28
+ const { queryKey, updater, invalidateOnSuccess = true, onError, onSettled, onSuccess, mutationFn } = config;
26
29
 
27
30
  return useMutation({
28
- ...mutationOptions,
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
- onError: (error: TError, variables: TVariables, context: any) => {
47
- if (context?.previousData !== undefined) {
48
- queryClient.setQueryData(queryKey, context.previousData);
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
- onSettled: (data: TData | undefined, error: TError | null, variables: TVariables, context: any) => {
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
  }