From 40773c856333104881ab971b310fe40f96bfdd2d Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 18:05:20 +0900 Subject: [PATCH 01/29] =?UTF-8?q?refactor:=20TopHeader=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=EA=B0=80=20text=20prop=EC=9D=84=20?= =?UTF-8?q?=EB=B0=9B=EC=9D=84=20=EC=88=98=20=EC=9E=88=EA=B2=8C=EB=81=94=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/bookarchive/page.tsx | 2 +- src/app/group/page.tsx | 2 +- src/v1/base/TopHeader.tsx | 27 ++++----------------------- 3 files changed, 6 insertions(+), 25 deletions(-) diff --git a/src/app/bookarchive/page.tsx b/src/app/bookarchive/page.tsx index 3e884636..5234880d 100644 --- a/src/app/bookarchive/page.tsx +++ b/src/app/bookarchive/page.tsx @@ -11,7 +11,7 @@ import TopHeader from '@/v1/base/TopHeader'; export default function BookArchivePage() { return (
- + {/* TODO: 스켈레톤 컴포넌트로 교체 */} diff --git a/src/app/group/page.tsx b/src/app/group/page.tsx index a2c4d79c..c5effde5 100644 --- a/src/app/group/page.tsx +++ b/src/app/group/page.tsx @@ -44,7 +44,7 @@ const GroupPage = () => { return ( <> - +
{ diff --git a/src/v1/base/TopHeader.tsx b/src/v1/base/TopHeader.tsx index fea734fd..c7a7938d 100644 --- a/src/v1/base/TopHeader.tsx +++ b/src/v1/base/TopHeader.tsx @@ -1,32 +1,13 @@ import { PropsWithChildren } from 'react'; type TopHeaderProps = PropsWithChildren<{ - pathname: string; + text: string; }>; -const getHeaderLabel = (pathname: string) => { - switch (pathname) { - case '/bookarchive': { - return 'BookArchive'; - } - case '/book/search': { - return 'Search'; - } - case '/group': { - return 'Group'; - } - case '/profile/me': { - return 'Profile'; - } - } -}; - -const TopHeader = ({ pathname, children }: TopHeaderProps) => { +const TopHeader = ({ text, children }: TopHeaderProps) => { return ( -
-

- {getHeaderLabel(pathname)} -

+
+

{text}

{children}
); From 148a354999dad03d4bf536d394574cd5eaca7fec Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 18:08:25 +0900 Subject: [PATCH 02/29] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=83=88=EB=A1=9C=EC=9A=B4=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/[userId]/page.tsx | 17 +++--- .../bookShelf/MyProfileBookshelfContainer.tsx | 14 +++++ src/v1/profile/bookShelf/ProfileBookShelf.tsx | 44 +++++++++++++++ .../bookShelf/ProfileBookshelfPresenter.tsx | 46 +++++++++++++++ .../UserProfileBookshelfContainer.tsx | 19 +++++++ .../profile/info/MyProfileInfoContainer.tsx | 23 ++++++++ src/v1/profile/info/ProfileInfo.tsx | 56 +++++++++++++++++++ src/v1/profile/info/ProfileInfoPresenter.tsx | 43 ++++++++++++++ .../profile/info/UserProfileInfoContainer.tsx | 15 +++++ 9 files changed, 268 insertions(+), 9 deletions(-) create mode 100644 src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx create mode 100644 src/v1/profile/bookShelf/ProfileBookShelf.tsx create mode 100644 src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx create mode 100644 src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx create mode 100644 src/v1/profile/info/MyProfileInfoContainer.tsx create mode 100644 src/v1/profile/info/ProfileInfo.tsx create mode 100644 src/v1/profile/info/ProfileInfoPresenter.tsx create mode 100644 src/v1/profile/info/UserProfileInfoContainer.tsx diff --git a/src/app/profile/[userId]/page.tsx b/src/app/profile/[userId]/page.tsx index 4ee797d9..05b4e355 100644 --- a/src/app/profile/[userId]/page.tsx +++ b/src/app/profile/[userId]/page.tsx @@ -1,10 +1,9 @@ 'use client'; import { APIUser } from '@/types/user'; -import TopNavigation from '@/ui/common/TopNavigation'; -import ProfileBookShelf from '@/ui/Profile/ProfileBookshelf'; -import ProfileInfo from '@/ui/Profile/ProfileInfo'; -import { VStack } from '@chakra-ui/react'; +import TopHeader from '@/v1/base/TopHeader'; +import ProfileBookShelf from '@/v1/profile/bookShelf/ProfileBookShelf'; +import ProfileInfo from '@/v1/profile/info/ProfileInfo'; const UserProfilePage = ({ params: { userId }, @@ -12,13 +11,13 @@ const UserProfilePage = ({ params: { userId: APIUser['userId'] }; }) => { return ( - - - + <> + +
- - +
+ ); }; diff --git a/src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx b/src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx new file mode 100644 index 00000000..5a0a9ab7 --- /dev/null +++ b/src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx @@ -0,0 +1,14 @@ +import ProfileBookshelfPresenter from './ProfileBookshelfPresenter'; +import useMySummaryBookshlefQuery from '@/queries/bookshelf/useMySummaryBookshelfQuery'; + +const MyProfileBookshelfContainer = () => { + const { isSuccess, data } = useMySummaryBookshlefQuery({ + suspense: true, + }); + + if (!isSuccess) return null; + + return ; +}; + +export default MyProfileBookshelfContainer; diff --git a/src/v1/profile/bookShelf/ProfileBookShelf.tsx b/src/v1/profile/bookShelf/ProfileBookShelf.tsx new file mode 100644 index 00000000..6202d243 --- /dev/null +++ b/src/v1/profile/bookShelf/ProfileBookShelf.tsx @@ -0,0 +1,44 @@ +import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; +import { QueryErrorResetBoundary } from '@tanstack/react-query'; +import { Suspense } from 'react'; +import { ErrorBoundary } from 'react-error-boundary'; +import type { APIUser } from '@/types/user'; +import MyProfileBookshelfContainer from './MyProfileBookshelfContainer'; +import UserProfileBookshelfContainer from './UserProfileBookshelfContainer'; +import useMounted from '@/hooks/useMounted'; + +const ProfileBookShelf = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { + const mounted = useMounted(); + + if (!mounted) return null; + + return ( + + {({ reset }) => ( + ( + + )} + > + }> + {userId === 'me' ? ( + + ) : ( + + )} + + + )} + + ); +}; + +export default ProfileBookShelf; + +const ProfileBookShelfSkelenton = () => { + return null; +}; diff --git a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx new file mode 100644 index 00000000..cdf0a694 --- /dev/null +++ b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx @@ -0,0 +1,46 @@ +import { APIBookshelf } from '@/types/bookshelf'; + +import Badge from '@/v1/base/Badge'; +import BookShelf from '@/v1/bookShelf/BookShelf'; + +import { IconArrowRight, IconHeart } from '@public/icons'; +import Link from 'next/link'; + +const ProfileBookshelfPresenter = ({ + bookshelfId, + books, + likeCount, +}: APIBookshelf) => { + return ( +
+
+

책장

+
+ +
+ +
{likeCount}
+
+
+ + + +
+
+ +
+ + +
+
+
+ ); +}; + +export default ProfileBookshelfPresenter; diff --git a/src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx b/src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx new file mode 100644 index 00000000..61484091 --- /dev/null +++ b/src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx @@ -0,0 +1,19 @@ +import ProfileBookshelfPresenter from './ProfileBookshelfPresenter'; +import useUserSummaryBookshlefQuery from '@/queries/bookshelf/useUserSummaryBookshelfQuery'; +import type { APIUser } from '@/types/user'; + +const UserProfileBookshelfContainer = ({ + userId, +}: { + userId: APIUser['userId']; +}) => { + const { isSuccess, data } = useUserSummaryBookshlefQuery(userId, { + suspense: true, + }); + + if (!isSuccess) return null; + + return ; +}; + +export default UserProfileBookshelfContainer; diff --git a/src/v1/profile/info/MyProfileInfoContainer.tsx b/src/v1/profile/info/MyProfileInfoContainer.tsx new file mode 100644 index 00000000..cfef3cdf --- /dev/null +++ b/src/v1/profile/info/MyProfileInfoContainer.tsx @@ -0,0 +1,23 @@ +import useMyProfileQuery from '@/queries/user/useMyProfileQuery'; +import { usePathname, useRouter } from 'next/navigation'; +import { useEffect } from 'react'; +import ProfileInfoPresenter from './ProfileInfoPresenter'; + +const MyProfileContainer = () => { + const { data } = useMyProfileQuery(); + const { replace } = useRouter(); + const pathname = usePathname(); + + useEffect(() => { + const { + nickname, + job: { jobGroupName, jobName }, + } = data; + const isSavedAdditionalInfo = !!(nickname && jobGroupName && jobName); + if (!isSavedAdditionalInfo) replace(`${pathname}/add`); + }, [data, pathname, replace]); + + return ; +}; + +export default MyProfileContainer; diff --git a/src/v1/profile/info/ProfileInfo.tsx b/src/v1/profile/info/ProfileInfo.tsx new file mode 100644 index 00000000..294ca743 --- /dev/null +++ b/src/v1/profile/info/ProfileInfo.tsx @@ -0,0 +1,56 @@ +import { ReactNode, Suspense } from 'react'; +import MyProfileContainer from './MyProfileInfoContainer'; +import UserProfileInfoContainer from './UserProfileInfoContainer'; +import { Skeleton, SkeletonCircle, VStack } from '@chakra-ui/react'; +import { QueryErrorResetBoundary } from '@tanstack/react-query'; +import { ErrorBoundary } from 'react-error-boundary'; +import type { APIUser } from '@/types/user'; +import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; +import useMounted from '@/hooks/useMounted'; + +type ProfileInfoProps = { + children?: ReactNode; + userId: 'me' | APIUser['userId']; +}; + +const ProfileInfo = ({ userId, children }: ProfileInfoProps) => { + const mounted = useMounted(); + + if (!mounted) return null; + + return ( + + {({ reset }) => ( + ( + + )} + > + }> + {userId === 'me' ? ( + + ) : ( + + )} + {children && children} + + + )} + + ); +}; + +export default ProfileInfo; + +const ProfileInfoSkelenton = () => { + return ( + + + + + ); +}; diff --git a/src/v1/profile/info/ProfileInfoPresenter.tsx b/src/v1/profile/info/ProfileInfoPresenter.tsx new file mode 100644 index 00000000..af623348 --- /dev/null +++ b/src/v1/profile/info/ProfileInfoPresenter.tsx @@ -0,0 +1,43 @@ +import type { APIUser } from '@/types/user'; +import Avatar from '@/v1/base/Avatar'; +import Badge from '@/v1/base/Badge'; + +type ProfileInfoProps = Pick; + +// COMMENT: 프로필 정보 조회 API 스키마 변경으로 email, oauthnickname props 제거 +const ProfileInfoPresenter = ({ + nickname, + profileImage, + job: { jobGroupKoreanName, jobNameKoreanName }, +}: ProfileInfoProps) => { + return ( +
+
+ + {jobGroupKoreanName} + + + {jobNameKoreanName} + +
+
+ +

+ {nickname}님의 공간 +

+
+
+ ); +}; + +export default ProfileInfoPresenter; diff --git a/src/v1/profile/info/UserProfileInfoContainer.tsx b/src/v1/profile/info/UserProfileInfoContainer.tsx new file mode 100644 index 00000000..c92e3131 --- /dev/null +++ b/src/v1/profile/info/UserProfileInfoContainer.tsx @@ -0,0 +1,15 @@ +import useUserProfileQuery from '@/queries/user/useUserProfileQuery'; +import ProfileInfoPresenter from './ProfileInfoPresenter'; +import type { APIUser } from '@/types/user'; + +const UserProfileInfoContainer = ({ + userId, +}: { + userId: APIUser['userId']; +}) => { + const { data } = useUserProfileQuery(userId); + + return ; +}; + +export default UserProfileInfoContainer; From c66aeb9fdfdffd5dccdd83ec2699b68feed402bf Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 18:32:41 +0900 Subject: [PATCH 03/29] =?UTF-8?q?feat:=20=20=EB=82=B4=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=83=88=EB=A1=9C?= =?UTF-8?q?=EC=9A=B4=20=EB=94=94=EC=9E=90=EC=9D=B8=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/group/page.tsx | 5 ++ src/app/profile/me/page.tsx | 57 +++++++------------ .../bookShelf/ProfileBookshelfPresenter.tsx | 2 +- src/v1/profile/group/ProfileGroup.tsx | 40 +++++++++++++ .../profile/group/ProfileGroupContainer.tsx | 17 ++++++ .../profile/group/ProfileGroupPresenter.tsx | 41 +++++++++++++ 6 files changed, 123 insertions(+), 39 deletions(-) create mode 100644 src/app/profile/me/group/page.tsx create mode 100644 src/v1/profile/group/ProfileGroup.tsx create mode 100644 src/v1/profile/group/ProfileGroupContainer.tsx create mode 100644 src/v1/profile/group/ProfileGroupPresenter.tsx diff --git a/src/app/profile/me/group/page.tsx b/src/app/profile/me/group/page.tsx new file mode 100644 index 00000000..d8fb99f9 --- /dev/null +++ b/src/app/profile/me/group/page.tsx @@ -0,0 +1,5 @@ +const UserGroupPage = () => { + return '준비중입니다.'; +}; + +export default UserGroupPage; diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index 775cb20b..ae875612 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -1,54 +1,35 @@ 'use client'; -import { Box, VStack } from '@chakra-ui/react'; -import Link from 'next/link'; -import { usePathname, useRouter } from 'next/navigation'; - -import AuthRequired from '@/ui/AuthRequired'; -import ProfileInfo from '@/ui/Profile/ProfileInfo'; -import ProfileBookShelf from '@/ui/Profile/ProfileBookshelf'; -import ProfileGroup from '@/ui/Profile/ProfileGroup'; -import Button from '@/ui/common/Button'; -import { Menu, MenuItem } from '@/ui/common/Menu'; +import { useRouter } from 'next/navigation'; import { removeAuth } from '@/utils/helpers'; import userAPI from '@/apis/user'; +import TopHeader from '@/v1/base/TopHeader'; +import ProfileInfo from '@/v1/profile/info/ProfileInfo'; +import ProfileBookShelf from '@/v1/profile/bookShelf/ProfileBookShelf'; +import ProfileGroup from '@/v1/profile/group/ProfileGroup'; + +const USER_ID = 'me'; const MyProfilePage = () => { - const { push } = useRouter(); - const pathname = usePathname(); + const router = useRouter(); const handleLogoutButtonClick = async () => { await userAPI.logout(); removeAuth(); - push('/'); + router.push('/'); }; return ( - - - - - - - - - - - - - - - - + <> + + + +
+ + + +
+ ); }; diff --git a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx index cdf0a694..0748e183 100644 --- a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx +++ b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx @@ -34,7 +34,7 @@ const ProfileBookshelfPresenter = ({
-
+
diff --git a/src/v1/profile/group/ProfileGroup.tsx b/src/v1/profile/group/ProfileGroup.tsx new file mode 100644 index 00000000..19978e45 --- /dev/null +++ b/src/v1/profile/group/ProfileGroup.tsx @@ -0,0 +1,40 @@ +import useMounted from '@/hooks/useMounted'; +import { APIUser } from '@/types/user'; +import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; +import { Skeleton } from '@chakra-ui/react'; +import { QueryErrorResetBoundary } from '@tanstack/react-query'; +import { Suspense } from 'react'; +import { ErrorBoundary } from 'react-error-boundary'; +import ProfileGroupContainer from './ProfileGroupContainer'; + +const ProfileGroup = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { + const mounted = useMounted(); + + if (!mounted) return null; + + return ( + + {({ reset }) => ( + ( + + )} + > + }> + + + + )} + + ); +}; + +export default ProfileGroup; + +const ProfileBookShelfSkelenton = () => { + return ; +}; diff --git a/src/v1/profile/group/ProfileGroupContainer.tsx b/src/v1/profile/group/ProfileGroupContainer.tsx new file mode 100644 index 00000000..e519014b --- /dev/null +++ b/src/v1/profile/group/ProfileGroupContainer.tsx @@ -0,0 +1,17 @@ +import useMyGroupsQuery from '@/queries/group/useMyGroupsQuery'; +import { APIUser } from '@/types/user'; +import ProfileGroupPresenter from './ProfileGroupPresenter'; + +const ProfileGroupContainer = ({ + userId, +}: { + userId: 'me' | APIUser['userId']; +}) => { + const { isSuccess, data } = useMyGroupsQuery({ suspense: true }); + + if (!isSuccess) return null; + + return ; +}; + +export default ProfileGroupContainer; diff --git a/src/v1/profile/group/ProfileGroupPresenter.tsx b/src/v1/profile/group/ProfileGroupPresenter.tsx new file mode 100644 index 00000000..38c99fae --- /dev/null +++ b/src/v1/profile/group/ProfileGroupPresenter.tsx @@ -0,0 +1,41 @@ +import { APIGroup } from '@/types/group'; +import { APIUser } from '@/types/user'; +import SimpleBookGroupCard from '@/v1/bookGroup/SimpleBookGroupCard'; +import { IconArrowRight } from '@public/icons'; +import Link from 'next/link'; + +interface ProfileGroupPresenterProps { + userId: 'me' | APIUser['userId']; + bookGroups: APIGroup[]; +} + +const ProfileGroupPresenter = ({ + userId, + bookGroups, +}: ProfileGroupPresenterProps) => { + return ( +
+
+

참여한 모임

+ + + +
+ +
    + {bookGroups.map(({ bookGroupId, title, book: { imageUrl } }) => ( +
  • + +
  • + ))} +
+
+ ); +}; + +export default ProfileGroupPresenter; From 3f714051b233fd6b9912cce85ffe59dcf37e2df8 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 18:54:58 +0900 Subject: [PATCH 04/29] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20Chakra=20UI?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MyProfileBookshelfContainer.tsx | 14 --- .../ProfileBookshelfPresenter.tsx | 45 --------- .../UserProfileBookshelfContainer.tsx | 19 ---- src/ui/Profile/ProfileBookshelf/index.tsx | 45 --------- src/ui/Profile/ProfileForm.tsx | 99 ------------------- .../ProfileGroup/ProfileGroupContainer.tsx | 12 --- .../ProfileGroup/ProfileGroupPresenter.tsx | 28 ------ src/ui/Profile/ProfileGroup/index.tsx | 39 -------- .../ProfileInfo/MyProfileInfoContainer.tsx | 23 ----- .../ProfileInfo/ProfileInfoPresenter.tsx | 34 ------- .../ProfileInfo/UserProfileInfoContainer.tsx | 15 --- src/ui/Profile/ProfileInfo/index.tsx | 56 ----------- .../QueryErrorBoundaryFallback/index.tsx | 31 ------ src/v1/base/QueryErrorBoundaryFallback.tsx | 20 ++++ src/v1/profile/bookShelf/ProfileBookShelf.tsx | 12 ++- src/v1/profile/group/ProfileGroup.tsx | 13 ++- src/v1/profile/info/ProfileInfo.tsx | 14 ++- 17 files changed, 42 insertions(+), 477 deletions(-) delete mode 100644 src/ui/Profile/ProfileBookshelf/MyProfileBookshelfContainer.tsx delete mode 100644 src/ui/Profile/ProfileBookshelf/ProfileBookshelfPresenter.tsx delete mode 100644 src/ui/Profile/ProfileBookshelf/UserProfileBookshelfContainer.tsx delete mode 100644 src/ui/Profile/ProfileBookshelf/index.tsx delete mode 100644 src/ui/Profile/ProfileForm.tsx delete mode 100644 src/ui/Profile/ProfileGroup/ProfileGroupContainer.tsx delete mode 100644 src/ui/Profile/ProfileGroup/ProfileGroupPresenter.tsx delete mode 100644 src/ui/Profile/ProfileGroup/index.tsx delete mode 100644 src/ui/Profile/ProfileInfo/MyProfileInfoContainer.tsx delete mode 100644 src/ui/Profile/ProfileInfo/ProfileInfoPresenter.tsx delete mode 100644 src/ui/Profile/ProfileInfo/UserProfileInfoContainer.tsx delete mode 100644 src/ui/Profile/ProfileInfo/index.tsx delete mode 100644 src/ui/common/QueryErrorBoundaryFallback/index.tsx create mode 100644 src/v1/base/QueryErrorBoundaryFallback.tsx diff --git a/src/ui/Profile/ProfileBookshelf/MyProfileBookshelfContainer.tsx b/src/ui/Profile/ProfileBookshelf/MyProfileBookshelfContainer.tsx deleted file mode 100644 index 5a0a9ab7..00000000 --- a/src/ui/Profile/ProfileBookshelf/MyProfileBookshelfContainer.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import ProfileBookshelfPresenter from './ProfileBookshelfPresenter'; -import useMySummaryBookshlefQuery from '@/queries/bookshelf/useMySummaryBookshelfQuery'; - -const MyProfileBookshelfContainer = () => { - const { isSuccess, data } = useMySummaryBookshlefQuery({ - suspense: true, - }); - - if (!isSuccess) return null; - - return ; -}; - -export default MyProfileBookshelfContainer; diff --git a/src/ui/Profile/ProfileBookshelf/ProfileBookshelfPresenter.tsx b/src/ui/Profile/ProfileBookshelf/ProfileBookshelfPresenter.tsx deleted file mode 100644 index 1e08d26f..00000000 --- a/src/ui/Profile/ProfileBookshelf/ProfileBookshelfPresenter.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { APIBookshelf } from '@/types/bookshelf'; -import { LikeCount } from '@/ui/common/BookshelfLike/'; -import { Flex, Text, VStack } from '@chakra-ui/react'; -import Link from 'next/link'; -import IconButton from '../../common/IconButton'; -import InteractiveBookShelf from '../../InteractiveBookShelf'; - -const ProfileBookshelfPresenter = ({ - bookshelfId, - bookshelfName, - books, - likeCount, -}: APIBookshelf) => { - return ( - - - - {`${bookshelfName}`} - - - - - - - {books.length === 0 ? ( - 책장이 비어있습니다. - ) : ( - - )} - - ); -}; - -export default ProfileBookshelfPresenter; diff --git a/src/ui/Profile/ProfileBookshelf/UserProfileBookshelfContainer.tsx b/src/ui/Profile/ProfileBookshelf/UserProfileBookshelfContainer.tsx deleted file mode 100644 index 61484091..00000000 --- a/src/ui/Profile/ProfileBookshelf/UserProfileBookshelfContainer.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import ProfileBookshelfPresenter from './ProfileBookshelfPresenter'; -import useUserSummaryBookshlefQuery from '@/queries/bookshelf/useUserSummaryBookshelfQuery'; -import type { APIUser } from '@/types/user'; - -const UserProfileBookshelfContainer = ({ - userId, -}: { - userId: APIUser['userId']; -}) => { - const { isSuccess, data } = useUserSummaryBookshlefQuery(userId, { - suspense: true, - }); - - if (!isSuccess) return null; - - return ; -}; - -export default UserProfileBookshelfContainer; diff --git a/src/ui/Profile/ProfileBookshelf/index.tsx b/src/ui/Profile/ProfileBookshelf/index.tsx deleted file mode 100644 index 1aedcccb..00000000 --- a/src/ui/Profile/ProfileBookshelf/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; -import { Skeleton } from '@chakra-ui/react'; -import { QueryErrorResetBoundary } from '@tanstack/react-query'; -import { Suspense } from 'react'; -import { ErrorBoundary } from 'react-error-boundary'; -import type { APIUser } from '@/types/user'; -import MyProfileBookshelfContainer from './MyProfileBookshelfContainer'; -import UserProfileBookshelfContainer from './UserProfileBookshelfContainer'; -import useMounted from '@/hooks/useMounted'; - -const ProfileBookShelf = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { - const mounted = useMounted(); - - if (!mounted) return null; - - return ( - - {({ reset }) => ( - ( - - )} - > - }> - {userId === 'me' ? ( - - ) : ( - - )} - - - )} - - ); -}; - -export default ProfileBookShelf; - -const ProfileBookShelfSkelenton = () => { - return ; -}; diff --git a/src/ui/Profile/ProfileForm.tsx b/src/ui/Profile/ProfileForm.tsx deleted file mode 100644 index 0e27a766..00000000 --- a/src/ui/Profile/ProfileForm.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { useToast } from '@/hooks/toast'; -import useMyProfileMutation from '@/queries/user/useMyProfileMutation'; -import { APIJobGroup } from '@/types/job'; -import { APIUser } from '@/types/user'; -import { Box, useTheme, VStack } from '@chakra-ui/react'; -import { isAxiosError } from 'axios'; -import { useRouter } from 'next/navigation'; -import { FormProvider, useForm } from 'react-hook-form'; -import FormInput from '../FormInput'; -import FormSelect from '../FormSelect'; - -interface ProfileFormProps { - profile: Pick; - jobGroups: APIJobGroup[]; -} - -const ProfileForm = ({ jobGroups, profile }: ProfileFormProps) => { - const theme = useTheme(); - const myProfileMutation = useMyProfileMutation(); - const router = useRouter(); - - const { showToast } = useToast(); - - const onSubmit: Parameters[0] = ({ - nickname, - jobGroup, - job, - }) => { - myProfileMutation.mutateAsync( - { nickname, job: { jobGroup, jobName: job } }, - { - onSuccess: () => { - router.replace('/profile/me'); - }, - onError: error => { - if (isAxiosError(error) && error.response) { - const { message } = error.response.data; - message && showToast({ message }); - } - }, - } - ); - }; - - const methods = useForm({ - mode: 'all', - defaultValues: { - nickname: profile.nickname || '', - jobGroup: profile.job.jobGroupName || '', - job: profile.job.jobName || '', - }, - }); - - return ( - - - - - - {jobGroups.map(({ name, koreanName }) => ( - - ))} - - - {jobGroups - .find(({ name }) => name === methods.watch('jobGroup')) - ?.jobs.map(({ name, koreanName }) => ( - - ))} - - - - 저장 - - - - ); -}; - -export default ProfileForm; diff --git a/src/ui/Profile/ProfileGroup/ProfileGroupContainer.tsx b/src/ui/Profile/ProfileGroup/ProfileGroupContainer.tsx deleted file mode 100644 index 02843d30..00000000 --- a/src/ui/Profile/ProfileGroup/ProfileGroupContainer.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import useMyGroupsQuery from '@/queries/group/useMyGroupsQuery'; -import ProfileGroupPresenter from './ProfileGroupPresenter'; - -const ProfileGroupContainer = () => { - const { isSuccess, data } = useMyGroupsQuery({ suspense: true }); - - if (!isSuccess) return null; - - return ; -}; - -export default ProfileGroupContainer; diff --git a/src/ui/Profile/ProfileGroup/ProfileGroupPresenter.tsx b/src/ui/Profile/ProfileGroup/ProfileGroupPresenter.tsx deleted file mode 100644 index e83d85e8..00000000 --- a/src/ui/Profile/ProfileGroup/ProfileGroupPresenter.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { APIGroup } from '@/types/group'; -import { Box, Flex, Text, VStack } from '@chakra-ui/react'; -import GroupListItem from '../../Group/GroupList/GroupListItem'; - -interface ProfileGroupPresenterProps { - bookGroups: APIGroup[]; -} - -const ProfileGroupPresenter = ({ bookGroups }: ProfileGroupPresenterProps) => { - return ( - - - 내가 참여한 모임 - - - - {bookGroups.map(group => ( - - - - ))} - - - - ); -}; - -export default ProfileGroupPresenter; diff --git a/src/ui/Profile/ProfileGroup/index.tsx b/src/ui/Profile/ProfileGroup/index.tsx deleted file mode 100644 index f6196488..00000000 --- a/src/ui/Profile/ProfileGroup/index.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import useMounted from '@/hooks/useMounted'; -import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; -import { Skeleton } from '@chakra-ui/react'; -import { QueryErrorResetBoundary } from '@tanstack/react-query'; -import { Suspense } from 'react'; -import { ErrorBoundary } from 'react-error-boundary'; -import ProfileGroupContainer from './ProfileGroupContainer'; - -const ProfileGroup = () => { - const mounted = useMounted(); - - if (!mounted) return null; - - return ( - - {({ reset }) => ( - ( - - )} - > - }> - - - - )} - - ); -}; - -export default ProfileGroup; - -const ProfileBookShelfSkelenton = () => { - return ; -}; diff --git a/src/ui/Profile/ProfileInfo/MyProfileInfoContainer.tsx b/src/ui/Profile/ProfileInfo/MyProfileInfoContainer.tsx deleted file mode 100644 index cfef3cdf..00000000 --- a/src/ui/Profile/ProfileInfo/MyProfileInfoContainer.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import useMyProfileQuery from '@/queries/user/useMyProfileQuery'; -import { usePathname, useRouter } from 'next/navigation'; -import { useEffect } from 'react'; -import ProfileInfoPresenter from './ProfileInfoPresenter'; - -const MyProfileContainer = () => { - const { data } = useMyProfileQuery(); - const { replace } = useRouter(); - const pathname = usePathname(); - - useEffect(() => { - const { - nickname, - job: { jobGroupName, jobName }, - } = data; - const isSavedAdditionalInfo = !!(nickname && jobGroupName && jobName); - if (!isSavedAdditionalInfo) replace(`${pathname}/add`); - }, [data, pathname, replace]); - - return ; -}; - -export default MyProfileContainer; diff --git a/src/ui/Profile/ProfileInfo/ProfileInfoPresenter.tsx b/src/ui/Profile/ProfileInfo/ProfileInfoPresenter.tsx deleted file mode 100644 index 14ee3c31..00000000 --- a/src/ui/Profile/ProfileInfo/ProfileInfoPresenter.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Avatar, Flex, HStack, Text, VStack } from '@chakra-ui/react'; -import type { APIUser } from '@/types/user'; -import IconButton from '../../common/IconButton'; - -type ProfileInfoProps = Pick; - -// COMMENT: 프로필 정보 조회 API 스키마 변경으로 email, oauthnickname props 제거 -const ProfileInfoPresenter = ({ - nickname, - profileImage, - job: { jobGroupKoreanName, jobNameKoreanName }, -}: ProfileInfoProps) => { - return ( - - - - - {nickname} - {/* {email} */} - - - - - - {jobGroupKoreanName && jobNameKoreanName - ? `${jobGroupKoreanName} / ${jobNameKoreanName}` - : '직업이 등록되지 않았습니다.'} - - - - ); -}; - -export default ProfileInfoPresenter; diff --git a/src/ui/Profile/ProfileInfo/UserProfileInfoContainer.tsx b/src/ui/Profile/ProfileInfo/UserProfileInfoContainer.tsx deleted file mode 100644 index c92e3131..00000000 --- a/src/ui/Profile/ProfileInfo/UserProfileInfoContainer.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import useUserProfileQuery from '@/queries/user/useUserProfileQuery'; -import ProfileInfoPresenter from './ProfileInfoPresenter'; -import type { APIUser } from '@/types/user'; - -const UserProfileInfoContainer = ({ - userId, -}: { - userId: APIUser['userId']; -}) => { - const { data } = useUserProfileQuery(userId); - - return ; -}; - -export default UserProfileInfoContainer; diff --git a/src/ui/Profile/ProfileInfo/index.tsx b/src/ui/Profile/ProfileInfo/index.tsx deleted file mode 100644 index 294ca743..00000000 --- a/src/ui/Profile/ProfileInfo/index.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { ReactNode, Suspense } from 'react'; -import MyProfileContainer from './MyProfileInfoContainer'; -import UserProfileInfoContainer from './UserProfileInfoContainer'; -import { Skeleton, SkeletonCircle, VStack } from '@chakra-ui/react'; -import { QueryErrorResetBoundary } from '@tanstack/react-query'; -import { ErrorBoundary } from 'react-error-boundary'; -import type { APIUser } from '@/types/user'; -import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; -import useMounted from '@/hooks/useMounted'; - -type ProfileInfoProps = { - children?: ReactNode; - userId: 'me' | APIUser['userId']; -}; - -const ProfileInfo = ({ userId, children }: ProfileInfoProps) => { - const mounted = useMounted(); - - if (!mounted) return null; - - return ( - - {({ reset }) => ( - ( - - )} - > - }> - {userId === 'me' ? ( - - ) : ( - - )} - {children && children} - - - )} - - ); -}; - -export default ProfileInfo; - -const ProfileInfoSkelenton = () => { - return ( - - - - - ); -}; diff --git a/src/ui/common/QueryErrorBoundaryFallback/index.tsx b/src/ui/common/QueryErrorBoundaryFallback/index.tsx deleted file mode 100644 index 407ef771..00000000 --- a/src/ui/common/QueryErrorBoundaryFallback/index.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Text, VStack } from '@chakra-ui/react'; -import Button from '../Button'; -import type { BorderProps, LayoutProps } from '@chakra-ui/react'; - -const QueryErrorBounaryFallback = ({ - resetErrorBoundary, - minH, - border = '1px solid #dddddd', -}: { - resetErrorBoundary: (...args: unknown[]) => void; - minH?: LayoutProps['minH']; - border?: BorderProps['border']; -}) => { - return ( - - 데이터를 불러오는 중 문제가 발생했어요! - - - ); -}; - -export default QueryErrorBounaryFallback; diff --git a/src/v1/base/QueryErrorBoundaryFallback.tsx b/src/v1/base/QueryErrorBoundaryFallback.tsx new file mode 100644 index 00000000..3a727f49 --- /dev/null +++ b/src/v1/base/QueryErrorBoundaryFallback.tsx @@ -0,0 +1,20 @@ +import Button from '@/v1/base/Button'; + +const QueryErrorBoundaryFallback = ({ + resetErrorBoundary, +}: { + resetErrorBoundary: (...args: unknown[]) => void; +}) => { + return ( +
+

+ 데이터를 불러오는 중 문제가 발생했어요. +

+ +
+ ); +}; + +export default QueryErrorBoundaryFallback; diff --git a/src/v1/profile/bookShelf/ProfileBookShelf.tsx b/src/v1/profile/bookShelf/ProfileBookShelf.tsx index 6202d243..3f87bf6b 100644 --- a/src/v1/profile/bookShelf/ProfileBookShelf.tsx +++ b/src/v1/profile/bookShelf/ProfileBookShelf.tsx @@ -1,4 +1,4 @@ -import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; +import QueryErrorBoundaryFallback from '@/v1/base/QueryErrorBoundaryFallback'; import { QueryErrorResetBoundary } from '@tanstack/react-query'; import { Suspense } from 'react'; import { ErrorBoundary } from 'react-error-boundary'; @@ -6,6 +6,7 @@ import type { APIUser } from '@/types/user'; import MyProfileBookshelfContainer from './MyProfileBookshelfContainer'; import UserProfileBookshelfContainer from './UserProfileBookshelfContainer'; import useMounted from '@/hooks/useMounted'; +import Loading from '@/v1/base/Loading'; const ProfileBookShelf = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { const mounted = useMounted(); @@ -18,8 +19,7 @@ const ProfileBookShelf = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { ( - )} @@ -40,5 +40,9 @@ const ProfileBookShelf = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { export default ProfileBookShelf; const ProfileBookShelfSkelenton = () => { - return null; + return ( +
+ +
+ ); }; diff --git a/src/v1/profile/group/ProfileGroup.tsx b/src/v1/profile/group/ProfileGroup.tsx index 19978e45..a00294da 100644 --- a/src/v1/profile/group/ProfileGroup.tsx +++ b/src/v1/profile/group/ProfileGroup.tsx @@ -1,7 +1,7 @@ import useMounted from '@/hooks/useMounted'; import { APIUser } from '@/types/user'; -import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; -import { Skeleton } from '@chakra-ui/react'; +import Loading from '@/v1/base/Loading'; +import QueryErrorBoundaryFallback from '@/v1/base/QueryErrorBoundaryFallback'; import { QueryErrorResetBoundary } from '@tanstack/react-query'; import { Suspense } from 'react'; import { ErrorBoundary } from 'react-error-boundary'; @@ -18,8 +18,7 @@ const ProfileGroup = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { ( - )} @@ -36,5 +35,9 @@ const ProfileGroup = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { export default ProfileGroup; const ProfileBookShelfSkelenton = () => { - return ; + return ( +
+ +
+ ); }; diff --git a/src/v1/profile/info/ProfileInfo.tsx b/src/v1/profile/info/ProfileInfo.tsx index 294ca743..e8b41a11 100644 --- a/src/v1/profile/info/ProfileInfo.tsx +++ b/src/v1/profile/info/ProfileInfo.tsx @@ -1,12 +1,12 @@ import { ReactNode, Suspense } from 'react'; import MyProfileContainer from './MyProfileInfoContainer'; import UserProfileInfoContainer from './UserProfileInfoContainer'; -import { Skeleton, SkeletonCircle, VStack } from '@chakra-ui/react'; import { QueryErrorResetBoundary } from '@tanstack/react-query'; import { ErrorBoundary } from 'react-error-boundary'; import type { APIUser } from '@/types/user'; -import QueryErrorBounaryFallback from '@/ui/common/QueryErrorBoundaryFallback'; +import QueryErrorBoundaryFallback from '@/v1/base/QueryErrorBoundaryFallback'; import useMounted from '@/hooks/useMounted'; +import Loading from '@/v1/base/Loading'; type ProfileInfoProps = { children?: ReactNode; @@ -24,8 +24,7 @@ const ProfileInfo = ({ userId, children }: ProfileInfoProps) => { ( - )} @@ -48,9 +47,8 @@ export default ProfileInfo; const ProfileInfoSkelenton = () => { return ( - - - - +
+ +
); }; From 6595d5834ac7d98257455be2b4f2df69db00c0af Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 19:25:31 +0900 Subject: [PATCH 05/29] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=AC=EB=B6=80=EC=97=90=20=EB=94=B0=EB=A5=B8=20=EB=82=B4=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=EB=B6=80=20=EB=A0=8C=EB=8D=94=EB=A7=81=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 55 ++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index ae875612..376ca106 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -1,16 +1,69 @@ 'use client'; import { useRouter } from 'next/navigation'; -import { removeAuth } from '@/utils/helpers'; +import { isAuthed, removeAuth } from '@/utils/helpers'; import userAPI from '@/apis/user'; import TopHeader from '@/v1/base/TopHeader'; import ProfileInfo from '@/v1/profile/info/ProfileInfo'; import ProfileBookShelf from '@/v1/profile/bookShelf/ProfileBookShelf'; import ProfileGroup from '@/v1/profile/group/ProfileGroup'; +import Avatar from '@/v1/base/Avatar'; +import Link from 'next/link'; +import { IconArrowRight } from '@public/icons'; +import BookShelf from '@/v1/bookShelf/BookShelf'; const USER_ID = 'me'; const MyProfilePage = () => { + return isAuthed() ? : ; +}; + +const MyProfileForUnAuth = () => { + return ( + <> + +
+
+
+ +
+

로그인 / 회원가입

+

+ 카카오로 3초만에 가입할 수 있어요. +

+
+ + + +
+
+
+

책장

+
+ +
+ +
+

책장이 비었어요.

+
+
+
+
+
+

참여한 모임

+
+

+ 참여 중인 모임이 없어요. +

+
+
+
+
+ + ); +}; + +const MyProfileForAuth = () => { const router = useRouter(); const handleLogoutButtonClick = async () => { From 06d5558ce5bdeec242306cff09a53d550bdb390f Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 19:49:51 +0900 Subject: [PATCH 06/29] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EB=8A=94=20=EC=BF=BC=EB=A6=AC=ED=82=A4=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/group/page.tsx | 2 +- src/queries/bookshelf/key.ts | 1 + .../index.ts => useMySummaryBookShelfQuery.ts} | 3 ++- .../index.ts => useUserSummaryBookShelfQuery.ts} | 7 ++++--- src/queries/group/key.ts | 1 + src/queries/group/useGroupInfoQuery/index.tsx | 15 --------------- .../index.ts => useMyGroupQuery.ts} | 3 ++- .../bookShelf/MyProfileBookshelfContainer.tsx | 2 +- .../bookShelf/UserProfileBookshelfContainer.tsx | 2 +- src/v1/profile/group/ProfileGroupContainer.tsx | 2 +- 10 files changed, 14 insertions(+), 24 deletions(-) rename src/queries/bookshelf/{useMySummaryBookshelfQuery/index.ts => useMySummaryBookShelfQuery.ts} (86%) rename src/queries/bookshelf/{useUserSummaryBookshelfQuery/index.ts => useUserSummaryBookShelfQuery.ts} (73%) delete mode 100644 src/queries/group/useGroupInfoQuery/index.tsx rename src/queries/group/{useMyGroupsQuery/index.ts => useMyGroupQuery.ts} (86%) diff --git a/src/app/group/page.tsx b/src/app/group/page.tsx index c5effde5..727eaec5 100644 --- a/src/app/group/page.tsx +++ b/src/app/group/page.tsx @@ -6,7 +6,7 @@ import SimpleBookGroupCard from '@/v1/bookGroup/SimpleBookGroupCard'; import DetailBookGroupCard from '@/v1/bookGroup/DetailBookGroupCard'; import useEntireGroupsQuery from '@/queries/group/useEntireGroupsQuery'; -import useMyGroupsQuery from '@/queries/group/useMyGroupsQuery'; +import useMyGroupsQuery from '@/queries/group/useMyGroupQuery'; import { Skeleton, VStack } from '@chakra-ui/react'; import { useEffect } from 'react'; import { useInView } from 'react-intersection-observer'; diff --git a/src/queries/bookshelf/key.ts b/src/queries/bookshelf/key.ts index ff7a145e..3264767b 100644 --- a/src/queries/bookshelf/key.ts +++ b/src/queries/bookshelf/key.ts @@ -6,6 +6,7 @@ const bookShelfKeys = { [...bookShelfKeys.all, bookshelfId] as const, books: (bookshelfId: APIBookshelf['bookshelfId']) => [...bookShelfKeys.all, bookshelfId, 'books'] as const, + summary: (userId: string) => [...bookShelfKeys.all, 'summary', userId], }; export default bookShelfKeys; diff --git a/src/queries/bookshelf/useMySummaryBookshelfQuery/index.ts b/src/queries/bookshelf/useMySummaryBookShelfQuery.ts similarity index 86% rename from src/queries/bookshelf/useMySummaryBookshelfQuery/index.ts rename to src/queries/bookshelf/useMySummaryBookShelfQuery.ts index a359cd56..03f03527 100644 --- a/src/queries/bookshelf/useMySummaryBookshelfQuery/index.ts +++ b/src/queries/bookshelf/useMySummaryBookShelfQuery.ts @@ -2,10 +2,11 @@ import bookshelfAPI from '@/apis/bookshelf'; import { useQuery } from '@tanstack/react-query'; import type { QueryOptions } from '@/types/query'; import type { APIBookshelf } from '@/types/bookshelf'; +import bookShelfKeys from './key'; const useMySummaryBookshlefQuery = (options?: QueryOptions) => useQuery( - ['summaryBookshlef', 'me'], + bookShelfKeys.summary('me'), () => bookshelfAPI.getMySummaryBookshelf().then(({ data }) => data), options ); diff --git a/src/queries/bookshelf/useUserSummaryBookshelfQuery/index.ts b/src/queries/bookshelf/useUserSummaryBookShelfQuery.ts similarity index 73% rename from src/queries/bookshelf/useUserSummaryBookshelfQuery/index.ts rename to src/queries/bookshelf/useUserSummaryBookShelfQuery.ts index 33f3da4d..d6795eac 100644 --- a/src/queries/bookshelf/useUserSummaryBookshelfQuery/index.ts +++ b/src/queries/bookshelf/useUserSummaryBookShelfQuery.ts @@ -1,15 +1,16 @@ import bookshelfAPI from '@/apis/bookshelf'; -import { useQuery } from '@tanstack/react-query'; import type { QueryOptions } from '@/types/query'; import type { APIUser } from '@/types/user'; import type { APIBookshelf } from '@/types/bookshelf'; +import bookShelfKeys from './key'; +import useQueryWithSuspense from '@/hooks/useQueryWithSuspense'; const useUserSummaryBookshlefQuery = ( userId: APIUser['userId'], options?: QueryOptions ) => - useQuery( - ['summaryBookshlef', String(userId)], + useQueryWithSuspense( + bookShelfKeys.summary(String(userId)), () => bookshelfAPI.getUserSummaryBookshelf({ userId }).then(({ data }) => data), options diff --git a/src/queries/group/key.ts b/src/queries/group/key.ts index 1fba2efb..f3e4171b 100644 --- a/src/queries/group/key.ts +++ b/src/queries/group/key.ts @@ -7,6 +7,7 @@ const bookGroupKeys = { [...bookGroupKeys.details(), id] as const, comments: (id: APIGroupDetail['bookGroupId']) => [...bookGroupKeys.details(), id, 'comments'] as const, + me: () => [...bookGroupKeys.all, 'me'], }; export default bookGroupKeys; diff --git a/src/queries/group/useGroupInfoQuery/index.tsx b/src/queries/group/useGroupInfoQuery/index.tsx deleted file mode 100644 index 1c65513e..00000000 --- a/src/queries/group/useGroupInfoQuery/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import GroupAPI from '@/apis/group'; -import { useQuery } from '@tanstack/react-query'; -import { APIGroupDetail } from '@/types/group'; - -const useGroupInfoQuery = ({ - bookGroupId, -}: { - bookGroupId: APIGroupDetail['bookGroupId']; -}) => { - return useQuery(['groupDetailInfo', bookGroupId], () => - GroupAPI.getGroupDetailInfo({ bookGroupId }).then(({ data }) => data) - ); -}; - -export default useGroupInfoQuery; diff --git a/src/queries/group/useMyGroupsQuery/index.ts b/src/queries/group/useMyGroupQuery.ts similarity index 86% rename from src/queries/group/useMyGroupsQuery/index.ts rename to src/queries/group/useMyGroupQuery.ts index 0359c691..6d77c7ad 100644 --- a/src/queries/group/useMyGroupsQuery/index.ts +++ b/src/queries/group/useMyGroupQuery.ts @@ -2,10 +2,11 @@ import GroupAPI from '@/apis/group'; import { useQuery } from '@tanstack/react-query'; import type { QueryOptions } from '@/types/query'; import type { APIGroupPagination } from '@/types/group'; +import bookGroupKeys from './key'; const useMyGroupsQuery = (options?: QueryOptions) => useQuery( - ['groups', 'me'], + bookGroupKeys.me(), () => GroupAPI.getMyGroups().then(({ data }) => data), options ); diff --git a/src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx b/src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx index 5a0a9ab7..6a374400 100644 --- a/src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx +++ b/src/v1/profile/bookShelf/MyProfileBookshelfContainer.tsx @@ -1,5 +1,5 @@ import ProfileBookshelfPresenter from './ProfileBookshelfPresenter'; -import useMySummaryBookshlefQuery from '@/queries/bookshelf/useMySummaryBookshelfQuery'; +import useMySummaryBookshlefQuery from '@/queries/bookshelf/useMySummaryBookShelfQuery'; const MyProfileBookshelfContainer = () => { const { isSuccess, data } = useMySummaryBookshlefQuery({ diff --git a/src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx b/src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx index 61484091..7b801756 100644 --- a/src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx +++ b/src/v1/profile/bookShelf/UserProfileBookshelfContainer.tsx @@ -1,5 +1,5 @@ import ProfileBookshelfPresenter from './ProfileBookshelfPresenter'; -import useUserSummaryBookshlefQuery from '@/queries/bookshelf/useUserSummaryBookshelfQuery'; +import useUserSummaryBookshlefQuery from '@/queries/bookshelf/useUserSummaryBookShelfQuery'; import type { APIUser } from '@/types/user'; const UserProfileBookshelfContainer = ({ diff --git a/src/v1/profile/group/ProfileGroupContainer.tsx b/src/v1/profile/group/ProfileGroupContainer.tsx index e519014b..77baa13b 100644 --- a/src/v1/profile/group/ProfileGroupContainer.tsx +++ b/src/v1/profile/group/ProfileGroupContainer.tsx @@ -1,4 +1,4 @@ -import useMyGroupsQuery from '@/queries/group/useMyGroupsQuery'; +import useMyGroupsQuery from '@/queries/group/useMyGroupQuery'; import { APIUser } from '@/types/user'; import ProfileGroupPresenter from './ProfileGroupPresenter'; From bfb1a75b587213559dce44071d29b417ea02d6d4 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 19:51:34 +0900 Subject: [PATCH 07/29] =?UTF-8?q?chore:=20=EC=9E=98=EB=AA=BB=EB=90=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=86=A0=EB=A6=AC=20prop=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stories/base/TopHeader.stories.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stories/base/TopHeader.stories.tsx b/src/stories/base/TopHeader.stories.tsx index 930ba8dc..a2a00cc5 100644 --- a/src/stories/base/TopHeader.stories.tsx +++ b/src/stories/base/TopHeader.stories.tsx @@ -13,12 +13,12 @@ export default meta; type Story = StoryObj; export const Default: Story = { - args: { pathname: '/bookarchive' }, + args: { text: 'BookArchive' }, render: args => , }; export const WithMenu: Story = { - args: { pathname: '/profile/me' }, + args: { text: 'Profile' }, render: args => ( + ); +}; + +export default BackButton; From 5b6457dce457c14004aac143e857d711c25118a3 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 19:56:53 +0900 Subject: [PATCH 09/29] =?UTF-8?q?feat:=20ShareButton=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/base/ShareButton.tsx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/v1/base/ShareButton.tsx diff --git a/src/v1/base/ShareButton.tsx b/src/v1/base/ShareButton.tsx new file mode 100644 index 00000000..c685e353 --- /dev/null +++ b/src/v1/base/ShareButton.tsx @@ -0,0 +1,27 @@ +import { IconShare } from '@public/icons'; +import useToast from './Toast/useToast'; + +const ShareButton = () => { + const { show: showToast } = useToast(); + + const handleClickShareButton = () => { + const url = window.location.href; + + navigator.clipboard + .writeText(url) + .then(() => { + showToast({ message: '링크를 복사했어요.', type: 'success' }); + }) + .catch(() => { + showToast({ message: '잠시 후 다시 시도해주세요', type: 'error' }); + }); + }; + + return ( + + ); +}; + +export default ShareButton; From f175c151d77613452104577237cb59f5839b4aae Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 19:58:15 +0900 Subject: [PATCH 10/29] =?UTF-8?q?refactor:=20TopNavigation=20=EC=97=90=20?= =?UTF-8?q?=EC=A7=81=EC=A0=91=20=EC=9E=91=EC=84=B1=ED=95=9C=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=EC=9D=84=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=20=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/bookshelf/[bookshelfId]/page.tsx | 27 +++++------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/src/app/bookshelf/[bookshelfId]/page.tsx b/src/app/bookshelf/[bookshelfId]/page.tsx index 78a5d1ef..7c69f013 100644 --- a/src/app/bookshelf/[bookshelfId]/page.tsx +++ b/src/app/bookshelf/[bookshelfId]/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { IconHeart, IconArrowLeft, IconShare, IconKakao } from '@public/icons'; +import { IconHeart, IconKakao } from '@public/icons'; import useToast from '@/v1/base/Toast/useToast'; import useBookShelfBooksQuery from '@/queries/bookshelf/useBookShelfBookListQuery'; import useBookShelfInfoQuery from '@/queries/bookshelf/useBookShelfInfoQuery'; @@ -14,10 +14,11 @@ import { useInView } from 'react-intersection-observer'; import Button from '@/v1/base/Button'; import TopNavigation from '@/v1/base/TopNavigation'; import BookShelfRow from '@/v1/bookShelf/BookShelfRow'; -import { useRouter } from 'next/navigation'; import { isAuthed } from '@/utils/helpers'; import Link from 'next/link'; import type { APIBookshelf, APIBookshelfInfo } from '@/types/bookshelf'; +import BackButton from '@/v1/base/BackButton'; +import ShareButton from '@/v1/base/ShareButton'; const KAKAO_OAUTH_LOGIN_URL = `${process.env.NEXT_PUBLIC_API_URL}/oauth2/authorize/kakao?redirect_uri=${process.env.NEXT_PUBLIC_CLIENT_REDIRECT_URI}`; @@ -32,23 +33,9 @@ export default function UserBookShelfPage({ const { mutate: likeBookshelf } = useBookshelfLike(bookshelfId); const { mutate: unlikeBookshelf } = useBookshelfUnlike(bookshelfId); const { show: showToast } = useToast(); - const router = useRouter(); if (!isSuccess) return null; - const handleClickShareButton = () => { - const url = window.location.href; - - navigator.clipboard - .writeText(url) - .then(() => { - showToast({ message: '링크를 복사했어요.', type: 'success' }); - }) - .catch(() => { - showToast({ message: '잠시 후 다시 시도해주세요', type: 'error' }); - }); - }; - const handleClickLikeButton = () => { if (!isAuthed()) { showToast({ message: '로그인 후 이용해주세요.', type: 'normal' }); @@ -62,14 +49,10 @@ export default function UserBookShelfPage({
- + - +
From c8fb4b87b1cecf11a0a1380cb0cfa8d469225576 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 20:00:57 +0900 Subject: [PATCH 11/29] =?UTF-8?q?fix:=20=EC=9E=98=EB=AA=BB=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=9C=20useGroupInfoQuery=20=EB=90=98=EB=8F=8C?= =?UTF-8?q?=EB=A6=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/queries/group/useGroupInfoQuery.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/queries/group/useGroupInfoQuery.ts diff --git a/src/queries/group/useGroupInfoQuery.ts b/src/queries/group/useGroupInfoQuery.ts new file mode 100644 index 00000000..1c65513e --- /dev/null +++ b/src/queries/group/useGroupInfoQuery.ts @@ -0,0 +1,15 @@ +import GroupAPI from '@/apis/group'; +import { useQuery } from '@tanstack/react-query'; +import { APIGroupDetail } from '@/types/group'; + +const useGroupInfoQuery = ({ + bookGroupId, +}: { + bookGroupId: APIGroupDetail['bookGroupId']; +}) => { + return useQuery(['groupDetailInfo', bookGroupId], () => + GroupAPI.getGroupDetailInfo({ bookGroupId }).then(({ data }) => data) + ); +}; + +export default useGroupInfoQuery; From e7d4b72d671bad074348426cc953b7a40864527c Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 9 Dec 2023 20:05:22 +0900 Subject: [PATCH 12/29] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EC=97=90=20TopNavigation=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/[userId]/page.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/app/profile/[userId]/page.tsx b/src/app/profile/[userId]/page.tsx index 05b4e355..5ba75f9e 100644 --- a/src/app/profile/[userId]/page.tsx +++ b/src/app/profile/[userId]/page.tsx @@ -1,7 +1,9 @@ 'use client'; import { APIUser } from '@/types/user'; -import TopHeader from '@/v1/base/TopHeader'; +import BackButton from '@/v1/base/BackButton'; +import ShareButton from '@/v1/base/ShareButton'; +import TopNavigation from '@/v1/base/TopNavigation'; import ProfileBookShelf from '@/v1/profile/bookShelf/ProfileBookShelf'; import ProfileInfo from '@/v1/profile/info/ProfileInfo'; @@ -12,8 +14,15 @@ const UserProfilePage = ({ }) => { return ( <> - -
+ + + + + + + + +
From 5348c307ffa4df4c8695cdab959e2dc9dcab48bd Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sun, 10 Dec 2023 12:32:49 +0900 Subject: [PATCH 13/29] =?UTF-8?q?feat:=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20URL=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index 376ca106..60da3ba7 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -13,6 +13,7 @@ import { IconArrowRight } from '@public/icons'; import BookShelf from '@/v1/bookShelf/BookShelf'; const USER_ID = 'me'; +const KAKAO_LOGIN_URL = `${process.env.NEXT_PUBLIC_API_URL}/oauth2/authorize/kakao?redirect_uri=${process.env.NEXT_PUBLIC_CLIENT_REDIRECT_URI}`; const MyProfilePage = () => { return isAuthed() ? : ; @@ -32,7 +33,7 @@ const MyProfileForUnAuth = () => { 카카오로 3초만에 가입할 수 있어요.

- +
From c37ea5aeec8c1ebd99bd13d7d3f5e561cfdfa54f Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 16 Dec 2023 14:56:04 +0900 Subject: [PATCH 14/29] =?UTF-8?q?fix:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EB=A5=BC=20=EC=83=88=EB=A1=9C?= =?UTF-8?q?=EA=B3=A0=EC=B9=A8=20=ED=96=88=EC=9D=84=20=EB=95=8C=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=ED=95=98=EB=8A=94=20hydration=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index 60da3ba7..a7b77c8f 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -11,12 +11,18 @@ import Avatar from '@/v1/base/Avatar'; import Link from 'next/link'; import { IconArrowRight } from '@public/icons'; import BookShelf from '@/v1/bookShelf/BookShelf'; +import SSRSafeSuspense from '@/components/SSRSafeSuspense'; +import Loading from '@/v1/base/Loading'; const USER_ID = 'me'; const KAKAO_LOGIN_URL = `${process.env.NEXT_PUBLIC_API_URL}/oauth2/authorize/kakao?redirect_uri=${process.env.NEXT_PUBLIC_CLIENT_REDIRECT_URI}`; const MyProfilePage = () => { - return isAuthed() ? : ; + return ( + }> + {isAuthed() ? : } + + ); }; const MyProfileForUnAuth = () => { From ab5d4ae81adde9922b5f0778d5951cbb15758905 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 16 Dec 2023 14:56:29 +0900 Subject: [PATCH 15/29] =?UTF-8?q?refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=9A=94=EC=86=8C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 56 +++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index a7b77c8f..2b95bfa0 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -30,39 +30,35 @@ const MyProfileForUnAuth = () => { <>
-
-
- -
-

로그인 / 회원가입

-

- 카카오로 3초만에 가입할 수 있어요. -

-
- - - +
+ +
+

로그인 / 회원가입

+

+ 카카오로 3초만에 가입할 수 있어요. +

-
-
-

책장

-
- -
- -
-

책장이 비었어요.

-
-
-
+ + + +
+
+
+

책장

-
-

참여한 모임

-
-

- 참여 중인 모임이 없어요. -

+ +
+ +
+

책장이 비었어요.

+
+
+
+
+

참여한 모임

+
+

참여 중인 모임이 없어요.

From 0279838b5743bdd33b56832f26a23972b5408d57 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 16 Dec 2023 15:02:58 +0900 Subject: [PATCH 16/29] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=88=84=EB=9D=BD=EB=90=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index 2b95bfa0..0107dde9 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -30,11 +30,11 @@ const MyProfileForUnAuth = () => { <>
-
+

로그인 / 회원가입

-

+

카카오로 3초만에 가입할 수 있어요.

From 85704180373b9895234610604c366d32d6c11eb6 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Sat, 16 Dec 2023 15:05:05 +0900 Subject: [PATCH 17/29] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=95=84=EC=9B=83=20=ED=96=88=EC=9D=84=20=EB=95=8C=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9D=B4=EB=8F=99=EB=8C=80?= =?UTF-8?q?=EC=8B=A0=20=EB=A6=AC=ED=94=84=EB=A0=88=EC=8B=9C=20=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index 0107dde9..f1ae3207 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -72,7 +72,7 @@ const MyProfileForAuth = () => { const handleLogoutButtonClick = async () => { await userAPI.logout(); removeAuth(); - router.push('/'); + router.refresh(); }; return ( From 24bd5103de0aaf7a9e6ba7e8276e2d336488d31d Mon Sep 17 00:00:00 2001 From: Shaw Date: Mon, 18 Dec 2023 13:06:16 +0900 Subject: [PATCH 18/29] Update src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx Co-authored-by: kyuran kim <57716832+gxxrxn@users.noreply.github.com> --- src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx index 0748e183..812eaa4f 100644 --- a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx +++ b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx @@ -16,14 +16,12 @@ const ProfileBookshelfPresenter = ({

책장

- +
{likeCount}
From c5cd88c082389b083b87529dabd4272d9eb1a35c Mon Sep 17 00:00:00 2001 From: Shaw Date: Mon, 18 Dec 2023 13:06:39 +0900 Subject: [PATCH 19/29] Update src/v1/profile/info/ProfileInfoPresenter.tsx Co-authored-by: kyuran kim <57716832+gxxrxn@users.noreply.github.com> --- src/v1/profile/info/ProfileInfoPresenter.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v1/profile/info/ProfileInfoPresenter.tsx b/src/v1/profile/info/ProfileInfoPresenter.tsx index af623348..fdd39303 100644 --- a/src/v1/profile/info/ProfileInfoPresenter.tsx +++ b/src/v1/profile/info/ProfileInfoPresenter.tsx @@ -11,7 +11,7 @@ const ProfileInfoPresenter = ({ job: { jobGroupKoreanName, jobNameKoreanName }, }: ProfileInfoProps) => { return ( -
+
Date: Mon, 18 Dec 2023 13:07:57 +0900 Subject: [PATCH 20/29] =?UTF-8?q?refactor:=20ProfileGroup=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=9D=B4=EB=A6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/profile/group/ProfileGroup.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/v1/profile/group/ProfileGroup.tsx b/src/v1/profile/group/ProfileGroup.tsx index a00294da..4862d27b 100644 --- a/src/v1/profile/group/ProfileGroup.tsx +++ b/src/v1/profile/group/ProfileGroup.tsx @@ -23,7 +23,7 @@ const ProfileGroup = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { /> )} > - }> + }> @@ -34,7 +34,7 @@ const ProfileGroup = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { export default ProfileGroup; -const ProfileBookShelfSkelenton = () => { +const ProfileGroupSkeleton = () => { return (
From 94837c94e51304a5cf7c116b98a3a2084c84831a Mon Sep 17 00:00:00 2001 From: Shaw Date: Mon, 18 Dec 2023 13:13:03 +0900 Subject: [PATCH 21/29] Update src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx Co-authored-by: kyuran kim <57716832+gxxrxn@users.noreply.github.com> --- src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx index 812eaa4f..6301fc9d 100644 --- a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx +++ b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx @@ -12,7 +12,7 @@ const ProfileBookshelfPresenter = ({ likeCount, }: APIBookshelf) => { return ( -
+

책장

From d4b8487f4be4ced480e37d85549539683d6be92a Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Mon, 18 Dec 2023 13:42:08 +0900 Subject: [PATCH 22/29] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EC=88=98=EC=A0=95=20=EB=B2=84=ED=8A=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index f1ae3207..29b7d06d 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -13,6 +13,7 @@ import { IconArrowRight } from '@public/icons'; import BookShelf from '@/v1/bookShelf/BookShelf'; import SSRSafeSuspense from '@/components/SSRSafeSuspense'; import Loading from '@/v1/base/Loading'; +import Button from '@/v1/base/Button'; const USER_ID = 'me'; const KAKAO_LOGIN_URL = `${process.env.NEXT_PUBLIC_API_URL}/oauth2/authorize/kakao?redirect_uri=${process.env.NEXT_PUBLIC_CLIENT_REDIRECT_URI}`; @@ -82,6 +83,13 @@ const MyProfileForAuth = () => {
+ + +
From 8171413aa6c63896ec815b0a096d9112a631e338 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Mon, 18 Dec 2023 14:43:31 +0900 Subject: [PATCH 23/29] =?UTF-8?q?feat:=20ProfileInfo=20=EC=8A=A4=EC=BC=88?= =?UTF-8?q?=EB=A0=88=ED=86=A4=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/profile/info/ProfileInfo.tsx | 12 +++++++++--- src/v1/profile/info/ProfileInfoPresenter.tsx | 3 +-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/v1/profile/info/ProfileInfo.tsx b/src/v1/profile/info/ProfileInfo.tsx index e8b41a11..e66731e6 100644 --- a/src/v1/profile/info/ProfileInfo.tsx +++ b/src/v1/profile/info/ProfileInfo.tsx @@ -6,7 +6,6 @@ import { ErrorBoundary } from 'react-error-boundary'; import type { APIUser } from '@/types/user'; import QueryErrorBoundaryFallback from '@/v1/base/QueryErrorBoundaryFallback'; import useMounted from '@/hooks/useMounted'; -import Loading from '@/v1/base/Loading'; type ProfileInfoProps = { children?: ReactNode; @@ -47,8 +46,15 @@ export default ProfileInfo; const ProfileInfoSkelenton = () => { return ( -
- +
+
+
+
+
+
+
+
+
); }; diff --git a/src/v1/profile/info/ProfileInfoPresenter.tsx b/src/v1/profile/info/ProfileInfoPresenter.tsx index fdd39303..5d0c6ee1 100644 --- a/src/v1/profile/info/ProfileInfoPresenter.tsx +++ b/src/v1/profile/info/ProfileInfoPresenter.tsx @@ -4,14 +4,13 @@ import Badge from '@/v1/base/Badge'; type ProfileInfoProps = Pick; -// COMMENT: 프로필 정보 조회 API 스키마 변경으로 email, oauthnickname props 제거 const ProfileInfoPresenter = ({ nickname, profileImage, job: { jobGroupKoreanName, jobNameKoreanName }, }: ProfileInfoProps) => { return ( -
+
Date: Mon, 18 Dec 2023 15:26:36 +0900 Subject: [PATCH 24/29] =?UTF-8?q?feat:=20ProfileGroup=20=EC=8A=A4=EC=BC=88?= =?UTF-8?q?=EB=A0=88=ED=86=A4=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/profile/group/ProfileGroup.tsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/v1/profile/group/ProfileGroup.tsx b/src/v1/profile/group/ProfileGroup.tsx index 4862d27b..ff676277 100644 --- a/src/v1/profile/group/ProfileGroup.tsx +++ b/src/v1/profile/group/ProfileGroup.tsx @@ -1,6 +1,5 @@ import useMounted from '@/hooks/useMounted'; import { APIUser } from '@/types/user'; -import Loading from '@/v1/base/Loading'; import QueryErrorBoundaryFallback from '@/v1/base/QueryErrorBoundaryFallback'; import { QueryErrorResetBoundary } from '@tanstack/react-query'; import { Suspense } from 'react'; @@ -36,8 +35,22 @@ export default ProfileGroup; const ProfileGroupSkeleton = () => { return ( -
- +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
); }; From 01408a38819950687e3865849b54bc8ff2cd7d30 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Mon, 18 Dec 2023 15:46:06 +0900 Subject: [PATCH 25/29] =?UTF-8?q?feat:=20ProfileBookShelf=20=EC=8A=A4?= =?UTF-8?q?=EC=BC=88=EB=A0=88=ED=86=A4=20=EC=BD=94=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/profile/bookShelf/ProfileBookShelf.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/v1/profile/bookShelf/ProfileBookShelf.tsx b/src/v1/profile/bookShelf/ProfileBookShelf.tsx index 3f87bf6b..769b1cf4 100644 --- a/src/v1/profile/bookShelf/ProfileBookShelf.tsx +++ b/src/v1/profile/bookShelf/ProfileBookShelf.tsx @@ -41,8 +41,12 @@ export default ProfileBookShelf; const ProfileBookShelfSkelenton = () => { return ( -
- +
+
+ +
+ +
); }; From d82cc23448f2050bf52afc60c5861adf3d1d860c Mon Sep 17 00:00:00 2001 From: Shaw Date: Mon, 18 Dec 2023 20:57:30 +0900 Subject: [PATCH 26/29] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 34 +++++++++---------- src/v1/profile/bookShelf/ProfileBookShelf.tsx | 4 +-- src/v1/profile/group/ProfileGroup.tsx | 32 ++++++++--------- src/v1/profile/info/ProfileInfo.tsx | 10 +++--- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index 29b7d06d..f8ac4f6c 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -1,26 +1,26 @@ -'use client'; +"use client"; -import { useRouter } from 'next/navigation'; -import { isAuthed, removeAuth } from '@/utils/helpers'; -import userAPI from '@/apis/user'; -import TopHeader from '@/v1/base/TopHeader'; -import ProfileInfo from '@/v1/profile/info/ProfileInfo'; -import ProfileBookShelf from '@/v1/profile/bookShelf/ProfileBookShelf'; -import ProfileGroup from '@/v1/profile/group/ProfileGroup'; -import Avatar from '@/v1/base/Avatar'; -import Link from 'next/link'; -import { IconArrowRight } from '@public/icons'; -import BookShelf from '@/v1/bookShelf/BookShelf'; -import SSRSafeSuspense from '@/components/SSRSafeSuspense'; -import Loading from '@/v1/base/Loading'; -import Button from '@/v1/base/Button'; +import { useRouter } from "next/navigation"; +import { isAuthed, removeAuth } from "@/utils/helpers"; +import userAPI from "@/apis/user"; +import TopHeader from "@/v1/base/TopHeader"; +import ProfileInfo from "@/v1/profile/info/ProfileInfo"; +import ProfileBookShelf from "@/v1/profile/bookShelf/ProfileBookShelf"; +import ProfileGroup from "@/v1/profile/group/ProfileGroup"; +import Avatar from "@/v1/base/Avatar"; +import Link from "next/link"; +import { IconArrowRight } from "@public/icons"; +import BookShelf from "@/v1/bookShelf/BookShelf"; +import SSRSafeSuspense from "@/components/SSRSafeSuspense"; +import Loading from "@/v1/base/Loading"; +import Button from "@/v1/base/Button"; -const USER_ID = 'me'; +const USER_ID = "me"; const KAKAO_LOGIN_URL = `${process.env.NEXT_PUBLIC_API_URL}/oauth2/authorize/kakao?redirect_uri=${process.env.NEXT_PUBLIC_CLIENT_REDIRECT_URI}`; const MyProfilePage = () => { return ( - }> + }> {isAuthed() ? : } ); diff --git a/src/v1/profile/bookShelf/ProfileBookShelf.tsx b/src/v1/profile/bookShelf/ProfileBookShelf.tsx index 769b1cf4..f6b61718 100644 --- a/src/v1/profile/bookShelf/ProfileBookShelf.tsx +++ b/src/v1/profile/bookShelf/ProfileBookShelf.tsx @@ -41,8 +41,8 @@ export default ProfileBookShelf; const ProfileBookShelfSkelenton = () => { return ( -
-
+
+
diff --git a/src/v1/profile/group/ProfileGroup.tsx b/src/v1/profile/group/ProfileGroup.tsx index ff676277..d429e3a2 100644 --- a/src/v1/profile/group/ProfileGroup.tsx +++ b/src/v1/profile/group/ProfileGroup.tsx @@ -1,12 +1,12 @@ -import useMounted from '@/hooks/useMounted'; -import { APIUser } from '@/types/user'; -import QueryErrorBoundaryFallback from '@/v1/base/QueryErrorBoundaryFallback'; -import { QueryErrorResetBoundary } from '@tanstack/react-query'; -import { Suspense } from 'react'; -import { ErrorBoundary } from 'react-error-boundary'; -import ProfileGroupContainer from './ProfileGroupContainer'; +import useMounted from "@/hooks/useMounted"; +import { APIUser } from "@/types/user"; +import QueryErrorBoundaryFallback from "@/v1/base/QueryErrorBoundaryFallback"; +import { QueryErrorResetBoundary } from "@tanstack/react-query"; +import { Suspense } from "react"; +import { ErrorBoundary } from "react-error-boundary"; +import ProfileGroupContainer from "./ProfileGroupContainer"; -const ProfileGroup = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { +const ProfileGroup = ({ userId }: { userId: "me" | APIUser["userId"] }) => { const mounted = useMounted(); if (!mounted) return null; @@ -35,20 +35,20 @@ export default ProfileGroup; const ProfileGroupSkeleton = () => { return ( -
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
diff --git a/src/v1/profile/info/ProfileInfo.tsx b/src/v1/profile/info/ProfileInfo.tsx index e66731e6..87428315 100644 --- a/src/v1/profile/info/ProfileInfo.tsx +++ b/src/v1/profile/info/ProfileInfo.tsx @@ -46,14 +46,14 @@ export default ProfileInfo; const ProfileInfoSkelenton = () => { return ( -
+
-
-
+
+
-
-
+
+
); From 9bc7ed52cbdee7adc19562f76a3128836eeeea50 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Tue, 19 Dec 2023 02:21:20 +0900 Subject: [PATCH 27/29] =?UTF-8?q?style:=20=ED=94=84=EB=A6=AC=ED=8B=B0?= =?UTF-8?q?=EC=96=B4=20=EB=A3=B0=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/profile/me/page.tsx | 32 +++++++++---------- src/v1/profile/bookShelf/ProfileBookShelf.tsx | 2 +- src/v1/profile/group/ProfileGroup.tsx | 18 +++++------ src/v1/profile/info/ProfileInfo.tsx | 2 +- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/app/profile/me/page.tsx b/src/app/profile/me/page.tsx index f8ac4f6c..7ad0e955 100644 --- a/src/app/profile/me/page.tsx +++ b/src/app/profile/me/page.tsx @@ -1,21 +1,21 @@ -"use client"; +'use client'; -import { useRouter } from "next/navigation"; -import { isAuthed, removeAuth } from "@/utils/helpers"; -import userAPI from "@/apis/user"; -import TopHeader from "@/v1/base/TopHeader"; -import ProfileInfo from "@/v1/profile/info/ProfileInfo"; -import ProfileBookShelf from "@/v1/profile/bookShelf/ProfileBookShelf"; -import ProfileGroup from "@/v1/profile/group/ProfileGroup"; -import Avatar from "@/v1/base/Avatar"; -import Link from "next/link"; -import { IconArrowRight } from "@public/icons"; -import BookShelf from "@/v1/bookShelf/BookShelf"; -import SSRSafeSuspense from "@/components/SSRSafeSuspense"; -import Loading from "@/v1/base/Loading"; -import Button from "@/v1/base/Button"; +import { useRouter } from 'next/navigation'; +import { isAuthed, removeAuth } from '@/utils/helpers'; +import userAPI from '@/apis/user'; +import TopHeader from '@/v1/base/TopHeader'; +import ProfileInfo from '@/v1/profile/info/ProfileInfo'; +import ProfileBookShelf from '@/v1/profile/bookShelf/ProfileBookShelf'; +import ProfileGroup from '@/v1/profile/group/ProfileGroup'; +import Avatar from '@/v1/base/Avatar'; +import Link from 'next/link'; +import { IconArrowRight } from '@public/icons'; +import BookShelf from '@/v1/bookShelf/BookShelf'; +import SSRSafeSuspense from '@/components/SSRSafeSuspense'; +import Loading from '@/v1/base/Loading'; +import Button from '@/v1/base/Button'; -const USER_ID = "me"; +const USER_ID = 'me'; const KAKAO_LOGIN_URL = `${process.env.NEXT_PUBLIC_API_URL}/oauth2/authorize/kakao?redirect_uri=${process.env.NEXT_PUBLIC_CLIENT_REDIRECT_URI}`; const MyProfilePage = () => { diff --git a/src/v1/profile/bookShelf/ProfileBookShelf.tsx b/src/v1/profile/bookShelf/ProfileBookShelf.tsx index f6b61718..749f5246 100644 --- a/src/v1/profile/bookShelf/ProfileBookShelf.tsx +++ b/src/v1/profile/bookShelf/ProfileBookShelf.tsx @@ -41,7 +41,7 @@ export default ProfileBookShelf; const ProfileBookShelfSkelenton = () => { return ( -
+
diff --git a/src/v1/profile/group/ProfileGroup.tsx b/src/v1/profile/group/ProfileGroup.tsx index d429e3a2..131b9167 100644 --- a/src/v1/profile/group/ProfileGroup.tsx +++ b/src/v1/profile/group/ProfileGroup.tsx @@ -1,12 +1,12 @@ -import useMounted from "@/hooks/useMounted"; -import { APIUser } from "@/types/user"; -import QueryErrorBoundaryFallback from "@/v1/base/QueryErrorBoundaryFallback"; -import { QueryErrorResetBoundary } from "@tanstack/react-query"; -import { Suspense } from "react"; -import { ErrorBoundary } from "react-error-boundary"; -import ProfileGroupContainer from "./ProfileGroupContainer"; +import useMounted from '@/hooks/useMounted'; +import { APIUser } from '@/types/user'; +import QueryErrorBoundaryFallback from '@/v1/base/QueryErrorBoundaryFallback'; +import { QueryErrorResetBoundary } from '@tanstack/react-query'; +import { Suspense } from 'react'; +import { ErrorBoundary } from 'react-error-boundary'; +import ProfileGroupContainer from './ProfileGroupContainer'; -const ProfileGroup = ({ userId }: { userId: "me" | APIUser["userId"] }) => { +const ProfileGroup = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { const mounted = useMounted(); if (!mounted) return null; @@ -35,7 +35,7 @@ export default ProfileGroup; const ProfileGroupSkeleton = () => { return ( -
+
diff --git a/src/v1/profile/info/ProfileInfo.tsx b/src/v1/profile/info/ProfileInfo.tsx index 87428315..9aefba7f 100644 --- a/src/v1/profile/info/ProfileInfo.tsx +++ b/src/v1/profile/info/ProfileInfo.tsx @@ -46,7 +46,7 @@ export default ProfileInfo; const ProfileInfoSkelenton = () => { return ( -
+
From 87e723f957b21bd97e7f842633ea4cf1369c098f Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Thu, 21 Dec 2023 00:34:57 +0900 Subject: [PATCH 28/29] =?UTF-8?q?fix:=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=EB=AA=85=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/v1/profile/bookShelf/ProfileBookShelf.tsx | 4 ++-- src/v1/profile/info/ProfileInfo.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/v1/profile/bookShelf/ProfileBookShelf.tsx b/src/v1/profile/bookShelf/ProfileBookShelf.tsx index 749f5246..9082f9c8 100644 --- a/src/v1/profile/bookShelf/ProfileBookShelf.tsx +++ b/src/v1/profile/bookShelf/ProfileBookShelf.tsx @@ -24,7 +24,7 @@ const ProfileBookShelf = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { /> )} > - }> + }> {userId === 'me' ? ( ) : ( @@ -39,7 +39,7 @@ const ProfileBookShelf = ({ userId }: { userId: 'me' | APIUser['userId'] }) => { export default ProfileBookShelf; -const ProfileBookShelfSkelenton = () => { +const ProfileBookShelfSkeleton = () => { return (
diff --git a/src/v1/profile/info/ProfileInfo.tsx b/src/v1/profile/info/ProfileInfo.tsx index 9aefba7f..d23b2120 100644 --- a/src/v1/profile/info/ProfileInfo.tsx +++ b/src/v1/profile/info/ProfileInfo.tsx @@ -28,7 +28,7 @@ const ProfileInfo = ({ userId, children }: ProfileInfoProps) => { /> )} > - }> + }> {userId === 'me' ? ( ) : ( @@ -44,7 +44,7 @@ const ProfileInfo = ({ userId, children }: ProfileInfoProps) => { export default ProfileInfo; -const ProfileInfoSkelenton = () => { +const ProfileInfoSkeleton = () => { return (
From 743b2eeaf10253140a5e648f7d90ab0fd8029669 Mon Sep 17 00:00:00 2001 From: minjongbaek Date: Thu, 21 Dec 2023 00:38:04 +0900 Subject: [PATCH 29/29] =?UTF-8?q?style:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EB=90=98=EB=8A=94=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EB=B1=83=EC=A7=80=20=EC=8A=A4=ED=83=80=EC=9D=BC=EB=A7=81?= =?UTF-8?q?=EC=9D=84=20tailwind=20=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../profile/bookShelf/ProfileBookshelfPresenter.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx index 6301fc9d..5dae0856 100644 --- a/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx +++ b/src/v1/profile/bookShelf/ProfileBookshelfPresenter.tsx @@ -16,13 +16,14 @@ const ProfileBookshelfPresenter = ({

책장

- +
- +
{likeCount}