-
Notifications
You must be signed in to change notification settings - Fork 1
PrezelTabs 구현 #49
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
base: develop
Are you sure you want to change the base?
PrezelTabs 구현 #49
Conversation
디자인 시스템에 사용될 신규 아이콘 4종을 추가했습니다. * `ic_storage` 추가 * `ic_lock` 추가 * `ic_setting` 추가 * `ic_edit` 추가
디자인 시스템에 맞춰 탭과 뷰페이저가 결합된 `PrezelTabs` 컴포넌트를 추가했습니다. * `PrezelTabItem` 데이터 클래스 및 `PrezelTabSize` (Small, Regular) 추가 * `SecondaryTabRow` 및 `HorizontalPager`를 이용한 탭 시스템 구현 * 탭 선택 시 애니메이션 또는 즉시 이동 로직 구현 * 배지(Badge) 표시 기능 지원 * 미리보기(Preview) 코드 추가
Walkthrough디자인 시스템 핵심 모듈에 탭 컴포넌트와 아이콘 리소스를 추가합니다. PrezelTabs 컴포저블은 PrezelTabItem(label, badgeCount, enabled) 데이터 모델과 PrezelTabSize(Small, Regular) 열거형을 제공하며, PagerState 기반의 HorizontalPager와 SecondaryTabRow를 사용해 탭 네비게이션, 선택 인디케이터, 배지 표시 및 거리 기반 애니메이션/스크롤 동작을 구현합니다. 또한 edit, lock, setting, storage 아이콘을 나타내는 4개의 벡터 드로어블 리소스가 각 24×24dp, 색상 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
`PrezelTabs` 내부의 복잡한 UI 로직을 독립적인 컴포넌트로 분리하여 가독성을 높이고 구조를 개선했습니다. * `PrezelTabsBar`, `PrezelTabItem`, `PrezelTabsPager` 비공개 컴포넌트 추출 * 기존 `PrezelTabs` 내 인라인 구현부를 신규 컴포넌트로 대체 * 코드 스타일 및 들여쓰기 수정
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.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelTabs.kt`:
- Line 49: 함수/컴포넌트 시그니처에서 잘못된 파라미터 이름 userScrolledEnabled 을 userScrollEnabled 로
바꾸고, PrezelTabs 컴포저블 내부와 호출부(특히 현재 리뷰에서 언급된 사용 지점: HorizontalPager 호출 부분 포함, 참고
심볼: PrezelTabs 및 HorizontalPager)에서 모든 참조를 동일하게 변경하여 Material3 HorizontalPager의
파라미터 이름과 일치시키세요; 즉 파라미터 선언, 기본값, 그리고 Line 72에 해당하는 사용 위치의 키 이름을
userScrollEnabled 로 통일하면 됩니다.
🧹 Nitpick comments (3)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelTabs.kt (3)
34-41: 데이터 클래스와 Composable 함수 이름 충돌
PrezelTabItem데이터 클래스(Line 35)와 private composable 함수(Line 112)가 동일한 이름을 사용하고 있습니다. 코드 가독성을 위해 private composable의 이름을 변경하는 것을 권장합니다.♻️ 권장 수정
`@Composable` -private fun PrezelTabItem( +private fun PrezelTabContent( item: PrezelTabItem, selected: Boolean, size: PrezelTabSize, onClick: () -> Unit, ) {Line 101의 호출부도 함께 수정:
- PrezelTabItem( + PrezelTabContent( item = item, selected = pagerState.currentPage == index, size = size, onClick = { onTabClick(index, item.enabled) }, )Also applies to: 111-134
152-159: 탭 크기에 따른 배지 크기 고려현재 탭 크기와 관계없이 항상
PrezelBadgeSize.REGULAR를 사용하고 있습니다.PrezelTabSize.Small일 때 배지 크기도 조정하는 것이 시각적 균형에 더 적합할 수 있습니다. 디자인 의도에 따라 검토해 주세요.♻️ 선택적 수정 제안
if (badgeCount != null) { PrezelBadge( active = false, count = badgeCount, - size = PrezelBadgeSize.REGULAR, + size = if (size == PrezelTabSize.Small) PrezelBadgeSize.SMALL else PrezelBadgeSize.REGULAR, disabled = !selected, ) }
195-226: 비활성화된 탭 프리뷰 추가 권장현재 프리뷰에서
enabled = false상태의 탭이 포함되어 있지 않습니다. PR 설명의 스크린샷에서는 비활성화된 탭이 표시되어 있으므로, 이를 테스트하는 프리뷰를 추가하면 컴포넌트의 전체 기능을 확인하는 데 도움이 됩니다.♻️ 비활성화 탭 포함 프리뷰 예시
`@ThemePreview` `@Composable` private fun PrezelTabWithDisabledPreview() { val tabs = persistentListOf( PrezelTabItem(label = "Label 0", badgeCount = 0), PrezelTabItem(label = "Label", enabled = false), PrezelTabItem(label = "Label", enabled = false), ) val pagerState = rememberPagerState(initialPage = 0) { tabs.size } PrezelTheme { Box( modifier = Modifier .fillMaxSize() .background(PrezelTheme.colors.bgRegular), ) { PrezelTabs( tabs = tabs, pagerState = pagerState, size = PrezelTabSize.Regular, ) { page -> Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center, ) { Text("Page: $page") } } } } }
...el/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelTabs.kt
Outdated
Show resolved
Hide resolved
`PrezelTabs` 컴포넌트 내의 오타를 수정하고 내부 구성 요소의 명칭을 명확하게 변경했습니다. * `userScrolledEnabled` 파라미터 명칭을 `userScrollEnabled`로 변경 * 내부 컴포넌트 `PrezelTabItem`을 `PrezelTabContent`로 명칭 변경 * 기타 코드 정렬 수정
📌 작업 내용
SecondaryTabRow + HorizontalPager 구현
Icon 4개 추가
🧩 관련 이슈
📸 스크린샷
📢 논의하고 싶은 내용
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.