xtablo-source/apps/main/src/hooks/devis.ts
Arthur Belleville 7a0a5548f9
Lint and format
2025-10-23 21:36:21 +02:00

83 lines
2.2 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { useSession } from "@xtablo/shared";
import { Database } from "@xtablo/shared/types/database.types";
import { supabase } from "../lib/supabase";
type Devis = Database["public"]["Tables"]["devis"];
type DevisInsert = Devis["Insert"];
type DevisUpdate = Devis["Update"];
// Fetch all devis
export const useDevisList = () => {
return useQuery({
queryKey: ["devis"],
queryFn: async () => {
const { data, error } = await supabase.from("devis").select("*");
if (error) throw error;
return data;
},
});
};
// Fetch single devis
export const useDevis = (id: string) => {
return useQuery({
queryKey: ["devis", id],
queryFn: async () => {
const { data, error } = await supabase.from("devis").select("*").eq("id", id);
if (error) throw error;
return data[0];
},
});
};
// Create new devis
export const useCreateDevis = () => {
const { session } = useSession();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (devis: Omit<DevisInsert, "user_id">) => {
const { error } = await supabase.from("devis").insert({
...devis,
user_id: session?.user.id ?? "",
});
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["devis"] });
},
});
};
// Update devis
export const useUpdateDevis = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({ id, ...devis }: DevisUpdate & { id: string }) => {
const { error } = await supabase.from("devis").update(devis).eq("id", id);
if (error) throw error;
},
onSuccess: (_, { id }) => {
queryClient.invalidateQueries({ queryKey: ["devis"] });
queryClient.invalidateQueries({ queryKey: ["devis", id] });
},
});
};
// Delete devis
export const useDeleteDevis = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (id: string) => {
const { error } = await supabase.from("devis").delete().eq("id", id);
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["devis"] });
},
});
};