'use client' import { useState } from 'react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Badge } from '@/components/ui/badge' import { Shield, Loader2, Mail, Check, UserCircle } from 'lucide-react' import { useForm } from 'react-hook-form' import { z } from 'zod' import { zodResolver } from '@hookform/resolvers/zod' import { useToast } from '@/hooks/use-toast' import httpBrowserClient from '@/lib/httpBrowserClient' import { ApiEndpoints } from '@/config/api' import { useMutation, useQuery } from '@tanstack/react-query' import { Spinner } from '@/components/ui/spinner' import { useSession } from 'next-auth/react' const updateProfileSchema = z.object({ name: z.string().min(1, 'Name is required'), email: z.string().email().optional(), phone: z .string() .regex(/^\+?\d{0,14}$/, 'Invalid phone number') .optional(), }) type UpdateProfileFormData = z.infer export default function EditProfileForm() { const { toast } = useToast() const { update: updateSession } = useSession() const { data: currentUser, isLoading: isLoadingUser, refetch: refetchCurrentUser, } = useQuery({ queryKey: ['currentUser'], queryFn: () => httpBrowserClient .get(ApiEndpoints.auth.whoAmI()) .then((res) => res.data?.data), }) const updateProfileForm = useForm({ resolver: zodResolver(updateProfileSchema), defaultValues: { name: currentUser?.name, email: currentUser?.email, phone: currentUser?.phone, }, }) const handleVerifyEmail = () => { // TODO: Implement email verification } const { mutate: updateProfile, isPending: isUpdatingProfile, error: updateProfileError, isSuccess: isUpdateProfileSuccess, } = useMutation({ mutationFn: (data: UpdateProfileFormData) => httpBrowserClient.patch(ApiEndpoints.auth.updateProfile(), data), onSuccess: () => { refetchCurrentUser() toast({ title: 'Profile updated successfully!', }) updateSession({ name: updateProfileForm.getValues().name, phone: updateProfileForm.getValues().phone, }) }, onError: () => { toast({ title: 'Failed to update profile', }) }, }) if (isLoadingUser) return (
) return (
updateProfile(data))} className='space-y-4' >
{updateProfileForm.formState.errors.name && (

{updateProfileForm.formState.errors.name.message}

)}
{!currentUser?.emailVerifiedAt ? ( ) : ( )}
{updateProfileForm.formState.errors.email && (

{updateProfileForm.formState.errors.email.message}

)}
{updateProfileForm.formState.errors.phone && (

{updateProfileForm.formState.errors.phone.message}

)}
{isUpdateProfileSuccess && (

Profile updated successfully!

)}
) }