Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FE] feat: 리뷰 링크 관리 페이지와 라우터 설정 추가 #1032

Merged
merged 11 commits into from
Jan 10, 2025
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions frontend/src/components/layouts/Footer/style.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ export const Footer = styled.footer`

background-color: ${({ theme }) => theme.colors.white};

border-top: 0.1rem solid ${({ theme }) => theme.colors.lightGray};

${media.xSmall} {
flex-direction: column;
gap: 0.2rem;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,11 @@ import styled from '@emotion/styled';
import media from '@/utils/media';

export const Logo = styled.div`
line-height: 8rem;
text-align: center;

span {
font-size: 3rem;
font-size: 2.8rem;
font-weight: ${({ theme }) => theme.fontWeight.bolder};
letter-spacing: 0.7rem;

${media.small} {
font-size: 2.8rem;
}

${media.xSmall} {
Comment on lines 5 to 12
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존 로고 컴포넌트가 Topbar의 padding 때문에 영역을 벗어났는데, 해결되었네요👍🏻

font-size: 2.6rem;
Expand Down
1 change: 1 addition & 0 deletions frontend/src/constants/amplitudeEventName.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ export const PAGE_VISITED_EVENT_NAME: { [key in Exclude<PageName, undefined>]: s
detailedReview: '[page] 리뷰 상세 보기 페이지',
reviewWriting: '[page] 리뷰 작성 페이지',
reviewWritingComplete: '[page] 리뷰 작성 완료 페이지',
reviewLinkManagement: '[page] 리뷰 링크 관리 페이지',
Copy link
Contributor

@BadaHertz52 BadaHertz52 Jan 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

세심하게, Amplitude도 챙겼네요 👍

Amplitude에서 접속한 페이지 경로를 추적하려면, ROUTE에 'reviewLinkManagement' 를 key로 하는 경로도 추가되어야해요.

};

export const REVIEW_WRITING_EVENT_NAME = {
Expand Down
1 change: 1 addition & 0 deletions frontend/src/constants/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ export const ROUTE = {
detailedReview: 'user/detailed-review',
reviewZone: 'user/review-zone',
reviewCollection: 'user/review-collection',
reviewLinkManagement: 'user/review-link-management',
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

URL의 경우, 개인적으로 간단하게 user/review-linksuser/my-review-links 같은 느낌도 괜찮을 것 같아요!

Copy link
Contributor Author

@soosoo22 soosoo22 Jan 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

훨씬 좋은 것 같네요!👍👍
일단 이 부분은 회의를 통해서 확정을 지어야 할 것 같아서 추후에 변경할게요!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 간결하게 가져가는 게 좋다고 생각합니다! 그래서 작성한 리뷰 확인 페이지도 바꿨어요. (이것도 바꾸라는 건 아님!)

};
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ export const URLGeneratorForm = styled.section`
justify-content: center;

width: 40%;
padding: 0 9rem;

${media.medium} {
width: 45%;
padding: 0 9rem;

h2 {
font-size: 2rem;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { URLGeneratorForm } from '@/pages/HomePage/components';

import ReviewLinkLayout from '../layouts/ReviewLinkLayout';

import * as S from './styles';

const ReviewLinkDashboard = () => {
return (
<S.ReviewLinkDashboardContainer>
<S.FormSection>
<URLGeneratorForm />
</S.FormSection>
<S.Separator />
<S.LinkSection>
<ReviewLinkLayout
title={'생성한 리뷰 링크를 확인해보세요'}
subTitle={'클릭하면 해당 프로젝트의 리뷰 목록으로 이동해요'}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

중괄호 없이 문자열만 넘기는 것도 좋을 것 같아요!

>
{/* TODO: ReviewCard 컴포넌트 추가 및 생성한 리뷰 링크가 없을 경우, 돋보기 컴포넌트 추가 */}
<></>
Copy link
Contributor

@ImxYJL ImxYJL Jan 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 Fragment는 다른 작업의 흔적인가요ㅋㅋㅋ 어차피 또 작업할 페이지니까 있어도 상관없지만요~~

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReviewLinkLayoutchildren을 props로 받아서 넣었슴당

</ReviewLinkLayout>
</S.LinkSection>
</S.ReviewLinkDashboardContainer>
);
};

export default ReviewLinkDashboard;
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import styled from '@emotion/styled';

import media from '@/utils/media';

export const ReviewLinkDashboardContainer = styled.div`
display: flex;
justify-content: center;
gap: 7rem;

width: 100%;

${media.medium} {
gap: 4rem;
}

@media screen and (max-width: 900px) {
gap: 2rem;
}

${media.small} {
flex-direction: column;
align-items: center;
}
`;

export const FormSection = styled.section`
section {
width: auto;
}

padding: 5rem 0;

${media.medium} {
section {
padding: 0;
}
}

${media.small} {
width: 100%;
padding: 0;
}
`;

export const Separator = styled.div`
width: 0.1rem;
// 전체 영역에서 헤더(7rem)와 푸터(6rem) 영역 제외하고, 추후 네비게이션 탭이 추가되면 해당 영역도 제외
min-height: calc(100vh - 13rem);

background-color: ${({ theme }) => theme.colors.lightGray};

${media.small} {
display: none;
}
`;

export const LinkSection = styled.section`
display: flex;
flex-direction: column;
justify-content: flex-start;
gap: 3rem;

width: 100%;

padding: 5rem 0;

${media.medium} {
width: 50%;
}

${media.small} {
width: 85%;
}

${media.xSmall} {
width: 90%;
}
`;
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { EssentialPropsWithChildren } from '@/types';

import * as S from './styles';

interface ReviewLinkListLayoutProps {
title: string;
subTitle: string;
}

const ReviewLinkLayout = ({ title, subTitle, children }: EssentialPropsWithChildren<ReviewLinkListLayoutProps>) => {
return (
<S.ReviewLinkLayout>
<S.TitleWrapper>
<S.Title>{title}</S.Title>
<S.SubTitle>{subTitle}</S.SubTitle>
</S.TitleWrapper>
<S.CardList>{children}</S.CardList>
</S.ReviewLinkLayout>
);
};

export default ReviewLinkLayout;
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import styled from '@emotion/styled';

import media from '@/utils/media';

export const ReviewLinkLayout = styled.div`
display: flex;
flex-direction: column;
gap: 4rem;
`;

export const TitleWrapper = styled.div`
display: flex;
flex-direction: column;
gap: 0.8rem;
`;

export const Title = styled.h2`
${media.medium} {
font-size: 2rem;
}
${media.xSmall} {
font-size: 1.8rem;
}
${media.xxSmall} {
font-size: 1.6rem;
}
`;

export const SubTitle = styled.span`
color: ${({ theme }) => theme.colors.gray};
${media.xSmall} {
font-size: 1.5rem;
}
${media.xxSmall} {
font-size: 1.3rem;
}
`;

export const CardList = styled.ul`
display: flex;
flex-direction: column;
gap: 4rem;
max-height: calc(100vh - 34rem);
overflow-y: auto;
padding-right: 2rem;
${media.small} {
max-height: none;
padding-right: 0;
}
`;
14 changes: 14 additions & 0 deletions frontend/src/pages/ReviewLinkManagementPage/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { ErrorSuspenseContainer } from '@/components';

import ReviewLinkDashboard from './components/ReviewLinkDashboard';

const ReviewLinkManagementPage = () => {
return (
<ErrorSuspenseContainer>
{/* TODO: 네비게이션 탭 추가 */}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

쑤쑤가 구현한 네비게이션 탭은 '네비게이션 탭은 부모 페이지에만 두고 탭을 클릭하면 네비게이션 탭은 그대로 유지되면서, 탭 아래의 컨텐츠가 전환되는 방식' 같은데, ReviewLinkManagementPage 안에 네비게이션 탭이 추가된다고 주석이 되어 있어서 어떤 방식이 맞는 건가요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

원래 의도했던 바는리뷰 링크 관리, 작성한 리뷰 확인 페이지를 포함하는 부모 페이지 안에 네비게이션 탭을 배치하는 거였어요. 근데 이 부분은 제가 임의로 결정할 문제가 아닌 것 같아서 OptionSwitch와 같은 방식으로 각 페이지에 넣는 방식으로 하려고 합니다!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

로그인 후 사용자 페이지에서 추가 기능이 생기는 확장성과 네비게이션 탭 관리측면에서 쑤쑤가 처음에 구현한 방식이 저는 좋다고 생각했어요. 다만 페이지가 완성되지 않은 상태에서 추상적으로 구현을 해야하니 좀 복잡하죠.

현재 기능에서는 변경된 방식이 간편해서, 우선 이렇게 가고 나중에 기능이 확장되어야하는 지를 보고 다시 이야기해봐요.

<ReviewLinkDashboard />
</ErrorSuspenseContainer>
);
};

export default ReviewLinkManagementPage;
1 change: 1 addition & 0 deletions frontend/src/pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export { default as ReviewWritingPage } from './ReviewWritingPage';
export { default as ReviewWritingCompletePage } from './ReviewWritingCompletePage';
export { default as ReviewZonePage } from './ReviewZonePage';
export { default as ReviewCollectionPage } from './ReviewCollectionPage';
export { default as ReviewLinkManagementPage } from './ReviewLinkManagementPage';
2 changes: 2 additions & 0 deletions frontend/src/router.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const ReviewWritingPage = lazy(() => import('@/pages/ReviewWritingPage'));
const ReviewZonePage = lazy(() => import('@/pages/ReviewZonePage'));
const ReviewCollectionPage = lazy(() => import('@/pages/ReviewCollectionPage'));
const LoadingPage = lazy(() => import('@/pages/LoadingPage'));
const ReviewLinkManagementPage = lazy(() => import('@/pages/ReviewLinkManagementPage'));

import App from './App';
import { ErrorSuspenseContainer } from './components';
Expand Down Expand Up @@ -52,6 +53,7 @@ const router = createBrowserRouter([
),
},
{ path: `${ROUTE.reviewCollection}/:${ROUTE_PARAM.reviewRequestCode}`, element: <ReviewCollectionPage /> },
{ path: `${ROUTE.reviewLinkManagement}`, element: <ReviewLinkManagementPage /> },
],
},
]);
Expand Down
Loading