Files
honeyDueWeb/src/lib/hooks/use-residences.ts
T
Trey t bd9b0ffb34 Fix demo mode showing real user data after logout
React Query cache was shared between /app (real API) and /demo/app
(mock data) because query keys were identical. After login→logout→demo,
stale real data served from cache.

Two fixes:
1. Clear React Query cache on logout (auth store)
2. Namespace all query keys with basePath prefix so /app and /demo/app
   caches are completely isolated

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 20:35:49 -06:00

73 lines
2.3 KiB
TypeScript

"use client";
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { useDataProvider, useQueryKeyPrefix } from '@/lib/demo/data-provider-context';
import type { CreateResidenceRequest, UpdateResidenceRequest } from '@/lib/api/residences';
// ---------------------------------------------------------------------------
// Query hooks
// ---------------------------------------------------------------------------
export function useResidences() {
const { residences } = useDataProvider();
const qk = useQueryKeyPrefix();
return useQuery({
queryKey: qk('residences'),
queryFn: () => residences.getMyResidences(),
select: (data) => (Array.isArray(data) ? data : []),
});
}
export function useResidence(id: number) {
const { residences } = useDataProvider();
const qk = useQueryKeyPrefix();
return useQuery({
queryKey: qk('residences', id),
queryFn: () => residences.get(id),
enabled: !!id,
});
}
// ---------------------------------------------------------------------------
// Mutation hooks
// ---------------------------------------------------------------------------
export function useCreateResidence() {
const queryClient = useQueryClient();
const { residences } = useDataProvider();
const qk = useQueryKeyPrefix();
return useMutation({
mutationFn: (data: CreateResidenceRequest) =>
residences.create(data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: qk('residences') });
},
});
}
export function useUpdateResidence(id: number) {
const queryClient = useQueryClient();
const { residences } = useDataProvider();
const qk = useQueryKeyPrefix();
return useMutation({
mutationFn: (data: UpdateResidenceRequest) =>
residences.update(id, data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: qk('residences') });
queryClient.invalidateQueries({ queryKey: qk('residences', id) });
},
});
}
export function useDeleteResidence() {
const queryClient = useQueryClient();
const { residences } = useDataProvider();
const qk = useQueryKeyPrefix();
return useMutation({
mutationFn: (id: number) => residences.delete(id),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: qk('residences') });
},
});
}