diff --git a/public/images/default-avatar.svg b/public/images/default-avatar.svg new file mode 100644 index 0000000..32c3bea --- /dev/null +++ b/public/images/default-avatar.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/images/plus-square.svg b/public/images/plus-square.svg new file mode 100644 index 0000000..c99ec79 --- /dev/null +++ b/public/images/plus-square.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/public/images/upload.svg b/public/images/upload.svg new file mode 100644 index 0000000..74ec085 --- /dev/null +++ b/public/images/upload.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/app/(auth)/layout.js b/src/app/(auth)/layout.js index 4347ac4..8377608 100644 --- a/src/app/(auth)/layout.js +++ b/src/app/(auth)/layout.js @@ -1,7 +1,5 @@ -"use client"; - import { FullLayout } from "@/components/Layout"; -export default function Layout({ children }) { +export default async function Layout({ children }) { return {children}; } diff --git a/src/app/(landing)/layout.js b/src/app/(landing)/layout.js index affc3f1..2d950a3 100644 --- a/src/app/(landing)/layout.js +++ b/src/app/(landing)/layout.js @@ -1,5 +1,3 @@ -"use client"; - import { LandingLayout } from "@/components/Layout"; export default function Layout({ children }) { diff --git a/src/app/(mypage)/layout.js b/src/app/(mypage)/layout.js index 785b2e6..a349b3b 100644 --- a/src/app/(mypage)/layout.js +++ b/src/app/(mypage)/layout.js @@ -1,5 +1,3 @@ -"use client"; - import { MyPageLayout } from "@/components/Layout"; export default function Layout({ children }) { diff --git a/src/app/(mypage)/me/edit/page.js b/src/app/(mypage)/me/edit/page.js new file mode 100644 index 0000000..59e5f0a --- /dev/null +++ b/src/app/(mypage)/me/edit/page.js @@ -0,0 +1,115 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { useRouter } from "next/navigation"; +import Label from "@/components/Label"; +import Input from "@/components/Input"; +import Button from "@/components/Button"; +import TextArea from "@/components/TextArea"; +import AvatarInput from "@/components/AvatarInput"; +import styles from "./page.module.css"; +import { useAuth } from "@/providers/AuthProvider"; + +export default function EditPage() { + const [values, setValues] = useState({ + avatar: "", + name: "", + email: "", + bio: "", + }); + const { updateUser, user } = useAuth(); + const router = useRouter(); + + useEffect(() => { + if (user) { + const { avatar, name, email, bio } = user; + setValues({ + avatar: avatar || "", + name: name || "", + email: email || "", + bio: bio || "", + }); + } + }, [user]); + + function handleChange(name, value) { + setValues((prevValues) => ({ + ...prevValues, + [name]: value, + })); + } + + function handleInputChange(e) { + const { name, value } = e.target; + handleChange(name, value); + } + + async function handleSubmit(e) { + e.preventDefault(); + try { + const formData = new FormData(); + formData.append("avatar", values.avatar); + formData.append("name", values.name); + formData.append("email", values.email); + formData.append("bio", values.bio); + + await updateUser(formData); + + router.push("/me"); + } catch (error) { + console.error("Error updating profile:", error); + } + } + + return ( + <> +

프로필 편집

+
+ + + + + + +