-
Notifications
You must be signed in to change notification settings - Fork 2
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
Changes from 10 commits
d2185cf
47e8253
8580927
4ec2fa7
a82450d
bfa7a9d
281b115
45d1585
e869d38
3202a95
c747261
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,6 +24,7 @@ export const PAGE_VISITED_EVENT_NAME: { [key in Exclude<PageName, undefined>]: s | |
detailedReview: '[page] 리뷰 상세 보기 페이지', | ||
reviewWriting: '[page] 리뷰 작성 페이지', | ||
reviewWritingComplete: '[page] 리뷰 작성 완료 페이지', | ||
reviewLinkManagement: '[page] 리뷰 링크 관리 페이지', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 세심하게, Amplitude도 챙겼네요 👍 Amplitude에서 접속한 페이지 경로를 추적하려면, ROUTE에 'reviewLinkManagement' 를 key로 하는 경로도 추가되어야해요. |
||
}; | ||
|
||
export const REVIEW_WRITING_EVENT_NAME = { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,4 +7,5 @@ export const ROUTE = { | |
detailedReview: 'user/detailed-review', | ||
reviewZone: 'user/review-zone', | ||
reviewCollection: 'user/review-collection', | ||
reviewLinkManagement: 'user/review-link-management', | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. URL의 경우, 개인적으로 간단하게 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 훨씬 좋은 것 같네요!👍👍 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 저도 간결하게 가져가는 게 좋다고 생각합니다! 그래서 작성한 리뷰 확인 페이지도 바꿨어요. (이것도 바꾸라는 건 아님!) |
||
}; |
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={'클릭하면 해당 프로젝트의 리뷰 목록으로 이동해요'} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 중괄호 없이 문자열만 넘기는 것도 좋을 것 같아요! |
||
> | ||
{/* TODO: ReviewCard 컴포넌트 추가 및 생성한 리뷰 링크가 없을 경우, 돋보기 컴포넌트 추가 */} | ||
<></> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 Fragment는 다른 작업의 흔적인가요ㅋㅋㅋ 어차피 또 작업할 페이지니까 있어도 상관없지만요~~ There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
</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; | ||
} | ||
`; |
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: 네비게이션 탭 추가 */} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 쑤쑤가 구현한 네비게이션 탭은 '네비게이션 탭은 부모 페이지에만 두고 탭을 클릭하면 네비게이션 탭은 그대로 유지되면서, 탭 아래의 컨텐츠가 전환되는 방식' 같은데, ReviewLinkManagementPage 안에 네비게이션 탭이 추가된다고 주석이 되어 있어서 어떤 방식이 맞는 건가요? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 원래 의도했던 바는 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 로그인 후 사용자 페이지에서 추가 기능이 생기는 확장성과 네비게이션 탭 관리측면에서 쑤쑤가 처음에 구현한 방식이 저는 좋다고 생각했어요. 다만 페이지가 완성되지 않은 상태에서 추상적으로 구현을 해야하니 좀 복잡하죠. 현재 기능에서는 변경된 방식이 간편해서, 우선 이렇게 가고 나중에 기능이 확장되어야하는 지를 보고 다시 이야기해봐요. |
||
<ReviewLinkDashboard /> | ||
</ErrorSuspenseContainer> | ||
); | ||
}; | ||
|
||
export default ReviewLinkManagementPage; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존 로고 컴포넌트가 Topbar의 padding 때문에 영역을 벗어났는데, 해결되었네요👍🏻