recherche

This commit is contained in:
Bastien COIGNOUX
2026-05-04 21:52:51 +02:00
parent 432f8ce176
commit 2b8741de08
30 changed files with 2317 additions and 246 deletions

View File

@ -0,0 +1,60 @@
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { getCurrentUserId, pb } from '@/services/pocketbase';
import type { AnalyseSecteurRecord } from '@/types/collections';
function escapeFilterValue(s: string): string {
return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
}
export function useAnalyseSecteurForVille(ville: string) {
const uid = getCurrentUserId();
const key = ville.trim().toLowerCase();
return useQuery({
queryKey: ['analyse_secteur', uid, key],
queryFn: async (): Promise<AnalyseSecteurRecord | null> => {
if (!uid || !key) return null;
const esc = escapeFilterValue(ville.trim());
const list = await pb.collection('analyses_secteur').getFullList<AnalyseSecteurRecord>({
filter: `user="${uid}" && ville="${esc}"`,
sort: '-updated',
});
return list[0] ?? null;
},
enabled: Boolean(uid && key),
});
}
export function useSaveAnalyseSecteur() {
const uid = getCurrentUserId();
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (payload: { ville: string; notes: string }) => {
if (!uid) throw new Error('Non connecté');
const ville = payload.ville.trim();
if (!ville) throw new Error('Ville requise');
const esc = escapeFilterValue(ville);
const existing = await pb.collection('analyses_secteur').getFullList<AnalyseSecteurRecord>({
filter: `user="${uid}" && ville="${esc}"`,
sort: '-updated',
});
const row = existing[0];
if (row) {
return pb.collection('analyses_secteur').update<AnalyseSecteurRecord>(row.id, {
notes: payload.notes,
});
}
return pb.collection('analyses_secteur').create<AnalyseSecteurRecord>({
user: uid,
ville,
notes: payload.notes,
});
},
onSuccess: (_, v) => {
const key = v.ville.trim().toLowerCase();
void queryClient.invalidateQueries({ queryKey: ['analyse_secteur', uid, key] });
},
});
}