Skip to content

fix: 1.9.0 QA#919

Merged
devfeijoa merged 7 commits into
developfrom
fix/918
Jul 6, 2026
Merged

fix: 1.9.0 QA#919
devfeijoa merged 7 commits into
developfrom
fix/918

Conversation

@Sadturtleman

@Sadturtleman Sadturtleman commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

📌𝘐𝘴𝘴𝘶𝘦𝘴

📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯

서재 필터 바텀시트

  • 필터 태그 칩 좌우 패딩 조정 (13 → 9.5dp)
  • 선택 칩 목록 가로 스크롤 끝 패딩(20dp) 추가
  • 상단 필터 탭 로우 오른쪽 트레일링 패딩(20dp) 추가 → 키워드 탭까지 가로 스크롤 여백 확보
  • 읽기상태(보는중 / 봤어요 / 하차) 항목 사이 세로 구분선 추가
  • 선택 칩 노출 시 하단 가로 구분선 추가 (미선택 시 미노출)
  • 칩 선택 시 시트가 위로 커지지 않고 콘텐츠가 아래로 밀리도록 시트 전체 높이 고정
  • 별점 토글(Switch) thumb 크기를 상태(on/off)와 무관하게 고정
  • "별점 등록 안된 작품만 보기" 텍스트 스타일 title2로 변경 + 맞춤법 수정
  • 초기화 / 작품 찾기 버튼을 작품 탐색 탭 버튼과 동일하게 통일

서재 상단바 / 정렬

  • 리스트 · 갤러리 뷰 토글 아이콘 크기 12 → 18dp
  • 정렬 라벨(최신순) 스타일 body5 → body4
  • 정렬 바텀시트: 선택 시에도 텍스트는 중앙 정렬 유지 + 체크 아이콘만 왼쪽 오버레이, 선택 배경 라운드 40 / Primary20, 미선택 텍스트 색 Gray200

버그 수정

  • 연재상태 필터 요청 파라미터 오타 수정 (isCompleteisCompleted) — 서재 연재중 / 완결작 필터 미동작 해결
  • 등록 키워드 미표시 수정: userId가 로그인 후 비동기로 세팅되기 전에 키워드를 요청하던 레이스 → userId를 반응형(StateFlow)으로 노출하고 유효값을 기다린 뒤 요청

📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵

💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴

Summary by CodeRabbit

  • New Features

    • 내 서재 필터와 정렬 화면의 레이아웃과 스타일이 개선되어 더 보기 쉬워졌습니다.
    • 선택된 필터 칩, 읽기 상태 선택, 리셋/검색 버튼 구성이 더 직관적으로 정리되었습니다.
  • Bug Fixes

    • 등록 키워드와 사용자 ID가 더 안정적으로 연동되도록 개선되었습니다.
    • 작품 목록 조회 시 완료 여부 관련 조건이 최신 형식으로 반영되었습니다.
    • 등록 키워드 로딩 실패 시 처리와 로그가 보강되었습니다.

- 서재 필터 바텀시트 정비: 칩 좌우 패딩, 탭 로우 트레일링 패딩, 읽기상태 구분선,
  선택 칩 영역/하단 가로선, 시트 높이 고정(칩 선택 시 콘텐츠 하향), 별점 토글 thumb 크기 고정
- 초기화/작품 찾기 버튼을 작품 탐색 탭 버튼과 동일하게 통일
- 정렬 바텀시트: 텍스트 중앙 정렬 유지 + 체크 오버레이, 선택 스타일(라운드 40, Primary20), 색상/타이포 수정
- 연재상태 필터 요청 파라미터 오타 수정 (isComplete → isCompleted)
- 등록 키워드 미표시(userId 레이스) 수정: userId 반응형(StateFlow) 노출 후 유효값 대기
@coderabbitai

coderabbitai Bot commented Jul 5, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@Sadturtleman, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 54 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 6975fc14-699b-48ab-91b3-86bb08dbbe3f

📥 Commits

Reviewing files that changed from the base of the PR and between 6bd2884 and 10533be.

📒 Files selected for processing (1)
  • feature/library/src/main/java/com/into/websoso/feature/library/component/LibrayFilterTopBar.kt

Walkthrough

서재 필터/정렬 UI의 레이아웃과 스타일을 조정하고, 등록 키워드 조회가 유효한 userId를 기다리도록 데이터 흐름을 변경했습니다. 또한 관련 API 쿼리 키를 수정하고, 실패 시 로깅을 추가했습니다.

Changes

계정/서재 키워드 로딩 흐름

Layer / File(s) Summary
AccountRepository의 userId StateFlow 전환
data/account/.../AccountRepository.kt
userId를 MutableStateFlow로 교체하고 공개 userIdFlow, 읽기 전용 userId getter를 추가.
등록 키워드 조회 시 userId 대기 및 API 파라미터 수정
data/library/.../MyLibraryRepository.kt, feature/library/.../LibraryViewModel.kt, core/network/.../LibraryApi.kt
getRegisteredKeywords가 userIdFlow에서 유효한 값을 기다린 후 조회하고, 실패 시 로그를 남기며, isComplete 쿼리 키를 isCompleted로 변경.

서재 필터/정렬 UI 스타일 및 레이아웃 조정

Layer / File(s) Summary
정렬 바텀시트 아이템 레이아웃/색상 변경
feature/library/.../LibrarySortBottomSheet.kt
LibrarySortItem을 Box 기반으로 교체하고, 코너 반경/배경/텍스트 색상 및 체크 아이콘 배치를 변경.
필터 상단바 아이콘/텍스트 스타일 조정
feature/library/.../LibrayFilterTopBar.kt
토글 아이콘 크기와 정렬 라벨 타이포그래피를 변경.
필터 바텀시트 화면 레이아웃 재구성
feature/library/.../filter/LibraryFilterBottomSheetScreen.kt
선택 칩 영역과 탭 콘텐츠 영역을 새로운 고정 높이/weight 기반 레이아웃으로 재구성.
필터 바텀시트 버튼 리팩터링
feature/library/.../filter/component/LibraryFilterBottomSheetButtons.kt
버튼을 ResetButton/SearchButton으로 분리하고, 리소스/색상/모양을 변경.
클릭 아이템 modifier 확장 및 읽기상태 레이아웃 균등 분할
feature/library/.../LibraryFilterBottomSheetClickableItem.kt, .../LibraryFilterBottomSheetReadStatus.kt
외부 modifier 지원을 추가하고 읽기상태 Row를 weight 기반 균등 분할과 구분선으로 재구성.
평점 필터 문구/스타일 및 칩 스타일 조정
.../LibraryFilterBottomSheetRating.kt, .../LibraryFilterChip.kt
평점 안내 문구/스타일, Switch thumbContent, 칩 패딩/텍스트 스타일을 조정.
선택 칩/탭 Row 여백 조정 및 라벨 문자열 수정
.../LibraryFilterSelectedChips.kt, .../LibraryFilterTabRow.kt, .../model/LibraryFilterUiModel.kt
Row 우측 padding을 추가하고 라벨 타이틀 문자열 공백을 제거.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

  • Team-WSS/WSS-Android#728: AccountRepositoryuserId를 흐름으로 전환한 변경과 같은 데이터 흐름을 다룹니다.
  • Team-WSS/WSS-Android#829: LibraryFilterBottomSheetClickableItem의 modifier 전달 변경과 같은 컴포넌트 계층을 공유합니다.
  • Team-WSS/WSS-Android#914: getRegisteredKeywords()와 라이브러리 키워드 조회 흐름이 직접 연결됩니다.

Suggested reviewers: s9hn, m6z1, devfeijoa

Poem

나는 토끼, 서재를 폴짝 정리했지 🐇
userId는 흐름을 타고 조용히 기다리고,
버튼은 동글동글 새 옷을 입었어.
칩과 탭은 반듯하게 줄을 맞추고,
오늘도 당근처럼 선명한 변경이야 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 1.9.0 QA 수정 작업과 직접 관련되어 있어 변경 사항의 핵심을 무난하게 나타냅니다.
Description check ✅ Passed Issues, 작업 설명, 스크린샷, 리뷰어 섹션이 모두 포함되어 템플릿 요구사항을 대부분 충족합니다.
Linked Issues check ✅ Passed 연결된 #918의 요구가 QA 수정 전반이며, 필터·정렬 UI와 파라미터/레이스 버그 수정이 이에 부합합니다.
Out of Scope Changes check ✅ Passed 변경 사항은 서재 필터/정렬 UI 개선과 관련 버그 수정 범위 안에 있으며 명백한 무관한 작업은 보이지 않습니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/918

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)

keywords = state.libraryFilterUiModel.keywords.copy(registered = registered),


🚫 [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)

temp.copy(keywords = temp.keywords.copy(registered = registered))


🚫 [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)

.onFailure { Log.e("LibraryViewModel", "등록 키워드 로드 실패", it) }


🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'

.onFailure { Log.e("LibraryViewModel", "등록 키워드 로드 실패", it) }


🚫 [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)

libraryRepository.novelTotalCount.collect { result ->


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)

_uiState.update { it.copy(novelTotalCount = result) }


🚫 [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)

.map { pagingData -> pagingData.map(NovelEntity::toUiModel) }


🚫 [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)

libraryFilterUiModel = uiState.libraryFilterUiModel.copy(


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)

sortCriteria = SortCriteria.from(filter.sortCriteria),


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)

readStatuses = filter.readStatuses.toReadStatuses(),


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)

seriesStatuses = SeriesStatuses.fromIsComplete(filter.isComplete),


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (28) (should be 32)

attractivePoints = filter.attractivePoints.toAttractivePoints(),


🚫 [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)

keywords = uiState.libraryFilterUiModel.keywords.copy(


🚫 [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)

fun updateSortCriteria(sortCriteria: SortCriteria) {


🚫 [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)

val updatedInterested = !uiState.value.libraryFilterUiModel.isInterested


🚫 [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)

it.copy(readStatuses = it.readStatuses.set(readStatus))


🚫 [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)

fun updateSeriesStatus(seriesStatus: SeriesStatus) {


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)

it.copy(seriesStatuses = it.seriesStatuses.set(seriesStatus))


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (4) (should be 8)

fun updateAttractivePoints(attractivePoint: AttractivePoint) {


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)

it.copy(attractivePoints = it.attractivePoints.set(attractivePoint))


🚫 [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)

it.copy(ratingFilter = it.ratingFilter.setRange(min, max))


🚫 [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)

it.copy(ratingFilter = it.ratingFilter.toggleRatingless())


🚫 [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)

val isNewSelection = !current.isSelected(keywordName)


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (8) (should be 12)

if (isNewSelection && current.selectedNames.size >= Keywords.MAX_SELECTION) {


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (12) (should be 16)

viewModelScope.launch { _keywordLimitEvent.send(Unit) }


🚫 [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)

keywords = Keywords(registered = current.keywords.registered),


🚫 [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)

readStatuses = tempFilter.readStatuses.selectedKeys,


🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (16) (should be 20)

attractivePoints = tempFilter.attractivePoints.selectedKeys,


🚫 [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)

isRatingless = tempFilter.ratingFilter.isRatingless,


🚫 [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)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Preview import 누락, 완전 정규화된 어노테이션 사용.

다른 파일들은 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

📥 Commits

Reviewing files that changed from the base of the PR and between 54a6352 and 74045d0.

📒 Files selected for processing (15)
  • core/network/src/main/java/com/into/websoso/core/network/datasource/library/LibraryApi.kt
  • data/account/src/main/java/com/into/websoso/data/account/AccountRepository.kt
  • data/library/src/main/java/com/into/websoso/data/library/repository/MyLibraryRepository.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/LibraryViewModel.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/component/LibrayFilterTopBar.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetButtons.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterBottomSheetClickableItem.kt
  • 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/component/LibraryFilterBottomSheetReadStatus.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterChip.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterSelectedChips.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/filter/component/LibraryFilterTabRow.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/model/LibraryFilterUiModel.kt

Comment on lines +111 to +145
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),
) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 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 추가

@devfeijoa devfeijoa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 정렬 바텀시트: 선택 시에도 텍스트는 중앙 정렬 유지 + 체크 아이콘만 왼쪽 오버레이, 선택 배경 라운드 40 / Primary20, 미선택 텍스트 색 Gray200

PR 본문에 있는것 처럼 텍스트는 중앙정렬 유지 되어있고, v 표시 까지 포함되어서 글자가 왼쪽으로 밀리는 문제는 해결이 된 것 같습니다. 다만 체크 아이콘이 너무 왼쪽에 붙어버린것 같아요..!
또한 선택 배경 radius(라운드 값)이 너무 둥근것 같아 찾아보니, radius값이 40이 아니라 12인 것 같더라고요..! 다를 수도 있으니 수정 전 꼭꼭 피그마로 더블체크 부탁드립니다!
관련 이슈 스크린샷 첨부해두겠습니다!

Image

@devfeijoa devfeijoa Jul 6, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

파일 위치가 여기가 맞는지 모르겠지만 고정 영역 아래에 구분선이 있다는 요구사항(디스코드 안드 1.9.0 QA)이 있습니다!
제가 리뷰할때도 있었는지 아닌지 모르겠지만?? 7월 태스크 때문에 최종뷰가 변했다고 해서 변한것 같기도 하고요??

  1. 상단 고정 영역 관련
    고정영역 아래에 - 라인 있어요.

이 요구사항이 누락된 것 같습니다!

- 체크 아이콘을 글자 왼쪽 12dp에 배치 (좌우 대칭 슬롯으로 텍스트 중앙 정렬 유지)
- 선택 항목 라운드 40dp → 12dp
- 최신순 버튼 줄 10dp 아래에 Gray50 가로선(1dp) 전체 너비로 추가
@Sadturtleman

Copy link
Copy Markdown
Contributor Author

수정했습니다!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
feature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.kt (2)

108-115: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Spacer 두 개를 하나로 합치는 것을 고려해 보세요.

오른쪽 균형 슬롯이 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)을 적용하고 상위 ColumnselectableGroup()을 추가하는 것을 고려해 보세요.

🤖 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

📥 Commits

Reviewing files that changed from the base of the PR and between 74045d0 and 6bd2884.

📒 Files selected for processing (4)
  • feature/library/src/main/java/com/into/websoso/feature/library/LibraryViewModel.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/component/LibrarySortBottomSheet.kt
  • feature/library/src/main/java/com/into/websoso/feature/library/filter/LibraryFilterBottomSheetScreen.kt
  • feature/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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

선 위치가 칩 바로 아래인 것 같은데 현재는 작품 바로 위에 구분선이 들어간 것 같아요..! 확인 한번만 부탁드립니다 !

Image

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

여기보면 리스트, 그리드 뷰 아래에 있어 아래에 있는걸로 파악하고 진행했습니다!

@devfeijoa devfeijoa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수고하셨습니다 👍🏻

@devfeijoa devfeijoa merged commit e3a0899 into develop Jul 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔨 [FIX] 버그를 수정합니다. 🧙마법사 하루

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: 1.9.0 QA

2 participants