import { Divider } from "antd"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import { useAuth } from "../../contexts/authContext"; import { User } from "../../models/user"; import UserService from "../../services/userService"; import Image from "next/image"; export default function Profile() { const { currUser, logOut } = useAuth(); const [user, setUser] = useState(null); const router = useRouter(); const userService: UserService = new UserService(); useEffect(() => { (async function () { try { // if not authenticated, take user to the login if (!currUser) { console.log( "not authenticated...routing from dashboard to teams home" ); // router.push('/teams/login') } // get user const returnedUser: User | null = await userService.getUser( currUser.uid ); // if the user is null, then go ahead and create the user even though it's not there yet if (!returnedUser) { userService.createUser( currUser.uid, currUser.email, currUser.photoURL ); } console.log("got user from the backend"); setUser(returnedUser); setNickname(returnedUser.nickName ?? ""); setFirstName( returnedUser.firstName ?? currUser.displayName.split(" ")[0] ); setLastName(returnedUser.lastName ?? ""); setTeamRole(returnedUser.teamRole ?? ""); } catch (error) { console.log(error); router.push("/teams/login"); } })(); }, []); async function handleSubmit(e) { e.preventDefault(); if (!firstName) { setError("Must input first name"); return; } else if (!lastName) { setError("Must input last name"); return; } else if (!nickname) { setError("Must input nickname"); return; } else if (nickname.length > 22) { setError("nickname must be less than 22 characters"); return; } else if (!teamRole) { setError("Must input team role!"); return; } // create the user in the backend or just merge results let newUser = new User(); newUser.id = currUser.uid; newUser.firstName = firstName; newUser.lastName = lastName; newUser.nickName = nickname; newUser.avatarUrl = currUser.photoURL; newUser.teamRole = teamRole; try { await userService.updateUser(newUser); router.push("/teams"); } catch (error) { setError( "Something went wrong in saving your information. Please try again." ); } } const [firstName, setFirstName] = useState( currUser.displayName.split(" ")[0] ); const [lastName, setLastName] = useState(""); const [nickname, setNickname] = useState(""); const [teamRole, setTeamRole] = useState(""); const [error, setError] = useState(""); return (
{/* header */}
Profile
{error && {error}} Avatar Please change your google image to change this. asdf Email This is set from your Google account and cannot be changed.
First Name setFirstName(e.target.value)} /> Last Name setLastName(e.target.value)} />
Nickname What does your team call you? This is what is displayed. setNickname(e.target.value)} /> Role Are you a developer? designer? manager? setTeamRole(e.target.value)} /> {/* if they already had a nickname, they are probably revisiting this page */} {/* can't cancel if they are a new user */} {user && user.nickName ? ( <> ) : ( <> {/* if they already had a nickname, they are probably revisiting this page */} )} ); }