"use client"; import axios, { AxiosError } from "axios"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; import { FaSignOutAlt } from "react-icons/fa"; import { FaUser } from "react-icons/fa6"; import { User } from "@appTypes/Prisma"; import { useStoreActions } from "@hooks/store"; // todo add previous orders list export default function Profile() { const router = useRouter(); const setUser = useStoreActions((actions) => actions.setUser) as (user: User | null) => void; const [user, setUserState] = useState(null); const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [confirmPassword, setConfirmPassword] = useState(""); const [role, setRole] = useState(""); const [error, setError] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { const fetchUser = async () => { try { const userData: User = { id: 1, createdAt: new Date(), name: "John Doe", email: "john.doe@example.com", passwordHash: "hashed_password", role: "SCIENTIST", scientist: undefined, purchasedArtefacts: [], }; setUserState(userData); setName(userData.name); setEmail(userData.email); setRole(userData.role); } catch { setError("Failed to load user data."); } }; fetchUser(); }, []); const handleSave = async () => { if (!name || !email) { setError("Name and email are required."); return; } setIsSubmitting(true); try { // todo create receiving api route // todo handle sending fields to api route await new Promise((resolve) => setTimeout(resolve, 500)); setUserState({ ...user!, name, email, role }); alert("Profile updated successfully."); setError(""); } catch { setError("Failed to update profile. Please try again."); } finally { setIsSubmitting(false); } }; const handleLogout = async () => { try { const res = await axios.get("/api/logout"); if (res.status === 200) { setUser(null); router.push("/"); } else { console.error("Failed to logout", res.data); } } catch (error) { const axiosError = error as AxiosError<{ message: string }>; if (axiosError.response && axiosError.response.status === 400) { setUser(null); router.push("/"); } else { console.error("Error during logout", axiosError); } } }; return (

User Profile

{error &&

{error}

}
setName(e.target.value)} className="w-full p-2 border border-neutral-300 rounded-md placeholder-neutral-400 focus:ring-2 focus:ring-blue-500 text-sm" aria-label="User Name" disabled={isSubmitting} />
setEmail(e.target.value)} className="w-full p-2 border border-neutral-300 rounded-md placeholder-neutral-400 focus:ring-2 focus:ring-blue-500 text-sm" aria-label="User Email" disabled={isSubmitting} />
setPassword(e.target.value)} className="w-full p-2 border border-neutral-300 rounded-md placeholder-neutral-400 focus:ring-2 focus:ring-blue-500 text-sm" disabled={isSubmitting} />
setConfirmPassword(e.target.value)} className="w-full p-2 border border-neutral-300 rounded-md placeholder-neutral-400 focus:ring-2 focus:ring-blue-500 text-sm" disabled={isSubmitting} />
); }