Conversation
- 서재 필터 바텀시트 정비: 칩 좌우 패딩, 탭 로우 트레일링 패딩, 읽기상태 구분선, 선택 칩 영역/하단 가로선, 시트 높이 고정(칩 선택 시 콘텐츠 하향), 별점 토글 thumb 크기 고정 - 초기화/작품 찾기 버튼을 작품 탐색 탭 버튼과 동일하게 통일 - 정렬 바텀시트: 텍스트 중앙 정렬 유지 + 체크 오버레이, 선택 스타일(라운드 40, Primary20), 색상/타이포 수정 - 연재상태 필터 요청 파라미터 오타 수정 (isComplete → isCompleted) - 등록 키워드 미표시(userId 레이스) 수정: userId 반응형(StateFlow) 노출 후 유효값 대기
|
Warning Review limit reached
Next review available in: 54 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
Walkthrough서재 필터/정렬 UI의 레이아웃과 스타일을 조정하고, 등록 키워드 조회가 유효한 userId를 기다리도록 데이터 흐름을 변경했습니다. 또한 관련 API 쿼리 키를 수정하고, 실패 시 로깅을 추가했습니다. Changes계정/서재 키워드 로딩 흐름
서재 필터/정렬 UI 스타일 및 레이아웃 조정
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit
ktlint
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (32) (should be 36)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (24) (should be 28)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (20) (should be 24)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (24) (should be 28)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (20) (should be 24)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (20) (should be 24)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (20) (should be 24)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (24) (should be 28)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (32) (should be 36)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (32) (should be 36)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (32) (should be 36)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (32) (should be 36)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (24) (should be 28)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (20) (should be 24)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (0) (should be 4)
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (4)
core/network/src/main/java/com/into/websoso/core/network/datasource/library/LibraryApi.kt (1)
25-25: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value쿼리 키와 파라미터명 불일치.
@Query("isCompleted")로 요청 키는 수정됐지만 로컬 파라미터명은 여전히isComplete입니다. 와이어 프로토콜에는 영향 없지만 가독성을 위해 파라미터명도 함께 맞추는 것을 권장합니다.♻️ 제안
- `@Query`("isCompleted") isComplete: Boolean?, + `@Query`("isCompleted") isCompleted: Boolean?,🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@core/network/src/main/java/com/into/websoso/core/network/datasource/library/LibraryApi.kt` at line 25, The query key and local parameter name are inconsistent in LibraryApi, so rename the `isComplete` parameter in the affected function to match `@Query("isCompleted")` for clarity and consistency. Update the corresponding method signature in `LibraryApi` so the parameter name reflects the request field name everywhere it is used.feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetButtons.kt (2)
33-56: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value단일 자식
Row를 감싸는Column은 불필요.
Column이 자식을 하나(Row)만 가지므로,Column에 적용된 modifier(fillMaxWidth,background,padding)를Row에 직접 적용하면 레이아웃 트리를 한 단계 줄일 수 있습니다.♻️ 제안: Column 제거
- Column( - modifier = Modifier - .fillMaxWidth() - .background(White) - .padding(start = 17.dp, top = 10.dp, end = 15.dp, bottom = 10.dp), - ) { - Row( - modifier = Modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(10.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - ResetButton(onClick = onResetClick) - SearchButton( - onClick = onFilterSearchClick, - modifier = Modifier.weight(1f), - ) - } - } + Row( + modifier = Modifier + .fillMaxWidth() + .background(White) + .padding(start = 17.dp, top = 10.dp, end = 15.dp, bottom = 10.dp), + horizontalArrangement = Arrangement.spacedBy(10.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + ResetButton(onClick = onResetClick) + SearchButton( + onClick = onFilterSearchClick, + modifier = Modifier.weight(1f), + ) + }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetButtons.kt` around lines 33 - 56, The LibraryFilterBottomSheetButtons composable wraps a single Row in an unnecessary Column, so move the Column’s fillMaxWidth, background, and padding modifiers directly onto the Row and remove the extra container. Keep the existing ResetButton and SearchButton calls inside LibraryFilterBottomSheetButtons, and preserve the same spacing and alignment behavior while simplifying the layout tree.
107-107: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
Previewimport 누락, 완전 정규화된 어노테이션 사용.다른 파일들은
import androidx.compose.ui.tooling.preview.Preview후@Preview를 사용하는 반면, 이 파일만@androidx.compose.ui.tooling.preview.Preview로 완전 정규화되어 있어 일관성이 떨어집니다.♻️ 제안
+import androidx.compose.ui.tooling.preview.Preview ... -@androidx.compose.ui.tooling.preview.Preview(showBackground = true) +@Preview(showBackground = true)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetButtons.kt` at line 107, The preview annotation usage in LibraryFilterBottomSheetButtons is inconsistent with the rest of the codebase because it uses the fully qualified androidx.compose.ui.tooling.preview.Preview instead of the imported `@Preview`. Add the Preview import and update the affected preview function(s) to use `@Preview` so the annotation style matches the other composables in this file and nearby library filter components.feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt (1)
50-53: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value매직 넘버 상수에 산출 근거 주석 추가 권장.
FILTER_CONTENT_REGION_HEIGHT(333.5dp)는SELECTED_CHIPS_ROW_HEIGHT(36.5dp) + 구분선(1dp) + 스페이서(16dp) + 실제 탭 콘텐츠 영역(280dp)의 합으로 역산됩니다. 이 관계가 코드상 명시되어 있지 않아, 추후SELECTED_CHIPS_ROW_HEIGHT나 구분선/스페이서 값이 바뀌면FILTER_CONTENT_REGION_HEIGHT를 수동으로 재계산해야 하고 누락 시 레이아웃이 어긋날 수 있습니다.♻️ 제안: 하위 상수 조합으로 유도값 계산
private val SELECTED_CHIPS_ROW_HEIGHT = 36.5.dp - -private val FILTER_CONTENT_REGION_HEIGHT = 333.5.dp +private val SELECTED_CHIPS_DIVIDER_HEIGHT = 1.dp +private val SELECTED_CHIPS_SPACER_HEIGHT = 16.dp +private val TAB_CONTENT_HEIGHT = 280.dp +private val FILTER_CONTENT_REGION_HEIGHT = + SELECTED_CHIPS_ROW_HEIGHT + SELECTED_CHIPS_DIVIDER_HEIGHT + SELECTED_CHIPS_SPACER_HEIGHT + TAB_CONTENT_HEIGHT🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt` around lines 50 - 53, The fixed FILTER_CONTENT_REGION_HEIGHT constant should be documented or derived from the smaller layout constants instead of appearing as an unexplained magic number. Update LibraryFilterBottomSheetScreen and the related constants like SELECTED_CHIPS_ROW_HEIGHT so the height calculation is clearly tied to the selected chips row, divider, spacer, and tab content values, making future changes easier and preventing layout drift when those values change.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt`:
- Around line 111-145: The fixed-height layout in LibraryFilterBottomSheetScreen
can clip or overlap content when font scaling is increased. Update the
selected-chips container and the tab content container to avoid relying on hard
dp heights with weight, and use more flexible sizing such as heightIn(min = ...)
and/or wrapContentHeight() in the Box/Column around LibraryFilterSelectedChips
and the LibraryFilterBottomSheetGenre area. Make sure the layout still preserves
spacing and separators while allowing text and FlowRow content to expand safely
under accessibility font sizes.
---
Nitpick comments:
In
`@core/network/src/main/java/com/into/websoso/core/network/datasource/library/LibraryApi.kt`:
- Line 25: The query key and local parameter name are inconsistent in
LibraryApi, so rename the `isComplete` parameter in the affected function to
match `@Query("isCompleted")` for clarity and consistency. Update the
corresponding method signature in `LibraryApi` so the parameter name reflects
the request field name everywhere it is used.
In
`@feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetButtons.kt`:
- Around line 33-56: The LibraryFilterBottomSheetButtons composable wraps a
single Row in an unnecessary Column, so move the Column’s fillMaxWidth,
background, and padding modifiers directly onto the Row and remove the extra
container. Keep the existing ResetButton and SearchButton calls inside
LibraryFilterBottomSheetButtons, and preserve the same spacing and alignment
behavior while simplifying the layout tree.
- Line 107: The preview annotation usage in LibraryFilterBottomSheetButtons is
inconsistent with the rest of the codebase because it uses the fully qualified
androidx.compose.ui.tooling.preview.Preview instead of the imported `@Preview`.
Add the Preview import and update the affected preview function(s) to use
`@Preview` so the annotation style matches the other composables in this file and
nearby library filter components.
In
`@feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt`:
- Around line 50-53: The fixed FILTER_CONTENT_REGION_HEIGHT constant should be
documented or derived from the smaller layout constants instead of appearing as
an unexplained magic number. Update LibraryFilterBottomSheetScreen and the
related constants like SELECTED_CHIPS_ROW_HEIGHT so the height calculation is
clearly tied to the selected chips row, divider, spacer, and tab content values,
making future changes easier and preventing layout drift when those values
change.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: b02db238-9c31-420a-86da-63c1d43c4122
📒 Files selected for processing (15)
core/network/src/main/java/com/into/websoso/core/network/datasource/library/LibraryApi.ktdata/account/src/main/java/com/into/websoso/data/account/AccountRepository.ktdata/library/src/main/java/com/into/websoso/data/library/repository/MyLibraryRepository.ktfeature/library/src/main/java/com/into/websoso/feature/library/LibraryViewModel.ktfeature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.ktfeature/library/src/main/java/com/into/websoso/feature/library/component/LibrayFilterTopBar.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetButtons.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetClickableItem.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetRating.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetReadStatus.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterChip.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterSelectedChips.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterTabRow.ktfeature/library/src/main/java/com/into/websoso/feature/library/model/LibraryFilterUiModel.kt
| if (activeTabs.isNotEmpty()) { | ||
| Box( | ||
| modifier = Modifier | ||
| .fillMaxWidth() | ||
| .height(SELECTED_CHIPS_ROW_HEIGHT) | ||
| .padding(horizontal = 20.dp), | ||
| contentAlignment = Alignment.CenterStart, | ||
| ) { | ||
| LibraryFilterSelectedChips( | ||
| filterUiState = filterUiState, | ||
| onReadStatusClick = onReadStatusClick, | ||
| onGenreClick = onGenreClick, | ||
| onSeriesStatusClick = onSeriesStatusClick, | ||
| onAttractivePointClick = onAttractivePointClick, | ||
| onRatingRemove = onRatingRemove, | ||
| onKeywordClick = onKeywordClick, | ||
| ) | ||
| } | ||
|
|
||
| GENRE -> LibraryFilterBottomSheetGenre( | ||
| genres = filterUiState.genres, | ||
| onGenreClick = onGenreClick, | ||
| Box( | ||
| modifier = Modifier | ||
| .fillMaxWidth() | ||
| .height(1.dp) | ||
| .background(Gray50), | ||
| ) | ||
|
|
||
| SERIES_STATUS -> LibraryFilterBottomSheetSeriesStatus( | ||
| seriesStatuses = filterUiState.seriesStatuses, | ||
| onSeriesStatusClick = onSeriesStatusClick, | ||
| ) | ||
| Spacer(modifier = Modifier.height(16.dp)) | ||
| } | ||
|
|
||
| RATING -> LibraryFilterBottomSheetRating( | ||
| ratingFilter = filterUiState.ratingFilter, | ||
| onRangeChange = onRatingRangeChange, | ||
| onRatinglessToggle = onRatinglessToggle, | ||
| ) | ||
| Box( | ||
| modifier = Modifier | ||
| .fillMaxWidth() | ||
| .weight(1f) | ||
| .padding(horizontal = 20.dp), | ||
| ) { |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
고정 높이 컨테이너가 폰트 확대(접근성) 설정 시 콘텐츠를 잘라낼 수 있음.
선택 칩 영역(SELECTED_CHIPS_ROW_HEIGHT)과 탭 콘텐츠 영역이 모두 dp 고정 높이/weight 기반으로 제약되어 있습니다. Box에 별도 clip이 없어 시각적으로는 넘칠 수 있지만, 시스템 글꼴 크기를 키운 사용자의 경우 칩 텍스트나 탭 콘텐츠(LibraryFilterBottomSheetGenre처럼 스크롤이 없는 FlowRow)가 할당된 높이를 초과해 하단 요소와 겹치거나 잘릴 위험이 있습니다. 기존에도 유사한 고정 높이(280dp)가 있었지만, 이번에 명시적으로 상수화된 만큼 heightIn(min = ...) 또는 wrapContentHeight() 조합으로 완화하는 것을 고려해보세요.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt`
around lines 111 - 145, The fixed-height layout in
LibraryFilterBottomSheetScreen can clip or overlap content when font scaling is
increased. Update the selected-chips container and the tab content container to
avoid relying on hard dp heights with weight, and use more flexible sizing such
as heightIn(min = ...) and/or wrapContentHeight() in the Box/Column around
LibraryFilterSelectedChips and the LibraryFilterBottomSheetGenre area. Make sure
the layout still preserves spacing and separators while allowing text and
FlowRow content to expand safely under accessibility font sizes.
- 별점 등록 안된 작품만 보기 텍스트 색상 Gray300으로 변경 - 등록 키워드 미표시 수정: 필터 시트 열 때마다 등록 키워드 재조회 - 선택 칩과 하단 가로선 사이 세로 간격 12dp 추가
There was a problem hiding this comment.
- 정렬 바텀시트: 선택 시에도 텍스트는 중앙 정렬 유지 + 체크 아이콘만 왼쪽 오버레이, 선택 배경 라운드 40 / Primary20, 미선택 텍스트 색 Gray200
PR 본문에 있는것 처럼 텍스트는 중앙정렬 유지 되어있고, v 표시 까지 포함되어서 글자가 왼쪽으로 밀리는 문제는 해결이 된 것 같습니다. 다만 체크 아이콘이 너무 왼쪽에 붙어버린것 같아요..!
또한 선택 배경 radius(라운드 값)이 너무 둥근것 같아 찾아보니, radius값이 40이 아니라 12인 것 같더라고요..! 다를 수도 있으니 수정 전 꼭꼭 피그마로 더블체크 부탁드립니다!
관련 이슈 스크린샷 첨부해두겠습니다!
There was a problem hiding this comment.
파일 위치가 여기가 맞는지 모르겠지만 고정 영역 아래에 구분선이 있다는 요구사항(디스코드 안드 1.9.0 QA)이 있습니다!
제가 리뷰할때도 있었는지 아닌지 모르겠지만?? 7월 태스크 때문에 최종뷰가 변했다고 해서 변한것 같기도 하고요??
- 상단 고정 영역 관련
고정영역 아래에 - 라인 있어요.
이 요구사항이 누락된 것 같습니다!
- 체크 아이콘을 글자 왼쪽 12dp에 배치 (좌우 대칭 슬롯으로 텍스트 중앙 정렬 유지) - 선택 항목 라운드 40dp → 12dp
- 최신순 버튼 줄 10dp 아래에 Gray50 가로선(1dp) 전체 너비로 추가
|
수정했습니다! |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
feature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.kt (2)
108-115: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueSpacer 두 개를 하나로 합치는 것을 고려해 보세요.
오른쪽 균형 슬롯이
Spacer(width=12.dp)+Spacer(width=20.dp)로 두 번 나뉘어 있습니다. 왼쪽 슬롯(20dp 아이콘 박스 + 12dp 스페이서 = 32dp)과 대칭을 맞추는 의도는 맞지만, 하나의Spacer(width = 32.dp)로 병합하면 가독성이 조금 더 좋아집니다.♻️ 제안
Spacer(modifier = Modifier.width(12.dp)) Text( text = label, style = WebsosoTheme.typography.body2, color = if (isSelected) Black else Gray200, ) - Spacer(modifier = Modifier.width(12.dp)) - Spacer(modifier = Modifier.width(20.dp)) + Spacer(modifier = Modifier.width(32.dp))🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.kt` around lines 108 - 115, The spacing around the `Text` in `LibrarySortBottomSheet` is split into two adjacent `Spacer` calls, which should be simplified. In the composable block that renders the sort item label, replace the consecutive right-side spacers with a single spacer of the combined width so the layout intent stays the same while improving readability. Use the surrounding `Text` and `Spacer` elements in this row to locate the change.
85-116: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff정렬 목록의 선택 상태에 대한 접근성 시맨틱이 없습니다.
LibrarySortItem은 상호 배타적으로 하나만 선택되는 정렬 옵션 그룹의 항목인데, 단순debouncedClickable만 사용하고 선택 상태(selected)나Role.RadioButton등의 semantics가 전달되지 않습니다. 스크린리더 사용자는 현재 어떤 항목이 선택되어 있는지 알기 어렵습니다.Modifier.selectable(selected = isSelected, role = Role.RadioButton, onClick = onClick)을 적용하고 상위Column에selectableGroup()을 추가하는 것을 고려해 보세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.kt` around lines 85 - 116, LibrarySortItem currently uses only debouncedClickable, so the selected state is not exposed to accessibility services. Update LibrarySortBottomSheet’s item modifier to use selectable with selected = isSelected and role = Role.RadioButton, keeping onClick wired through that API, and add selectableGroup() to the parent Column that contains the sort options so screen readers can announce the mutually exclusive selection state correctly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In
`@feature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.kt`:
- Around line 108-115: The spacing around the `Text` in `LibrarySortBottomSheet`
is split into two adjacent `Spacer` calls, which should be simplified. In the
composable block that renders the sort item label, replace the consecutive
right-side spacers with a single spacer of the combined width so the layout
intent stays the same while improving readability. Use the surrounding `Text`
and `Spacer` elements in this row to locate the change.
- Around line 85-116: LibrarySortItem currently uses only debouncedClickable, so
the selected state is not exposed to accessibility services. Update
LibrarySortBottomSheet’s item modifier to use selectable with selected =
isSelected and role = Role.RadioButton, keeping onClick wired through that API,
and add selectableGroup() to the parent Column that contains the sort options so
screen readers can announce the mutually exclusive selection state correctly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 1822cd60-2f8d-40af-ae71-2e221dd4cbdf
📒 Files selected for processing (4)
feature/library/src/main/java/com/into/websoso/feature/library/LibraryViewModel.ktfeature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.ktfeature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetRating.kt
🚧 Files skipped from review as they are similar to previous changes (2)
- feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetRating.kt
- feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt


📌𝘐𝘴𝘴𝘶𝘦𝘴
📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯
서재 필터 바텀시트
서재 상단바 / 정렬
버그 수정
isComplete→isCompleted) — 서재 연재중 / 완결작 필터 미동작 해결userId가 로그인 후 비동기로 세팅되기 전에 키워드를 요청하던 레이스 →userId를 반응형(StateFlow)으로 노출하고 유효값을 기다린 뒤 요청📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵
💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴
Summary by CodeRabbit
New Features
Bug Fixes