diff --git a/src/pages/GamesDetailPage/GamesDetailPage.tsx b/src/pages/GamesDetailPage/GamesDetailPage.tsx index c01bfdbb..8bcb61fd 100644 --- a/src/pages/GamesDetailPage/GamesDetailPage.tsx +++ b/src/pages/GamesDetailPage/GamesDetailPage.tsx @@ -1,9 +1,6 @@ - import { useState } from 'react'; - import { ErrorBoundary } from 'react-error-boundary'; import toast from 'react-hot-toast'; - import { useNavigate, useParams } from 'react-router-dom'; import { Avatar } from '@components/Avatar'; diff --git a/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.style.ts b/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.style.ts index 297c2780..65de6908 100644 --- a/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.style.ts +++ b/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.style.ts @@ -48,3 +48,7 @@ type BoxProps = { export const Box = styled.div` height: ${(props) => props.height}; `; + +export const ProfileWrapper = styled.div` + margin: 0 16px; +`; diff --git a/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.tsx b/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.tsx index 7433de18..2c6195c0 100644 --- a/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.tsx +++ b/src/pages/MannerScoreReviewPage/MannerScoreReviewPage.tsx @@ -1,7 +1,8 @@ -import { useEffect, useState } from 'react'; +import { Suspense, useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { Profile } from '@pages/ProfilePage/Profile'; +import { ProfileSkeleton } from '@pages/ProfilePage'; +import { Profile } from '@pages/ProfilePage'; import { Avatar } from '@components/Avatar'; import { Header } from '@components/Header'; @@ -27,6 +28,7 @@ import { BackwardWrapper, Box, MemberListContainer, + ProfileWrapper, ReviewPageContainer, TextWrapper, } from './MannerScoreReviewPage.style'; @@ -222,9 +224,15 @@ export const MannerScoreReviewPage = () => { setIsOpen(false)}> - + + }> + {isOpen && ( + + )} + + diff --git a/src/pages/ProfilePage/Profile.tsx b/src/pages/ProfilePage/Profile.tsx index daf91ab2..5b6d69a5 100644 --- a/src/pages/ProfilePage/Profile.tsx +++ b/src/pages/ProfilePage/Profile.tsx @@ -1,4 +1,5 @@ import { ReactNode, useState } from 'react'; +import toast from 'react-hot-toast'; import { useNavigate } from 'react-router-dom'; import { Avatar } from '@components/Avatar'; @@ -53,6 +54,7 @@ type NumberedItemProps = { count: number; icon: ReactNode; color?: string; + onClick?: () => void; }; export const Profile = ({ memberId }: { memberId: Member['id'] }) => { @@ -134,7 +136,12 @@ export const Profile = ({ memberId }: { memberId: Member['id'] }) => { color="black" /> - } count={0} /> + } + count={0} + onClick={handleClickFollow} + /> {myId === memberId ? ( { /> ) : ( - console.log('팔로우')} /> + )} @@ -179,11 +186,8 @@ export const Profile = ({ memberId }: { memberId: Member['id'] }) => { : '없음'} - {'없음'} - - {profile.introduction} - + {profile.introduction} setIsModalOpen(false)}> @@ -202,7 +206,7 @@ export const Profile = ({ memberId }: { memberId: Member['id'] }) => { ); }; -const ProfileField = ({ category, children }: ProfileFieldProps) => { +export const ProfileField = ({ category, children }: ProfileFieldProps) => { return ( @@ -217,7 +221,7 @@ const ProfileField = ({ category, children }: ProfileFieldProps) => { const EventButton = ({ text, width, onClick }: EventButtonProps) => ( ); -const NumberedItem = ({ text, count, icon, color }: NumberedItemProps) => { +const NumberedItem = ({ + text, + count, + icon, + color, + onClick, +}: NumberedItemProps) => { return ( - + {text} @@ -244,3 +254,9 @@ const NumberedItem = ({ text, count, icon, color }: NumberedItemProps) => { ); }; + +const handleClickFollow = () => { + toast('차후에 업데이트될 기능입니다!', { + icon: '👏', + }); +}; diff --git a/src/pages/ProfilePage/ProfilePage.style.ts b/src/pages/ProfilePage/ProfilePage.style.ts index e0c54506..96c326bd 100644 --- a/src/pages/ProfilePage/ProfilePage.style.ts +++ b/src/pages/ProfilePage/ProfilePage.style.ts @@ -1,20 +1,16 @@ import styled from '@emotion/styled'; import { Flex } from '@components/shared/Flex'; - -const MAX_WIDTH = '480px'; +import { Text } from '@components/shared/Text'; export const ProfileContainer = styled.div` ${({ theme }) => theme.STYLES.LAYOUT} min-height: 100dvh; display: flex; - justify-content: center; `; export const Main = styled.div` margin: 10px 0; - display: flex; - justify-content: center; width: 100%; `; @@ -40,7 +36,6 @@ export const ItemBox = styled.div<{ border?: string }>` `; export const ProfileFieldContainer = styled.div` - max-width: ${MAX_WIDTH}; width: 100%; `; @@ -52,15 +47,13 @@ export const CrewGroup = styled.div` flex-wrap: wrap; `; -export const Introduce = styled.div` +export const Introduce = styled(Text)` background-color: ${({ theme }) => theme.PALETTE.GRAY_100}; border-radius: 20px; width: 100%; padding: 16px; - display: inline-block; - & > p { - white-space: pre-wrap; - } + white-space: pre-wrap; + word-break: break-all; `; export const PointerFlex = styled(Flex)` diff --git a/src/pages/ProfilePage/ProfilePageSkeleton.tsx b/src/pages/ProfilePage/ProfilePageSkeleton.tsx new file mode 100644 index 00000000..efe6fb16 --- /dev/null +++ b/src/pages/ProfilePage/ProfilePageSkeleton.tsx @@ -0,0 +1,11 @@ +import { Header } from '@components/Header'; + +import { ProfileContainer } from './ProfilePage.style'; +import { ProfileSkeleton } from './ProfileSkeleton'; + +export const ProfilePageSkeleton = () => ( + +
+ + +); diff --git a/src/pages/ProfilePage/ProfileSkeleton.tsx b/src/pages/ProfilePage/ProfileSkeleton.tsx new file mode 100644 index 00000000..e8029c56 --- /dev/null +++ b/src/pages/ProfilePage/ProfileSkeleton.tsx @@ -0,0 +1,59 @@ +import { Skeleton } from '@components/Skeleton'; +import { Flex } from '@components/shared/Flex'; + +import { theme } from '@styles/theme'; + +import { FlexItem, Main } from './ProfilePage.style'; + +export const ProfileSkeleton = () => ( +
+ + + + + + + + + + + + + + + + + + + + {Array(2) + .fill(null) + .map((_, index) => ( + + ))} + + + + + + {Array(3) + .fill(null) + .map((_, index) => ( + + ))} + + + + + + + + +
+); diff --git a/src/pages/ProfilePage/index.ts b/src/pages/ProfilePage/index.ts index 654cb922..8839e170 100644 --- a/src/pages/ProfilePage/index.ts +++ b/src/pages/ProfilePage/index.ts @@ -1 +1,4 @@ export * from './ProfilePage'; +export * from './ProfilePageSkeleton'; +export * from './ProfileSkeleton'; +export * from './Profile'; diff --git a/src/routes/router.tsx b/src/routes/router.tsx index dcf6bd6e..3e895657 100644 --- a/src/routes/router.tsx +++ b/src/routes/router.tsx @@ -6,6 +6,7 @@ import { CrewsDetailPageLoading } from '@pages/CrewsDetailPage'; import { GamesDetailPageLoading } from '@pages/GamesDetailPage'; import { Layout } from '@pages/Layout'; import { MainPageLoading } from '@pages/MainPage'; +import { ProfilePageSkeleton } from '@pages/ProfilePage'; import { CardListPageSkeleton } from '@pages/__components__/CardListPageSkeleton'; import { ManagePageSkeleton } from '@pages/__components__/ManagePageSkeleton'; @@ -176,7 +177,11 @@ export const router = createBrowserRouter([ }, { path: 'profile/:id', - element: , + element: ( + }> + + + ), }, { path: 'profile/update', element:

프로필 수정 페이지

}, {