diff --git a/src/app/mypage/my-active/my-comment/page.tsx b/src/app/mypage/my-active/my-comment/page.tsx index c69e1e6..480939f 100644 --- a/src/app/mypage/my-active/my-comment/page.tsx +++ b/src/app/mypage/my-active/my-comment/page.tsx @@ -1,4 +1,4 @@ -// import CommentList from '@/domains/shared/components/comment/CommentList'; +import MyComment from '@/domains/mypage/components/pages/my-active/MyComment'; import { Metadata } from 'next'; export const metadata: Metadata = { @@ -7,6 +7,6 @@ export const metadata: Metadata = { }; function Page() { - return <>{/* */}; + return ; } export default Page; diff --git a/src/app/mypage/my-active/my-like/page.tsx b/src/app/mypage/my-active/my-like/page.tsx index 0a8e73e..fb9205a 100644 --- a/src/app/mypage/my-active/my-like/page.tsx +++ b/src/app/mypage/my-active/my-like/page.tsx @@ -1,4 +1,5 @@ // import PostCard from '@/domains/community/main/PostCard'; +import MyLike from '@/domains/mypage/components/pages/my-active/MyLike'; import { Metadata } from 'next'; export const metadata: Metadata = { @@ -7,6 +8,6 @@ export const metadata: Metadata = { }; function Page() { - return
{/* */}
; + // return ; } export default Page; diff --git a/src/app/mypage/my-active/my-post/page.tsx b/src/app/mypage/my-active/my-post/page.tsx index 70c47d8..775ac07 100644 --- a/src/app/mypage/my-active/my-post/page.tsx +++ b/src/app/mypage/my-active/my-post/page.tsx @@ -1,4 +1,4 @@ -// import PostCard from '@/domains/community/main/PostCard'; +import MyPost from '@/domains/mypage/components/pages/my-active/MyPost'; import { Metadata } from 'next'; export const metadata: Metadata = { @@ -7,6 +7,6 @@ export const metadata: Metadata = { }; function Page() { - return
{/* */}
; + return ; } export default Page; diff --git a/src/app/mypage/my-alarm/page.tsx b/src/app/mypage/my-alarm/page.tsx index ec9e77c..c094bd4 100644 --- a/src/app/mypage/my-alarm/page.tsx +++ b/src/app/mypage/my-alarm/page.tsx @@ -1,4 +1,4 @@ -import Alarm from '@/domains/mypage/components/Alarm'; +import MyAlarm from '@/domains/mypage/components/pages/my-alarm/MyAlarm'; import { Metadata } from 'next'; @@ -10,10 +10,7 @@ export const metadata: Metadata = { function Page() { return (
- - - - +
); } diff --git a/src/app/mypage/my-bar/page.tsx b/src/app/mypage/my-bar/page.tsx index 4c12cc4..54fa638 100644 --- a/src/app/mypage/my-bar/page.tsx +++ b/src/app/mypage/my-bar/page.tsx @@ -1,4 +1,4 @@ -import CocktailCard from '@/domains/shared/components/cocktail-card/CocktailCard'; +import MyBar from '@/domains/mypage/components/pages/my-bar/MyBar'; import { Metadata } from 'next'; export const metadata: Metadata = { @@ -7,19 +7,6 @@ export const metadata: Metadata = { }; function Page() { - return ( -
- -
- ); + return ; } export default Page; diff --git a/src/domains/mypage/api/fetchProfile.ts b/src/domains/mypage/api/fetchProfile.ts new file mode 100644 index 0000000..6dbc620 --- /dev/null +++ b/src/domains/mypage/api/fetchProfile.ts @@ -0,0 +1,36 @@ +'use client'; +import { getApi } from '@/app/api/config/appConfig'; +import { useEffect, useState } from 'react'; + +interface Profile { + abvDegree: number; + abvLabel: string; + abvLevel: number; + email?: string; + id: number; + myCommentCount: number; + myKeepCount: number; + myLikedPostCount: number; + myPostCount: number; + nickname: string; +} + +function useFetchProfile() { + const [profile, setProfile] = useState(null); + + const fetchProfile = async () => { + const res = await fetch(`${getApi}/me/profile`, { + method: 'GET', + credentials: 'include', + }); + const json = await res.json(); + setProfile(json.data); + }; + + useEffect(() => { + fetchProfile(); + }, []); + + return { profile, fetchProfile }; +} +export default useFetchProfile; diff --git a/src/domains/mypage/components/Alarm.tsx b/src/domains/mypage/components/Alarm.tsx index 9031a73..880c11c 100644 --- a/src/domains/mypage/components/Alarm.tsx +++ b/src/domains/mypage/components/Alarm.tsx @@ -4,7 +4,12 @@ import clsx from 'clsx'; import Image from 'next/image'; import { useState } from 'react'; -function Alarm() { +interface Props { + title: string; + content: string; +} + +function Alarm({ title, content }: Props) { const [isClick, setIsClick] = useState(false); const handleClick = () => { @@ -27,8 +32,8 @@ function Alarm() {

10분 전

-

새로운 좋아요 알림

-

User님이 내 글에 좋아요를 누르셨습니다.

+

{title}

+

{content}

diff --git a/src/domains/mypage/components/EditNickName.tsx b/src/domains/mypage/components/EditNickName.tsx index e1d744b..0e92de8 100644 --- a/src/domains/mypage/components/EditNickName.tsx +++ b/src/domains/mypage/components/EditNickName.tsx @@ -1,27 +1,76 @@ +import { getApi } from '@/app/api/config/appConfig'; import Button from '@/shared/components/button/Button'; import TextButton from '@/shared/components/button/TextButton'; import Input from '@/shared/components/Input-box/Input'; import ModalLayout from '@/shared/components/modal-pop/ModalLayout'; +import { useToast } from '@/shared/hook/useToast'; +import { Dispatch, SetStateAction } from 'react'; interface Props { open: boolean; onClose: () => void; + setNickName: (v: string) => void; + setIsOpen: Dispatch>; + editNickName: string; + setEditNickName: Dispatch>; } -function EditNickName({ open, onClose }: Props) { +function EditNickName({ + open, + onClose, + setNickName, + setIsOpen, + editNickName, + setEditNickName, +}: Props) { + const { toastError } = useToast(); + const handlesave = async () => { + if (editNickName.length <= 1) { + toastError('닉네임은 2글자 이상 입력해야합니다'); + return; + } + + await setNickName(editNickName); + + await fetch(`${getApi}/me/profile`, { + method: 'PATCH', + credentials: 'include', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + nickname: editNickName, + }), + }); + await setIsOpen(false); + }; + + const handleChange = (e: React.ChangeEvent) => { + setEditNickName(e.target.value); + }; + return ( 저장} + buttons={ + + } >
- + handleChange(e)} + placeholder="8글자 이내로 입력해주세요" + id="editNickName" + className="w-full" + /> 기존 이름으로 돌아가기
diff --git a/src/domains/mypage/components/ToggleBtn.tsx b/src/domains/mypage/components/ToggleBtn.tsx index 447bb1c..d6fda4a 100644 --- a/src/domains/mypage/components/ToggleBtn.tsx +++ b/src/domains/mypage/components/ToggleBtn.tsx @@ -1,13 +1,45 @@ 'use client'; +import { getApi } from '@/app/api/config/appConfig'; +import { useToast } from '@/shared/hook/useToast'; import clsx from 'clsx'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; function ToggleBtn() { - const [isClick, setIsClick] = useState(false); + const [isClick, setIsClick] = useState(null); + const { toastSuccess } = useToast(); - const handleClick = () => { - setIsClick(!isClick); + useEffect(() => { + const fetchToggle = async () => { + try { + const res = await fetch(`${getApi}/me/notification-setting`, { + method: 'GET', + credentials: 'include', + }); + const json = await res.json(); + setIsClick(json.data.enabled); + } catch { + console.error(); + } + }; + fetchToggle(); + }, []); + + const handleClick = async () => { + if (isClick === null) return; + const next = !isClick; + setIsClick(next); + + await fetch(`${getApi}/me/notification-setting`, { + method: 'PATCH', + credentials: 'include', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + enabled: next, + }), + }); + next ? toastSuccess('알림이 설정되었습니다.') : toastSuccess('알림이 해제되었습니다'); }; + return (