2026-09-16 18:42:31 -03:00
|
|
|
import { useMutation, useQuery, useQueryClient, type UseQueryResult } from "@tanstack/react-query";
|
|
|
|
|
import { toast } from "react-toastify";
|
|
|
|
|
import { servicesApi } from "@/domain/services/api/services-api";
|
2026-09-16 19:13:00 -03:00
|
|
|
import type {
|
|
|
|
|
CompletionDocTemplateOption,
|
|
|
|
|
Service,
|
|
|
|
|
ServiceInput,
|
|
|
|
|
} from "@/domain/services/types/service";
|
2026-09-16 18:42:31 -03:00
|
|
|
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,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2026-09-16 19:13:00 -03:00
|
|
|
export function useCompletionDocTemplates(): UseQueryResult<CompletionDocTemplateOption[], Error> {
|
|
|
|
|
return useQuery({
|
|
|
|
|
queryKey: queryKeys.services.completionTemplates(),
|
|
|
|
|
queryFn: servicesApi.getCompletionTemplates,
|
|
|
|
|
staleTime: 5 * 60 * 1000,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
2026-09-16 18:42:31 -03:00
|
|
|
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"),
|
|
|
|
|
});
|
|
|
|
|
}
|