-
Notifications
You must be signed in to change notification settings - Fork 5
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] 홈 관리 네비게이션에 랜딩페이지로 이동하는 기능 추가 및 TopNav 구조 개선 #627
Conversation
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.
굳굳쓰 ~ 조하요
<nav> | ||
<ul css={topNavStyle}>{children}</ul> | ||
</nav> |
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.
오 ~ 적절한 태그 사용
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.
접근성 미션도 있다보니 챙겨봤습니다
@@ -25,7 +25,7 @@ const Account = () => { | |||
return ( | |||
<MainLayout backgroundColor="white"> | |||
<TopNav> | |||
<Back /> | |||
<TopNav.Element displayName="뒤로가기" noEmphasis routePath="-1" /> |
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.
깔꼼시롬
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.
대 쿠 키....
너무 조와용 고생많았어요
앞으로 좀 더 확장적으로 nav를 사용할 수 있을 것 같아요
@@ -1,6 +1,6 @@ | |||
import {TextSize} from '../Text/Text.type'; | |||
|
|||
export type TextColor = 'black' | 'gray'; | |||
export type TextColor = 'black' | 'gray' | 'onTertiary'; |
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.
대면으로 설명해 준 것 처럼 black과 onTertiary는 같은 컬러를 가르키는 시맨틱 토큰이에용
이부분에서는 text의 color들을 다루는 것이다 보니, onTertiary보단 black을 사용하는게 좋을 것 같아요
뭐 크게 문제는 없지만~ 추후에 일괄적인 컬러 적용에 차질이 있을 수 있으니
참고만 하고 넘어가면 좋을 것 같숩니당
export const navElementStyle = css({ | ||
padding: '0 0.5rem', | ||
|
||
':first-of-type': { |
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.
first-of-type은 어떤 역할을 하는 선택자인가요? 여러 element중 첫번째 친구에게만 적용되는건가요?
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.
네 맞아요! 비슷한 것으로 :first-child가 있는데 emotion css에서 이 가상태그를 쓰면 콘솔 창에서 빨간색 경고가 나와요.
<Flex justifyContent="spaceBetween" alignItems="center" margin="0 1rem 0 0"> | ||
<TopNav> | ||
<TopNav.Element routePath="/"> | ||
<IconButton variants="none"> | ||
<Icon iconType="heundeut" /> | ||
</IconButton> | ||
</TopNav.Element> | ||
<TopNav.Element displayName="홈" routePath="/home" /> | ||
<TopNav.Element displayName="관리" routePath="/admin" /> | ||
</TopNav> |
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.
정말 딱 생각했던대로 구현해버린 쿠키....
뉴런공유가 가능한건가...?
}; | ||
|
||
export type NavElementStyleProps = { | ||
noEmphasis?: boolean; |
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.
noEmphasis 를 사용하는것보다, emphasis로 쓴다면 더 짧은 이름으로 사용할 수 있찌 않을까요?
boolean이면 true, false만 변경되는 것이니까~
그리고 boolean을 나타내기 위해 isEmphasized
와 같이 써도 좋을 것 같아용
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.
강조가 되는 것이 기본이라고 생각했어요. 그래서 noEmphasis 옵션을 주면 강조를 해제한다는 의미입니다.
noEmphasis prop만 주게 되면 적용이 되기 때문에 isEmphasized={false} 보다 더 간편하다고 생각했습니다.
<TopNav.Element displayName="뒤로가기" noEmphasis routePath="-1" />
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.
아휴 기존 코드까지 바꾸느라 고생많았습니다.
import {navElementStyle} from './NavElememt.style'; | ||
import {NavElementProps} from './NavElement.type'; | ||
|
||
const NavElement = ({displayName, routePath, onHandleRouteInFunnel, noEmphasis = false, children}: NavElementProps) => { |
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.
<TabNav/>
와 <TabNav.Item/>
은 어떨까요? 엘리먼트보다는 TabNab안의 list의 구성요소라는 느낌으로 아이템이 더 직관적으로 다가오지 않을까 싶어요! 그치만 제 생각이니까 쿠키가 적절하다 생각하는 대로 고고스~
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.
오 아이템도 괜찮은 것 같아요! 더 이해하기 쉽겠다~
3078cea
const TopNav = ({children}: TopNavProps) => { | ||
return ( | ||
<nav> | ||
<ul css={topNavStyle}>{children}</ul> |
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.
접근성을 고려한 것 좋네요👍 이거 낭독기가 아마 "n개아이템 중 몇번재 아이템입니다" 라고 읽어줬던 것 같던데 되게 좋더라구요
{step !== STEP_SEQUENCE[STEP_SEQUENCE.length - 1] && ( | ||
<TopNav.Element displayName="뒤로가기" noEmphasis routePath="" onHandleRouteInFunnel={handleBack} /> | ||
)} |
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.
TopNav를 다양한 곳에서 사용하고 있어서 어떤 값들을 props로 받을 지 고민을 많이 했을 것 같아요. 쿠키의 그런 고민 덕분에 편리하게 사용할 수 있게 되었네요! 👍
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.
맞아요~ 이거 고민 좀 많이 했는데;;ㅋㅋ 더 편하게 사용할 수 있게 됐다니 다행입니다😊
issue
구현 사항
랜딩페이지로 돌아가는 기능 추가
사용자를 늘리기 위해 랜딩 페이지로 돌아가는 기능이 필요했고 흔듯콘을 이용해서 구현했습니다.
TopNav 구조 개선
개선 이유
기존의 TopNav는 Switch에 강하게 연결되어있습니다. Switch에 navigate를 하는 기능이 있고 Switch는 TextButton으로 되어있기 때문에 지금의 흔듯콘이 들어오는 상황에 대처를 할 수 없었습니다.
개선 방법
NavItem 컴포넌트를 만들어서 기존의 useNavSwitch에서 책임지던 route를 NavElement에 위임했습니다.
사용할 수 있는 props는 아래에 정리해뒀어요
displayName
routePath
noEmphasis
onHandleRouteInFunnel
children
기본적으로 displayName과 routePath를 prop으로 넘겨주면 TopNav에 홈과 관리가 보이게 되며 현재 선택된 탭이 강조되게 했습니다.
그리고 텍스트가 아닌 다른 것을 Nav로 사용할 수도 있으므로 children을 받습니다. children을 받을 경우는 아래와 같이 사용합니다. 이 때는 보여질 텍스트가 없으므로 displayName을 option으로 설정했어요.
추가로 퍼널에서 TopNav를 사용할 때는 실제 route를 사용하지 않고 moveToNextStep을 사용합니다.
그래서 이를 호환하기 위해서 onHandleRouteInFunnel를 넣었습니다. 사용법은 아래와 같아요
그리고 뒤로가기의 경우 텍스트를 강조하지 않아요 그래서 noEmphasis 옵션을 주게 되면 텍스트가 강조되지 않습니다.
🫡 참고사항
components 디렉토리 내에 common이란 디렉토리가 있었는데 그 안에 logo 밖에 없어서 common 디렉토리를 지웠습니다.