This commit is contained in:
67
app/hooks/useEtapes.ts
Normal file
67
app/hooks/useEtapes.ts
Normal file
@ -0,0 +1,67 @@
|
||||
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||
|
||||
import { getCurrentUserId, pb } from '@/services/pocketbase';
|
||||
import type { EtapePipelineRecord } from '@/types/collections';
|
||||
|
||||
const DEFAULT_ETAPES: { nom: string; ordre: number; couleur: string; is_terminal?: boolean }[] = [
|
||||
{ nom: 'Prospection', ordre: 1, couleur: '#64748B' },
|
||||
{ nom: 'Contact établi', ordre: 2, couleur: '#0EA5E9' },
|
||||
{ nom: 'Visite', ordre: 3, couleur: '#8B5CF6' },
|
||||
{ nom: 'Analyse', ordre: 4, couleur: '#F59E0B' },
|
||||
{ nom: 'Offre', ordre: 5, couleur: '#EC4899' },
|
||||
{ nom: 'Compromis', ordre: 6, couleur: '#10B981' },
|
||||
{ nom: 'Acte / acquisition', ordre: 7, couleur: '#16A34A', is_terminal: true },
|
||||
];
|
||||
|
||||
export function useEtapes() {
|
||||
const uid = getCurrentUserId();
|
||||
const queryClient = useQueryClient();
|
||||
|
||||
const query = useQuery({
|
||||
queryKey: ['etapes_pipeline', uid],
|
||||
queryFn: async () => {
|
||||
if (!uid) return [] as EtapePipelineRecord[];
|
||||
const list = await pb.collection('etapes_pipeline').getFullList<EtapePipelineRecord>({
|
||||
filter: `user="${uid}"`,
|
||||
sort: 'ordre',
|
||||
});
|
||||
return list;
|
||||
},
|
||||
enabled: Boolean(uid),
|
||||
});
|
||||
|
||||
const initMutation = useMutation({
|
||||
mutationFn: async () => {
|
||||
if (!uid) throw new Error('Non connecté');
|
||||
const existing = await pb.collection('etapes_pipeline').getFullList<EtapePipelineRecord>({
|
||||
filter: `user="${uid}"`,
|
||||
});
|
||||
if (existing.length > 0) return existing;
|
||||
for (const e of DEFAULT_ETAPES) {
|
||||
await pb.collection('etapes_pipeline').create({
|
||||
user: uid,
|
||||
nom: e.nom,
|
||||
ordre: e.ordre,
|
||||
couleur: e.couleur,
|
||||
is_terminal: e.is_terminal ?? false,
|
||||
});
|
||||
}
|
||||
return pb.collection('etapes_pipeline').getFullList<EtapePipelineRecord>({
|
||||
filter: `user="${uid}"`,
|
||||
sort: 'ordre',
|
||||
});
|
||||
},
|
||||
onSuccess: () => {
|
||||
void queryClient.invalidateQueries({ queryKey: ['etapes_pipeline'] });
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
etapes: query.data ?? [],
|
||||
isLoading: query.isPending,
|
||||
error: query.error,
|
||||
initEtapesDefaut: initMutation.mutateAsync,
|
||||
initError: initMutation.error,
|
||||
isInitPending: initMutation.isPending,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user