export const useUpdateModule = (projectId: number) => {
const queryClient = useQueryClient();
const queryKey = [PROJECT_ESTIMATE_QUERY_KEY, { projectId }];
return useMutation({
mutationFn: ({ moduleId, data }: UpdateModuleParams) =>
api.estimates.updateModule(moduleId, data),
onMutate: async ({ moduleId, data }) => {
await queryClient.cancelQueries({ queryKey });
const previousData = queryClient.getQueryData<ProjectEstimateApiResponse>(queryKey);
queryClient.setQueryData<ProjectEstimateApiResponse>(queryKey, (old) => {
if (!old) return old;
return produce(old, (draft) => {
const module = draft.data.modules.find((m) => m.id === moduleId);
if (module) {
module.name = data.name;
module.is_exportable = data.is_exportable;
}
});
});
return { previousData };
},
onError: (_, __, context) => {
queryClient.setQueryData(queryKey, context?.previousData);
}
});
};
export const useUpdateModule = (projectId: number) => {
const queryClient = useQueryClient();
const queryKey = [PROJECT_ESTIMATE_QUERY_KEY, { projectId }];
return useMutation({
mutationFn: ({ moduleId, data }: UpdateModuleParams) =>
api.estimates.updateModule(moduleId, data),
onMutate: async ({ moduleId, data }) => {
await queryClient.cancelQueries({ queryKey });
const previousData = queryClient.getQueryData<ProjectEstimateApiResponse>(queryKey);
queryClient.setQueryData<ProjectEstimateApiResponse>(queryKey, (old) => {
if (!old) return old;
return produce(old, (draft) => {
const module = draft.data.modules.find((m) => m.id === moduleId);
if (module) {
module.name = data.name;
module.is_exportable = data.is_exportable;
}
});
});
return { previousData };
},
onError: (_, __, context) => {
queryClient.setQueryData(queryKey, context?.previousData);
}
});
};