mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-06 14:42:05 +00:00
51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
|
|
import { useMutation, useQuery, useQueryClient, type UseQueryResult } from "@tanstack/react-query";
|
||
|
|
import { toast } from "react-toastify";
|
||
|
|
import { servicesApi } from "@/domain/services/api/services-api";
|
||
|
|
import type { Service, ServiceInput } from "@/domain/services/types/service";
|
||
|
|
import { queryKeys } from "@/infra/query-key/query-key";
|
||
|
|
|
||
|
|
export function useServices(isActive?: boolean): UseQueryResult<Service[], Error> {
|
||
|
|
return useQuery({
|
||
|
|
queryKey: queryKeys.services.list(isActive),
|
||
|
|
queryFn: () => servicesApi.getAll(isActive),
|
||
|
|
staleTime: 60 * 1000,
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useCreateService() {
|
||
|
|
const queryClient = useQueryClient();
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: (input: ServiceInput) => servicesApi.create(input),
|
||
|
|
onSuccess: () => {
|
||
|
|
void queryClient.invalidateQueries({ queryKey: queryKeys.services.all });
|
||
|
|
toast.success("Service added");
|
||
|
|
},
|
||
|
|
onError: (error: Error) => toast.error(error.message || "Failed to add service"),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useUpdateService() {
|
||
|
|
const queryClient = useQueryClient();
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: ({ id, input }: { id: string | number; input: ServiceInput }) =>
|
||
|
|
servicesApi.update(id, input),
|
||
|
|
onSuccess: () => {
|
||
|
|
void queryClient.invalidateQueries({ queryKey: queryKeys.services.all });
|
||
|
|
toast.success("Service updated");
|
||
|
|
},
|
||
|
|
onError: (error: Error) => toast.error(error.message || "Failed to update service"),
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function useDeactivateService() {
|
||
|
|
const queryClient = useQueryClient();
|
||
|
|
return useMutation({
|
||
|
|
mutationFn: (id: string | number) => servicesApi.deactivate(id),
|
||
|
|
onSuccess: () => {
|
||
|
|
void queryClient.invalidateQueries({ queryKey: queryKeys.services.all });
|
||
|
|
toast.success("Service deactivated");
|
||
|
|
},
|
||
|
|
onError: (error: Error) => toast.error(error.message || "Failed to deactivate service"),
|
||
|
|
});
|
||
|
|
}
|