recherche
This commit is contained in:
60
app/hooks/useAnalysesSecteur.ts
Normal file
60
app/hooks/useAnalysesSecteur.ts
Normal 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] });
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user