/** * User Preferences API — per-user UI settings stored server-side. * Matches backend endpoints from /api/v1/user/preferences. * * Backend: app/routes/user_preferences.py, app/models/user_preference.py */ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { apiGet, apiPut, apiDelete } from './client'; // ── Types ── export interface PreferenceEntry { key: string; value: unknown; updated_at?: string | null; } export interface PreferenceListResponse { preferences: PreferenceEntry[]; } // ── Hooks ── export function useUserPreferences() { return useQuery({ queryKey: ['userPreferences'], queryFn: () => apiGet('/user/preferences'), }); } export function useUserPreference(key: string) { return useQuery({ queryKey: ['userPreferences', key], queryFn: () => apiGet(`/user/preferences/${key}`), enabled: !!key, }); } export function useUpsertUserPreference() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ key, value, }: { key: string; value: unknown; }) => apiPut(`/user/preferences/${key}`, { value, }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['userPreferences'], }); }, }); } export function useDeleteUserPreference() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (key: string) => apiDelete(`/user/preferences/${key}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['userPreferences'], }); }, }); }