61 lines
2.0 KiB
TypeScript
61 lines
2.0 KiB
TypeScript
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] });
|
|
},
|
|
});
|
|
}
|