68 lines
2.2 KiB
TypeScript
68 lines
2.2 KiB
TypeScript
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,
|
|
};
|
|
}
|