/** * @ai-summary React hooks for account deletion functionality */ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useAuth0 } from '@auth0/auth0-react'; import { useLogout } from '../../../core/auth/useLogout'; import { profileApi } from '../api/profile.api'; import { RequestDeletionRequest } from '../types/profile.types'; import toast from 'react-hot-toast'; interface ApiError { response?: { data?: { error?: string; }; }; message?: string; } export const useDeletionStatus = () => { const { isAuthenticated, isLoading } = useAuth0(); return useQuery({ queryKey: ['user-deletion-status'], queryFn: async () => { const response = await profileApi.getDeletionStatus(); return response.data; }, enabled: isAuthenticated && !isLoading, staleTime: 1 * 60 * 1000, // 1 minute gcTime: 5 * 60 * 1000, // 5 minutes cache time refetchOnWindowFocus: true, refetchOnMount: true, }); }; export const useRequestDeletion = () => { const queryClient = useQueryClient(); const { logout } = useLogout(); return useMutation({ mutationFn: (data: RequestDeletionRequest) => profileApi.requestDeletion(data), onSuccess: (response) => { queryClient.invalidateQueries({ queryKey: ['user-deletion-status'] }); queryClient.invalidateQueries({ queryKey: ['user-profile'] }); toast.success(response.data.message || 'Account deletion scheduled'); // Logout after 2 seconds (with audit tracking) setTimeout(() => { logout(); }, 2000); }, onError: (error: ApiError) => { toast.error(error.response?.data?.error || 'Failed to request account deletion'); }, }); }; export const useCancelDeletion = () => { const queryClient = useQueryClient(); return useMutation({ mutationFn: () => profileApi.cancelDeletion(), onSuccess: (response) => { queryClient.invalidateQueries({ queryKey: ['user-deletion-status'] }); queryClient.invalidateQueries({ queryKey: ['user-profile'] }); queryClient.setQueryData(['user-profile'], response.data.profile); toast.success('Welcome back! Account deletion cancelled'); }, onError: (error: ApiError) => { toast.error(error.response?.data?.error || 'Failed to cancel account deletion'); }, }); };