-
Notifications
You must be signed in to change notification settings - Fork 1
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] Dropdown 관련 컴포넌트들 구현 #16
Conversation
- DropdownItemType의 종류(`withImg`, `withColor`, `onlyContent`)에 따라 내부 구성 렌더.
- `DropdownNameKOR` enum을 사용하여 영한 번역. - 로직은 영어로하고, 렌더할 때 한글로 번역.
- `isOpen`에 따라 `<DropdownPanel />` 렌더. - 사용 컴포넌트로부터 `dropdownName` 및 `dropdownList`를 props로 전달 받음.
- `DropdownPanel`이 사용되는 상황은 두가지(필터 또는 이슈 생성시 선택)가 있음. - 그에 맞게 `panelType`을 `filter`와 `select`로 구분하여 렌더.
- Dropdown 관련 types 정의에서 `type` -> `variant`으로 변경. - Design system에 `border` 및 SVG icon용 `filter` 추가.
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.
수고하셨습니다아 👍 (빠르고 정확한 코드에 감탄..)
Dropdown
- Dropdown 종류가 한가지 더 있는데, 나중에 작업할 때 DropdownPanel에 추가해도 좋고 이번에 추가해도 좋을 것 같아요!
designSystem iconFilter & border
designSystem.ts에 icon용 filter랑 border 추가했는데 확인해주세요.
export default function DropdownItem({ item }: { item: DropdownItemType }) { | ||
const generateItem = (item: DropdownItemType) => { | ||
switch (item.variant) { | ||
case "withImg": | ||
return ( | ||
<Label htmlFor={item.content}> | ||
<Avatar | ||
src={item.imgSrc} | ||
alt={`${item.variant}: ${item.content}`} | ||
/> | ||
<Content>{item.content}</Content> | ||
<input | ||
className="radio-input" | ||
type="radio" | ||
name={item.name} | ||
id={item.content} | ||
/> | ||
<img className="radio-img" src={checkOffCircle} alt="" /> | ||
</Label> | ||
); | ||
case "withColor": | ||
return ( | ||
<Label htmlFor={item.content}> | ||
<ColorSwatch $colorFill={item.colorFill} /> | ||
<Content>{item.content}</Content> | ||
<input | ||
className="radio-input" | ||
type="radio" | ||
name={item.name} | ||
id={item.content} | ||
/> | ||
<img className="radio-img" src={checkOffCircle} alt="" /> | ||
</Label> | ||
); | ||
case "plain": | ||
return ( | ||
<Label htmlFor={item.content}> | ||
<Content>{item.content}</Content> | ||
<input | ||
className="radio-input" | ||
type="radio" | ||
name={item.name} | ||
id={item.content} | ||
/> | ||
<img className="radio-img" src={checkOffCircle} alt="" /> | ||
</Label> | ||
); | ||
default: | ||
throw Error("Invalid dropdown item variant"); | ||
} | ||
}; | ||
|
||
return <StyledDropdownItem>{generateItem(item)}</StyledDropdownItem>; | ||
} |
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.
Label 하위 컴포넌트에 <Content>부터 <img>
까지 중복인 것 같아서 하위 컴포넌트로 빼도 좋을 것 같아요!
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.
마땅한 하위 컴포넌트 이름이 안떠올라서 넘겼는데 한번 빼볼게요 👍
캡쳐까지 첨부하셔서 설명해주시니 이해가 빠르네요. 감사합니다 🙏
|
Issues
What is this PR? 👓
Key changes 🔑
DropdownIndicator
,DropdownPanel
,DropdownItem
컴포넌트 구현.To reviewers 👋