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 all 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] 리뷰 작성 완료 페이지',
reviewLinks: '[page] 리뷰 링크 관리 페이지',
};

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',
reviewLinks: 'user/review-links',
};
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="클릭하면 해당 프로젝트의 리뷰 목록으로 이동해요"
>
{/* TODO: ReviewCard 컴포넌트 추가 및 생성한 리뷰 링크가 없을 경우, 돋보기 컴포넌트 추가 */}
<></>
</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/ReviewLinkPage/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 ReviewLinkPage = () => {
return (
<ErrorSuspenseContainer>
{/* TODO: 네비게이션 탭 추가 */}
<ReviewLinkDashboard />
</ErrorSuspenseContainer>
);
};

export default ReviewLinkPage;
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 ReviewLinkPage } from './ReviewLinkPage';
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 ReviewLinkPage = lazy(() => import('@/pages/ReviewLinkPage'));

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.reviewLinks}`, element: <ReviewLinkPage /> },
],
},
]);
Expand Down
Loading