88 duplicateTask ,
99 moveTask ,
1010} from '../services/taskService' ;
11- import { useTaskStore } from '../store/taskStore' ;
1211import { TaskProps } from '@shared/types/task.types' ;
1312
1413export const useTasks = ( listId ?: string ) => {
@@ -31,7 +30,8 @@ export const useCreateTask = () => {
3130 return useMutation ( {
3231 mutationFn : createTask ,
3332 onMutate : ( variables ) => {
34- const previous = [ ...useTaskStore . getState ( ) . tasks ] ;
33+ const queryKey = [ 'tasks' , variables . list_id ] ;
34+ const previous = queryClient . getQueryData < TaskProps [ ] > ( queryKey ) ;
3535 const newTask : TaskProps = {
3636 id : variables . id ,
3737 list_id : variables . list_id ,
@@ -41,11 +41,11 @@ export const useCreateTask = () => {
4141 date : variables . date ,
4242 position : variables . position ,
4343 } ;
44- useTaskStore . getState ( ) . addTask ( newTask ) ;
44+ queryClient . setQueryData < TaskProps [ ] > ( queryKey , [ newTask , ... ( previous ?? [ ] ) ] ) ;
4545 return { previous } ;
4646 } ,
47- onError : ( _err , _vars , context ) => {
48- if ( context ?. previous ) useTaskStore . getState ( ) . setTasks ( context . previous ) ;
47+ onError : ( _err , variables , context ) => {
48+ queryClient . setQueryData ( [ 'tasks' , variables . list_id ] , context ? .previous ) ;
4949 } ,
5050 onSettled : ( _data , _error , variables ) => {
5151 queryClient . invalidateQueries ( { queryKey : [ 'tasks' , variables . list_id ] } ) ;
@@ -59,14 +59,18 @@ export const useUpdateTask = () => {
5959 return useMutation ( {
6060 mutationFn : updateTask ,
6161 onMutate : ( { taskId, body } ) => {
62- const previous = [ ...useTaskStore . getState ( ) . tasks ] ;
63- useTaskStore . getState ( ) . setTasks (
64- previous . map ( ( task ) => ( task . id === taskId ? { ...task , ...body } : task ) )
65- ) ;
66- return { previous } ;
62+ const allCaches = queryClient . getQueriesData < TaskProps [ ] > ( { queryKey : [ 'tasks' ] } ) ;
63+ for ( const [ queryKey , tasks ] of allCaches ) {
64+ if ( ! tasks ?. some ( ( t ) => t . id === taskId ) ) continue ;
65+ queryClient . setQueryData < TaskProps [ ] > (
66+ queryKey ,
67+ tasks . map ( ( t ) => ( t . id === taskId ? { ...t , ...body } : t ) )
68+ ) ;
69+ return { queryKey, previous : tasks } ;
70+ }
6771 } ,
6872 onError : ( _err , _vars , context ) => {
69- if ( context ?. previous ) useTaskStore . getState ( ) . setTasks ( context . previous ) ;
73+ if ( context ) queryClient . setQueryData ( context . queryKey , context . previous ) ;
7074 } ,
7175 onSettled : ( ) => {
7276 queryClient . invalidateQueries ( { queryKey : [ 'tasks' ] } ) ;
@@ -80,12 +84,18 @@ export const useDeleteTask = () => {
8084 return useMutation ( {
8185 mutationFn : deleteTask ,
8286 onMutate : ( taskId ) => {
83- const previous = [ ...useTaskStore . getState ( ) . tasks ] ;
84- useTaskStore . getState ( ) . deleteTask ( taskId ) ;
85- return { previous } ;
87+ const allCaches = queryClient . getQueriesData < TaskProps [ ] > ( { queryKey : [ 'tasks' ] } ) ;
88+ for ( const [ queryKey , tasks ] of allCaches ) {
89+ if ( ! tasks ?. some ( ( t ) => t . id === taskId ) ) continue ;
90+ queryClient . setQueryData < TaskProps [ ] > (
91+ queryKey ,
92+ tasks . filter ( ( t ) => t . id !== taskId )
93+ ) ;
94+ return { queryKey, previous : tasks } ;
95+ }
8696 } ,
8797 onError : ( _err , _vars , context ) => {
88- if ( context ?. previous ) useTaskStore . getState ( ) . setTasks ( context . previous ) ;
98+ if ( context ) queryClient . setQueryData ( context . queryKey , context . previous ) ;
8999 } ,
90100 onSettled : ( ) => {
91101 queryClient . invalidateQueries ( { queryKey : [ 'tasks' ] } ) ;
@@ -97,41 +107,41 @@ export const useDeleteTask = () => {
97107export const useReorderTasks = ( ) => {
98108 const queryClient = useQueryClient ( ) ;
99109 return useMutation ( {
100- mutationFn : ( variables : { items : { id : string ; position : number } [ ] ; previousTasks : TaskProps [ ] } ) =>
110+ mutationFn : ( variables : { items : { id : string ; position : number } [ ] ; listId : string ; previousTasks : TaskProps [ ] } ) =>
101111 reorderTasks ( variables . items ) ,
102112 onError : ( _err , variables ) => {
103- useTaskStore . getState ( ) . setTasks ( variables . previousTasks ) ;
113+ queryClient . setQueryData ( [ 'tasks' , variables . listId ] , variables . previousTasks ) ;
104114 } ,
105- onSettled : ( ) => {
106- queryClient . invalidateQueries ( { queryKey : [ 'tasks' ] } ) ;
115+ onSettled : ( _data , _error , variables ) => {
116+ queryClient . invalidateQueries ( { queryKey : [ 'tasks' , variables . listId ] } ) ;
117+ queryClient . invalidateQueries ( { queryKey : [ 'lists' ] } ) ;
107118 } ,
108119 } ) ;
109120} ;
110121
111122export const useDuplicateTask = ( ) => {
112123 const queryClient = useQueryClient ( ) ;
113124 return useMutation ( {
114- mutationFn : ( variables : { taskId : string ; tempTask : TaskProps } ) =>
115- duplicateTask ( variables . taskId ) ,
125+ mutationFn : ( variables : { taskId : string ; tempTask : TaskProps } ) => duplicateTask ( variables . taskId ) ,
116126 onMutate : ( { tempTask } ) => {
117- const previous = [ ...useTaskStore . getState ( ) . tasks ] ;
118- useTaskStore . getState ( ) . addTask ( tempTask ) ;
127+ const queryKey = [ 'tasks' , tempTask . list_id ] ;
128+ const previous = queryClient . getQueryData < TaskProps [ ] > ( queryKey ) ;
129+ queryClient . setQueryData < TaskProps [ ] > ( queryKey , [ tempTask , ...( previous ?? [ ] ) ] ) ;
119130 return { previous, tempId : tempTask . id } ;
120131 } ,
121- onSuccess : ( data , _vars , context ) => {
132+ onSuccess : ( data , vars , context ) => {
122133 if ( context ?. tempId && data . length > 0 ) {
123- const current = useTaskStore . getState ( ) . tasks ;
124- const serverTask = data [ 0 ] ;
125- useTaskStore . getState ( ) . setTasks (
126- current . map ( ( t ) => ( t . id === context . tempId ? serverTask : t ) )
134+ const queryKey = [ 'tasks' , vars . tempTask . list_id ] ;
135+ queryClient . setQueryData < TaskProps [ ] > ( queryKey , ( current ) =>
136+ ( current ?? [ ] ) . map ( ( t ) => ( t . id === context . tempId ? data [ 0 ] : t ) )
127137 ) ;
128138 }
129139 } ,
130- onError : ( _err , _vars , context ) => {
131- if ( context ?. previous ) useTaskStore . getState ( ) . setTasks ( context . previous ) ;
140+ onError : ( _err , vars , context ) => {
141+ queryClient . setQueryData ( [ 'tasks' , vars . tempTask . list_id ] , context ? .previous ) ;
132142 } ,
133- onSettled : ( ) => {
134- queryClient . invalidateQueries ( { queryKey : [ 'tasks' ] } ) ;
143+ onSettled : ( _data , _error , variables ) => {
144+ queryClient . invalidateQueries ( { queryKey : [ 'tasks' , variables . tempTask . list_id ] } ) ;
135145 queryClient . invalidateQueries ( { queryKey : [ 'lists' ] } ) ;
136146 } ,
137147 } ) ;
@@ -142,12 +152,18 @@ export const useMoveTask = () => {
142152 return useMutation ( {
143153 mutationFn : moveTask ,
144154 onMutate : ( { taskId } ) => {
145- const previous = [ ...useTaskStore . getState ( ) . tasks ] ;
146- useTaskStore . getState ( ) . deleteTask ( taskId ) ;
147- return { previous } ;
155+ const allCaches = queryClient . getQueriesData < TaskProps [ ] > ( { queryKey : [ 'tasks' ] } ) ;
156+ for ( const [ queryKey , tasks ] of allCaches ) {
157+ if ( ! tasks ?. some ( ( t ) => t . id === taskId ) ) continue ;
158+ queryClient . setQueryData < TaskProps [ ] > (
159+ queryKey ,
160+ tasks . filter ( ( t ) => t . id !== taskId )
161+ ) ;
162+ return { queryKey, previous : tasks } ;
163+ }
148164 } ,
149165 onError : ( _err , _vars , context ) => {
150- if ( context ?. previous ) useTaskStore . getState ( ) . setTasks ( context . previous ) ;
166+ if ( context ) queryClient . setQueryData ( context . queryKey , context . previous ) ;
151167 } ,
152168 onSettled : ( ) => {
153169 queryClient . invalidateQueries ( { queryKey : [ 'tasks' ] } ) ;
0 commit comments