Conversation
- `feature/collection/build.gradle.kts`: collection 피처 모듈 빌드 스크립트 정의 및 네임스페이스 설정 - `feature/collection/src/main/AndroidManifest.xml`: 모듈용 매니페스트 파일 추가 - `settings.gradle.kts`: 프로젝트 모듈 목록에 `:feature:collection` 추가
- `libs.versions.toml`: Navigation Compose 라이브러리 버전(2.9.8) 및 카탈로그 정의 추가 - `feature/collection/build.gradle.kts`: `navigation-compose` 라이브러리 의존성 추가 적용
- `CollectionScreen.kt`: `CollectionScreen` 컴포저블 구현 및 프리뷰 추가
- `CollectionActivity.kt`: Hilt 의존성 주입을 위해 `CollectionActivity` 클래스에 `@AndroidEntryPoint` 어노테이션 추가
- `AndroidManifest.xml`: 컬렉션 화면 진입을 위한 `CollectionActivity` 추가 및 세로 방향(portrait) 고정 설정
- `fragment_my_page.xml`: 컬렉션 진입점을 위한 `ComposeView`(`cv_my_page_collection_entry`) 및 하단 구분선(`view_my_page_collection_divider`) 추가 - `fragment_my_page.xml`: 기존 장르 취향 섹션 및 취향 분석 섹션의 상단 제약 조건을 신규 구분선 기준으로 변경하여 레이아웃 구조 조정
- `MyPageFragment.kt`: `cvMyPageCollectionEntry`에 `CollectionEntry` 컴포저블을 적용하는 `setupCollectionEntry` 함수 추가 - `MyPageFragment.kt`: 컬렉션 화면으로 이동하는 `navigateToCollection` 함수 구현 및 연결 - `MyPageFragment.kt`: Compose View의 효율적인 생명주기 관리를 위한 `ViewCompositionStrategy` 설정 추가
- `CollectionAppBar.kt`: 뒤로가기 버튼과 "컬렉션" 타이틀을 포함한 상단 앱바 컴포저블 신규 구현 - `CollectionScreen.kt`: `CollectionAppBar` 적용 및 `statusBarsPadding` 추가, 내부 레이아웃 구조 조정 - `CollectionEntry.kt`: 파일 위치를 `component` 패키지로 이동 - `CollectionNavHost.kt` & `CollectionActivity.kt`: 뒤로가기 동작(finish)을 위한 `onNavigateBack` 콜백 추가 및 전달 로직 구현 - `MyPageFragment.kt`: `CollectionEntry` 패키지 위치 변경에 따른 임포트 경로 수정
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (2)
Walkthrough컬렉션 전용 모듈과 Compose 화면을 추가했습니다. 컬렉션 생성, 작품 검색, 도서관 작품 선택 흐름을 구성했습니다. 도서관에 필터 없는 페이징 API를 추가했습니다. 마이페이지에서 Changes컬렉션 기능
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant MyPageFragment
participant CollectionActivity
participant CollectionNavHost
participant CollectionNovelSearchScreen
participant CollectionLibraryNovelSelectionViewModel
participant LibraryRepository
MyPageFragment->>CollectionActivity: 컬렉션 Intent 실행
CollectionActivity->>CollectionNavHost: Compose 콘텐츠 구성
CollectionNavHost->>CollectionNovelSearchScreen: 검색 화면 표시
CollectionNovelSearchScreen->>CollectionNavHost: 도서관 선택 화면 이동
CollectionNavHost->>CollectionLibraryNovelSelectionViewModel: 선택 화면 구성
CollectionLibraryNovelSelectionViewModel->>LibraryRepository: 필터 없는 소설 페이징 요청
LibraryRepository-->>CollectionLibraryNovelSelectionViewModel: PagingData 반환
CollectionLibraryNovelSelectionViewModel-->>CollectionNavHost: 선택된 소설 ID 전달
CollectionNavHost-->>CollectionNovelSearchScreen: SavedStateHandle로 선택 결과 복원
Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 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.
Actionable comments posted: 3
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt`:
- Around line 51-55: Update CollectionScreen so users no longer see the
temporary “임시화면” content: either replace it with the implemented collection UI
or, until that exists, hide the MyPage entry point that launches
CollectionActivity. Ensure the user cannot navigate into an unfinished
collection screen.
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.kt`:
- Around line 42-45: Update the back-navigation Image inside the
CollectionAppBar IconButton to use the existing Korean string resource for “뒤로
가기” as its contentDescription instead of null, preserving the current icon and
button behavior.
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionEntry.kt`:
- Line 29: Update the CollectionEntry usage in MyPageFragment so it receives the
actual collection count, or make collectionCount nullable and omit the count
display when unavailable. Remove the misleading default value that causes valid
collection data to render as “0개,” while preserving the existing count rendering
when a real value is provided.
🪄 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 Plus
Run ID: 4a57c726-409d-47d7-b8bc-1322bd22bc2d
📒 Files selected for processing (13)
app/build.gradle.ktsapp/src/main/AndroidManifest.xmlapp/src/main/java/com/into/websoso/ui/collection/CollectionActivity.ktapp/src/main/java/com/into/websoso/ui/main/myPage/MyPageFragment.ktapp/src/main/res/layout/fragment_my_page.xmlfeature/collection/build.gradle.ktsfeature/collection/src/main/AndroidManifest.xmlfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionEntry.ktgradle/libs.versions.tomlsettings.gradle.kts
| Image( | ||
| painter = painterResource(id = ic_navigate_left), | ||
| contentDescription = null, | ||
| modifier = Modifier.size(24.dp), |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== locate file =="
fd -a 'CollectionAppBar\.kt$' .
echo "== file excerpt =="
file=$(fd 'CollectionAppBar\.kt$' . | head -n1)
if [ -n "${file:-}" ]; then
wc -l "$file"
sed -n '1,120p' "$file" | cat -n
fi
echo "== accessibility contentDescription occurrences in Jetpack Compose Image usage =="
rg -n "Image\\(|contentDescription\\s*=" feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.ktRepository: Team-WSS/WSS-Android
Length of output: 2963
뒤로가기 버튼에 접근성 라벨을 지정해 주세요.
IconButton 내부 이미지의 contentDescription이 null이라 TalkBack에서 버튼의 목적을 알 수 없습니다. "뒤로 가기" 문자열 리소스를 사용해 접근성 라벨을 지정해 주세요.
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.kt`
around lines 42 - 45, Update the back-navigation Image inside the
CollectionAppBar IconButton to use the existing Korean string resource for “뒤로
가기” as its contentDescription instead of null, preserving the current icon and
button behavior.
| fun CollectionEntry( | ||
| onClick: () -> Unit, | ||
| modifier: Modifier = Modifier, | ||
| collectionCount: Int = 0, |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
실제 컬렉션 수를 전달하거나 기본값을 제거해 주세요.
MyPageFragment.kt의 현재 호출부는 CollectionEntry(onClick = ...)만 전달하므로 collectionCount가 항상 기본값 0입니다. 실제 컬렉션이 있어도 마이페이지에 항상 컬렉션 0개가 표시됩니다. 실제 수를 전달하거나, 수가 준비되지 않았다면 카운트를 렌더링하지 않도록 계약을 정리해 주세요.
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionEntry.kt`
at line 29, Update the CollectionEntry usage in MyPageFragment so it receives
the actual collection count, or make collectionCount nullable and omit the count
display when unavailable. Remove the misleading default value that causes valid
collection data to render as “0개,” while preserving the existing count rendering
when a real value is provided.
- `CollectionTabRow.kt`: "내 컬렉션"과 "좋아요한 컬렉션"을 전환할 수 있는 탭 바 컴포저블 `CollectionTabRow` 및 내부 `CollectionTab` 구현 - `CollectionScreen.kt`: 상단 앱바 하단에 `CollectionTabRow` 배치
- `CollectionTab.kt`: 컬렉션 탭 구분을 위한 `CollectionTab` Enum 클래스 정의
- `CollectionScreen.kt`: `rememberSaveable`을 이용해 선택된 탭 상태(`selectedTab`)를 관리하고 `CollectionTabRow`와 연동
- `CollectionTabRow.kt`:
- `CollectionTab` Enum을 순회하며 탭 항목을 생성하도록 로직 수정
- 탭 클릭 처리를 위해 `onTabSelected` 콜백 추가 및 `selectable` Modifier 적용
- 기존 `CollectionTab` 컴포저블을 `CollectionTabItem`으로 명칭 변경
- Enum 값에 따른 탭 타이틀 문자열을 반환하는 확장 프로퍼티 `title` 추가
- `CollectionCreateButton.kt`: "컬렉션 만들기" 버튼 구현 - `CollectionScreen.kt`: 컬렉션 화면 내 상단 탭 하단에 `CollectionCreateButton` 추가 및 레이아웃 적용
- `CollectionScreen.kt`: 화면 중앙에 위치하던 "컬렉션", "임시화면" 안내 문구와 이를 포함하던 `Box` 레이아웃 및 미사용 임포트 삭제
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateButton.kt`:
- Around line 26-60: Update CollectionCreateButton in
feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateButton.kt:26-60
to accept an onClick callback and make its Row invoke it with clickable
semantics such as Role.Button. Update CollectionScreen in
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt:23-46
to accept onCreateCollection and pass it to CollectionCreateButton so callers
can launch the actual creation flow.
🪄 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 Plus
Run ID: ffde6f8d-ba28-4bac-a82c-e0a3854724ef
📒 Files selected for processing (5)
core/resource/src/main/res/drawable/ic_collection_create.xmlfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateButton.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionTabRow.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/model/CollectionTab.kt
- `CollectionCreateButton.kt`: 컴포저블 함수 파라미터와 Modifier 체이닝의 불필요한 줄바꿈을 제거하고 임포트 구문을 정렬하여 가독성 개선
- `CollectionTabRow.kt`: `TabItem` 내 `modifier` 체이닝의 불필요한 줄바꿈 제거 및 코드 정렬 수정
- `CollectionCreateButton.kt`: `onClick` 콜백 매개변수를 추가하고 `Modifier.clickable` 및 `clip`을 적용하여 클릭 상호작용 구현 - `CollectionScreen.kt`: `CollectionCreateButton` 호출부에 `onClick` 핸들러 추가
- `CollectionScreen.kt`: 생성 버튼 클릭 시 호출될 `onNavigateToCreate` 콜백 파라미터 추가 및 `CollectionCreateButton`에 연결 - `CollectionNavHost.kt`: `CollectionScreen`에서 `COLLECTION_CREATE_ROUTE`로 이동하는 네비게이션 로직 구현 및 전달
- `CollectionCreateAppBar.kt`: 뒤로가기 버튼과 "완료" 텍스트를 포함한 상단 앱바 컴포저블 신규 구현 - `CollectionNavHost.kt`: `CollectionCreateScreen` 진입 시 내비게이션 뒤로가기 로직연결
- `CollectionPrivacySetting.kt`: "나만 보는 컬렉션" 설정을 위한 `CollectionPrivacySetting` 컴포저블 및 커스텀 스위치(`CollectionPrivacySwitch`) 구현 - `CollectionCreateScreen.kt`: 컬렉션 비공개 여부 상태(`isPrivate`) 추가 및 `CollectionPrivacySetting` 컴포넌트 적용
- `CollectionNameInput.kt`: 컬렉션 이름을 입력받는 `BasicTextField` 기반의 신규 컴포넌트 구현 (최대 20자 제한, 글자 수 표시 및 필수 입력 표시 포함)
- `CollectionDescriptionInput.kt`: 컬렉션 설명을 위한 커스텀 입력 컴포넌트 구현 (최대 60자 제한, 글자 수 표시, 플레이스홀더 포함)
- `CollectionNovelSection.kt`: "작품 리스트" 타이틀, 개수 표시 및 작품 추가 버튼을 포함하는 `CollectionNovelSection` 컴포저블 구현
- `CollectionNovelSearchScreen.kt`: 작품 검색을 위한 임시 화면 및 레이아웃 구현 - `CollectionNovelSearchAppBar.kt`: 작품 검색 화면 전용 앱바 추가 - `CollectionNovelSection.kt`: 작품 추가 카드 클릭 시 `onAddNovelClick` 콜백이 실행되도록 수정하고, 클릭 피드백을 위한 `clickable` 및 `clip` 속성 적용 - `CollectionNavHost.kt`: 작품 검색 경로(`COLLECTION_NOVEL_SEARCH_ROUTE`) 정의 및 내비게이션 그래프 내 화면 추가
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt`:
- Around line 34-70: Update the main Column in CollectionCreateScreen to support
constrained screens by applying verticalScroll with a remembered scroll state
and imePadding alongside its existing modifiers. Preserve the current content
order and spacing while ensuring the collection novel section remains reachable
when the IME is visible.
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt`:
- Around line 32-51: CollectionNovelSearchScreen의 임시 화면은 작품 추가를 완료할 수 없으므로 노출하지
않도록 처리하세요. 검색·선택 기능을 구현하지 않는다면 CollectionNovelSection에서 해당 화면으로 진입하는 경로를 숨기거나
비활성화하고, 기존의 유효한 작품 추가 흐름은 유지하세요.
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateAppBar.kt`:
- Around line 48-55: CollectionCreateAppBar와 CollectionNovelSearchAppBar의 “완료”
Text에 생성 콜백과 활성화 상태를 전달하도록 연결하세요. 비활성 상태에서는 클릭되지 않게 처리하고,
CollectionNovelSearchAppBar에서는 선택된 작품을 완료 콜백으로 전달해 생성 화면으로 이동시키세요. 변경 대상은
CollectionCreateAppBar의 완료 컨트롤과 CollectionNovelSearchAppBar의 완료 컨트롤이며, 두 파일의 기존
완료 표시와 활성화 조건을 유지하면서 클릭 동작을 추가하세요.
- Around line 35-47: Set the back-navigation accessibility label to "뒤로가기" on
the back buttons/icons in CollectionCreateAppBar.kt lines 35-47 and
CollectionNovelSearchAppBar.kt lines 36-48, ensuring TalkBack exposes their
purpose instead of treating the Image content as decorative.
🪄 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 Plus
Run ID: 06e74e38-6c1f-487f-ba78-7f6074dd2880
📒 Files selected for processing (12)
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateAppBar.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateButton.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionDescriptionInput.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNameInput.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNovelSearchAppBar.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNovelSection.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionPrivacySetting.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionTabRow.kt
🚧 Files skipped from review as they are similar to previous changes (2)
- feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionTabRow.kt
- feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateButton.kt
| Column( | ||
| modifier = modifier | ||
| .fillMaxSize() | ||
| .background(White) | ||
| .statusBarsPadding(), | ||
| ) { | ||
| CollectionCreateAppBar(onNavigateBack = onNavigateBack) | ||
| CollectionPrivacySetting( | ||
| isPrivate = isPrivate, | ||
| onPrivateChange = { isPrivate = it }, | ||
| ) | ||
| CollectionNameInput( | ||
| value = collectionName, | ||
| onValueChange = { collectionName = it }, | ||
| modifier = Modifier.padding( | ||
| start = 20.dp, | ||
| top = 20.dp, | ||
| end = 20.dp, | ||
| ), | ||
| ) | ||
| CollectionDescriptionInput( | ||
| value = collectionDescription, | ||
| onValueChange = { collectionDescription = it }, | ||
| modifier = Modifier.padding( | ||
| start = 20.dp, | ||
| top = 30.dp, | ||
| end = 20.dp, | ||
| ), | ||
| ) | ||
| CollectionNovelSection( | ||
| onAddNovelClick = onNavigateToNovelSearch, | ||
| modifier = Modifier.padding( | ||
| start = 20.dp, | ||
| top = 30.dp, | ||
| end = 20.dp, | ||
| ), | ||
| ) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate and inspect the target file and relevant Compose modifiers/usages.
target="feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt"
if [ -f "$target" ]; then
echo "== target file size =="
wc -l "$target"
echo
echo "== imports/top-level relevant sections =="
sed -n '1,140p' "$target" | cat -n
else
echo "Target file not found: $target"
fi
echo
echo "== imports/usages in feature/collection collection screen files =="
if [ -d feature/collection/src/main/java/com/into/websoso/feature/collection ]; then
rg -n "VerticalScroll|verticalScroll|Scrollable|imePadding|statusBarsPadding|fillMaxSize|Column\\(|CollectionPrivac|CollectionCreateAppBar|CollectionNovelSection" feature/collection/src/main/java/com/into/websoso/feature/collection || true
fi
echo
echo "== nearby layout declarations =="
rg -n "CollectionCreateScreen|Column\\(|fillMaxSize|verticalScroll|imePadding|keyboardActions|keyboardOptions" feature/collection/src/main/java || trueRepository: Team-WSS/WSS-Android
Length of output: 12417
폼 콘텐츠를 스크롤하고 IME에 대응해 주세요.
키보드가 열리거나 화면이 작을 때 현재 고정 높이 Column으로 인해 작품 추가 영역이 화면 밖으로 밀릴 수 있습니다. verticalScroll과 imePadding을 적용해 주세요.
수정 예시
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.foundation.layout.imePadding
Column(
modifier = modifier
.fillMaxSize()
.background(White)
.statusBarsPadding()
+ .imePadding()
+ .verticalScroll(rememberScrollState()),
) {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Column( | |
| modifier = modifier | |
| .fillMaxSize() | |
| .background(White) | |
| .statusBarsPadding(), | |
| ) { | |
| CollectionCreateAppBar(onNavigateBack = onNavigateBack) | |
| CollectionPrivacySetting( | |
| isPrivate = isPrivate, | |
| onPrivateChange = { isPrivate = it }, | |
| ) | |
| CollectionNameInput( | |
| value = collectionName, | |
| onValueChange = { collectionName = it }, | |
| modifier = Modifier.padding( | |
| start = 20.dp, | |
| top = 20.dp, | |
| end = 20.dp, | |
| ), | |
| ) | |
| CollectionDescriptionInput( | |
| value = collectionDescription, | |
| onValueChange = { collectionDescription = it }, | |
| modifier = Modifier.padding( | |
| start = 20.dp, | |
| top = 30.dp, | |
| end = 20.dp, | |
| ), | |
| ) | |
| CollectionNovelSection( | |
| onAddNovelClick = onNavigateToNovelSearch, | |
| modifier = Modifier.padding( | |
| start = 20.dp, | |
| top = 30.dp, | |
| end = 20.dp, | |
| ), | |
| ) | |
| import androidx.compose.foundation.layout.imePadding | |
| import androidx.compose.foundation.rememberScrollState | |
| import androidx.compose.foundation.verticalScroll | |
| Column( | |
| modifier = modifier | |
| .fillMaxSize() | |
| .background(White) | |
| .statusBarsPadding() | |
| .imePadding() | |
| .verticalScroll(rememberScrollState()), | |
| ) { | |
| CollectionCreateAppBar(onNavigateBack = onNavigateBack) | |
| CollectionPrivacySetting( | |
| isPrivate = isPrivate, | |
| onPrivateChange = { isPrivate = it }, | |
| ) | |
| CollectionNameInput( | |
| value = collectionName, | |
| onValueChange = { collectionName = it }, | |
| modifier = Modifier.padding( | |
| start = 20.dp, | |
| top = 20.dp, | |
| end = 20.dp, | |
| ), | |
| ) | |
| CollectionDescriptionInput( | |
| value = collectionDescription, | |
| onValueChange = { collectionDescription = it }, | |
| modifier = Modifier.padding( | |
| start = 20.dp, | |
| top = 30.dp, | |
| end = 20.dp, | |
| ), | |
| ) | |
| CollectionNovelSection( | |
| onAddNovelClick = onNavigateToNovelSearch, | |
| modifier = Modifier.padding( | |
| start = 20.dp, | |
| top = 30.dp, | |
| end = 20.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/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt`
around lines 34 - 70, Update the main Column in CollectionCreateScreen to
support constrained screens by applying verticalScroll with a remembered scroll
state and imePadding alongside its existing modifiers. Preserve the current
content order and spacing while ensuring the collection novel section remains
reachable when the IME is visible.
| Text( | ||
| text = "완료", | ||
| color = Gray100, | ||
| style = WebsosoTheme.typography.title2, | ||
| modifier = Modifier | ||
| .align(Alignment.CenterEnd) | ||
| .padding(horizontal = 20.dp), | ||
| ) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== files =="
git ls-files | rg 'feature/collection/src/main/java/com/into/websoso/feature/collection/component/Collection.*AppBar|feature/collection/src/main/java/com/into/websoso/feature/collection' | head -200
echo "== outlines =="
for f in \
feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateAppBar.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNovelSearchAppBar.kt
do
echo "--- $f"
ast-grep outline "$f" || true
wc -l "$f"
sed -n '1,140p' "$f" | cat -n
doneRepository: Team-WSS/WSS-Android
Length of output: 7822
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== usages of Collection*AppBar constructors =="
rg -n "Collection(CreateAppBar|Novel SearchAppBar|App Bar|AppBar)\(" feature/collection/src/main/java/com/into/websoso/feature/collection || true
echo "== relevant screen outlines =="
for f in \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt
do
echo "--- $f"
ast-grep outline "$f" || true
wc -l "$f"
sed -n '1,240p' "$f" | cat -n
doneRepository: Team-WSS/WSS-Android
Length of output: 12748
완료 컨트롤에 동작을 연결해 주세요.
CollectionCreateAppBar와 CollectionNovelSearchAppBar의 “완료”는 현재 Text로만 표시되어 클릭하거나 선택 결과를 전달할 수 없습니다. 생성 콜백/활성화 상태를 전달해 비활성 상태에서는 클릭할 수 없게 처리하고, 작품 검색용 완료는 선택된 작품을 생성 화면으로 전달할 수 있도록 연결해 주세요.
📍 Affects 2 files
feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateAppBar.kt#L48-L55(this comment)feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNovelSearchAppBar.kt#L49-L61
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionCreateAppBar.kt`
around lines 48 - 55, CollectionCreateAppBar와 CollectionNovelSearchAppBar의 “완료”
Text에 생성 콜백과 활성화 상태를 전달하도록 연결하세요. 비활성 상태에서는 클릭되지 않게 처리하고,
CollectionNovelSearchAppBar에서는 선택된 작품을 완료 콜백으로 전달해 생성 화면으로 이동시키세요. 변경 대상은
CollectionCreateAppBar의 완료 컨트롤과 CollectionNovelSearchAppBar의 완료 컨트롤이며, 두 파일의 기존
완료 표시와 활성화 조건을 유지하면서 클릭 동작을 추가하세요.
- `CollectionNovelSearchField.kt`: 작품 제목 및 작가 검색을 위한 검색 필드 컴포저블 구현 - `CollectionNovelSearchAppBar.kt`: 완료 버튼의 활성화 상태에 따른 색상 변경 로직 추가 및 `isCompleteEnabled` 파라미터 정의
- `CollectionNovelSearchField.kt`: 기존의 정적 텍스트를 `BasicTextField`로 교체하여 실제 입력이 가능하도록 수정하고, 검색어 삭제를 위한 클리어 버튼 추가 - `CollectionNovelSearchScreen.kt`: `searchQuery` 상태 관리 로직을 추가하고, `LaunchedEffect`를 통해 화면 진입 시 검색 필드 자동 포커스 및 키보드 노출 기능 구현
- `CollectionNovelSelectionInfo.kt`: 추가한 작품 개수 표시 및 '서재에서 추가' 버튼을 포함한 공용 컴포넌트 추가 - `CollectionNovelSearchScreen.kt`: `CollectionNovelSelectionInfo`를 적용하고, 작품 개수에 따른 완료 버튼 활성화 로직 및 서재 선택 화면으로의 내비게이션 연결 - `CollectionNavHost.kt`: 서재 작품 선택 화면을 위한 내비게이션 루트 정의 및 화면 전환 로직 추가
- `build.gradle.kts`: `navigation.compose` 및 `paging.compose` 라이브러리 의존성 추가
- `CollectionLibraryNovelSelectionViewModel.kt`: 서재 작품 목록 페이징 데이터 및 작품 선택 상태 관리를 위한 ViewModel 구현 - `CollectionLibraryNovelSelectionScreen.kt`: `LazyVerticalGrid`를 사용하여 서재 작품 목록을 표시하고 선택할 수 있는 화면 구현 및 `CollectionLibraryNovelSelectionRoute` 추가 - `CollectionNavHost.kt`: `SavedStateHandle`을 사용하여 검색 화면과 서재 선택 화면 간에 선택된 작품 ID 목록(`SELECTED_NOVEL_IDS_KEY`)을 전달 및 공유하는 로직 추가 - `CollectionAppBar.kt`: 액션 라벨 클릭을 위한 `onActionClick` 콜백 추가 및 터치 영역 확장을 위해 `Box`와 `clickable` 적용 - `CollectionLibraryNovelItem.kt`: 아이템의 고정 높이를 `aspectRatio` 기반으로 변경하고, 독서 상태 라벨의 레이아웃 및 패딩 수정 - `CollectionNovelSearchScreen.kt`: `addedNovelCount`를 내부 상태가 아닌 외부 파라미터로 받도록 변경하여 네비게이션 상태와 동기화
- `CollectionLibraryNovelSelectionScreen.kt`: 페이징 데이터의 초기 로딩 상태(`LoadState.Loading`)를 확인하여 `CircularProgressIndicator`를 노출하도록 레이아웃 구조 변경 및 로직 추가
- `CollectionLibraryNovelSelectionScreen.kt`: `LazyVerticalGrid`에 페이징 추가 로딩(`append`) 상태를 확인하여 하단에 `CircularProgressIndicator`를 표시하는 로직 추가
There was a problem hiding this comment.
Actionable comments posted: 2
♻️ Duplicate comments (2)
feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.kt (1)
43-55: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win뒤로가기 버튼에 접근성 라벨이 여전히 없습니다.
IconButton내부Image의contentDescription이null입니다. TalkBack 사용자는 이 버튼의 목적을 알 수 없습니다. "뒤로 가기" 문자열 리소스를contentDescription에 지정하세요. 이 문제는 이전 리뷰에서 이미 지적되었습니다.🔧 제안 수정
Image( painter = painterResource(id = ic_navigate_left), - contentDescription = null, + contentDescription = "뒤로 가기", modifier = Modifier.size(24.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/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.kt` around lines 43 - 55, Update the back-navigation IconButton in CollectionAppBar to provide the localized “뒤로 가기” string resource as the Image contentDescription instead of null, preserving the existing layout and click behavior.feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt (1)
34-39: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win폼 콘텐츠가 여전히 스크롤·IME 대응이 없습니다.
키보드가 열리거나 화면이 작으면 작품 추가 영역이 화면 밖으로 밀릴 수 있습니다.
verticalScroll과imePadding을 적용하세요. 이 문제는 이전 리뷰에서 이미 지적되었습니다.🔧 제안 수정
+import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll Column( modifier = modifier .fillMaxSize() .background(White) .statusBarsPadding() + .imePadding() + .verticalScroll(rememberScrollState()), ) {🤖 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/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt` around lines 34 - 39, Update the root Column in CollectionCreateScreen to apply verticalScroll and imePadding alongside the existing modifier chain, ensuring the form content remains scrollable and visible when the IME opens or available screen height is limited.
🧹 Nitpick comments (1)
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionLibraryNovelSelectionScreen.kt (1)
100-108: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win
LazyVerticalGrid아이템에 안정적인 key가 없습니다.
items(novels.itemCount)에key파라미터를 지정하지 않았습니다. 페이지가 갱신될 때 Compose가 항목을 인덱스로만 구분해 불필요한 리컴포지션이나 상태 유실이 발생할 수 있습니다.paging-compose가 제공하는itemKey확장 함수를 사용하세요.Android 공식 가이드는 key = lazyPagingItems.itemKey { it.id }를 items()에 전달하는 패턴을 권장합니다.
🔧 제안 수정
+import androidx.paging.compose.itemKey LazyVerticalGrid( columns = GridCells.Fixed(3), modifier = Modifier.fillMaxSize(), contentPadding = PaddingValues( start = 20.dp, top = 11.dp, end = 20.dp, ), horizontalArrangement = Arrangement.spacedBy(6.dp), verticalArrangement = Arrangement.spacedBy(18.dp), ) { - items(novels.itemCount) { index -> + items( + count = novels.itemCount, + key = novels.itemKey { it.novelId }, + ) { index -> novels[index]?.let { novel ->🤖 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/collection/src/main/java/com/into/websoso/feature/collection/CollectionLibraryNovelSelectionScreen.kt` around lines 100 - 108, Update the LazyVerticalGrid items call in the novels rendering block to pass the paging-compose itemKey extension using each novel’s novelId as the stable key. Keep the existing novels[index] lookup and CollectionLibraryNovelItem rendering unchanged.
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/CollectionLibraryNovelSelectionScreen.kt`:
- Around line 86-119: Update the collection grid around the refresh and append
load-state checks to handle LoadState.Error. For an initial refresh failure,
show an error message with a retry action calling novels.retry() instead of
rendering only the empty grid; for an append failure, add a bottom retry UI that
also invokes novels.retry(), while preserving the existing loading indicators
and successful-content behavior.
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt`:
- Around line 51-56: Connect the novel-selection completion flow across all
affected sites: in CollectionNovelSearchScreen.kt lines 51-56, pass
onActionClick to CollectionAppBar; in CollectionNavHost.kt lines 46-58, save
selectedNovelIds in the COLLECTION_CREATE_ROUTE savedStateHandle and then call
popBackStack(); in CollectionCreateScreen.kt lines 40-43, read the selected IDs
from savedStateHandle for CollectionNovelSection and connect onActionClick to
the collection creation logic.
---
Duplicate comments:
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt`:
- Around line 34-39: Update the root Column in CollectionCreateScreen to apply
verticalScroll and imePadding alongside the existing modifier chain, ensuring
the form content remains scrollable and visible when the IME opens or available
screen height is limited.
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.kt`:
- Around line 43-55: Update the back-navigation IconButton in CollectionAppBar
to provide the localized “뒤로 가기” string resource as the Image contentDescription
instead of null, preserving the existing layout and click behavior.
---
Nitpick comments:
In
`@feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionLibraryNovelSelectionScreen.kt`:
- Around line 100-108: Update the LazyVerticalGrid items call in the novels
rendering block to pass the paging-compose itemKey extension using each novel’s
novelId as the stable key. Keep the existing novels[index] lookup and
CollectionLibraryNovelItem rendering unchanged.
🪄 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 Plus
Run ID: ec3f3a78-3a96-4856-a6c3-94817c88ea72
📒 Files selected for processing (16)
data/library/src/main/java/com/into/websoso/data/library/LibraryRepository.ktdata/library/src/main/java/com/into/websoso/data/library/repository/MyLibraryRepository.ktdata/library/src/main/java/com/into/websoso/data/library/repository/UserLibraryRepository.ktfeature/collection/build.gradle.ktsfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionLibraryNovelSelectionScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionLibraryNovelSelectionViewModel.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionLibraryNovelItem.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNovelSearchField.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNovelSelectionInfo.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/mapper/CollectionLibraryNovelMapper.ktfeature/collection/src/main/java/com/into/websoso/feature/collection/model/CollectionLibraryNovelUiModel.kt
🚧 Files skipped from review as they are similar to previous changes (2)
- feature/collection/build.gradle.kts
- feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt
| if (novels.itemCount == 0 && novels.loadState.refresh is LoadState.Loading) { | ||
| CircularProgressIndicator(modifier = Modifier.align(Alignment.Center)) | ||
| } else { | ||
| LazyVerticalGrid( | ||
| columns = GridCells.Fixed(3), | ||
| modifier = Modifier.fillMaxSize(), | ||
| contentPadding = PaddingValues( | ||
| start = 20.dp, | ||
| top = 11.dp, | ||
| end = 20.dp, | ||
| ), | ||
| horizontalArrangement = Arrangement.spacedBy(6.dp), | ||
| verticalArrangement = Arrangement.spacedBy(18.dp), | ||
| ) { | ||
| items(novels.itemCount) { index -> | ||
| novels[index]?.let { novel -> | ||
| CollectionLibraryNovelItem( | ||
| novel = novel, | ||
| isSelected = novel.novelId in selectedNovelIds, | ||
| onSelectionChange = { onNovelSelectionChange(novel.novelId) }, | ||
| ) | ||
| } | ||
| } | ||
| if (novels.loadState.append is LoadState.Loading) { | ||
| item(span = { GridItemSpan(maxLineSpan) }) { | ||
| Box( | ||
| modifier = Modifier.fillMaxWidth(), | ||
| contentAlignment = Alignment.Center, | ||
| ) { | ||
| CircularProgressIndicator(modifier = Modifier.padding(16.dp)) | ||
| } | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate and inspect the file and symbol usage around Paging state handling.
printf 'Files matching CollectionLibraryNovelSelectionScreen.kt:\n'
fd -a 'CollectionLibraryNovelSelectionScreen.kt' . || true
file="$(fd 'CollectionLibraryNovelSelectionScreen.kt' . | head -n 1)"
if [ -n "${file:-}" ]; then
printf '\nLine count:\n'
wc -l "$file"
printf '\nRelevant file section (lines 1-180):\n'
sed -n '1,180p' "$file" | cat -n
fi
printf '\nSearch for LoadState.Error handling in collection module:\n'
rg -n "LoadState\.Error|loadState\.refresh|loadState\.append|pagingItems|retry\(" feature/collection src feature 2>/dev/null || trueRepository: Team-WSS/WSS-Android
Length of output: 8259
🏁 Script executed:
#!/bin/bash
set -euo pipefail
python3 - <<'PY'
# Read-only probe: use Python's lexer to locate LoadState.Error checks and show whether
# the inspected file only handles Loading for refresh and append, as described in the comment.
import ast, os, pathlib, re
files = [p for p in pathlib.Path('.').rglob('*CollectionLibraryNovelSelectionScreen.kt')]
print(f"Kotlin target files: {files}")
for file in files:
text = file.read_text(encoding='utf-8')
print(f"\nfile={file}")
print(f"has LoadState.Error: {bool(re.search(r'LoadState\s*\.Error|is\s+LoadState\.Error', text))}")
# Show lines containing loadState branches and retry.
for i, line in enumerate(text.splitlines(), 1):
if any(s in line for s in ["loadState", "retry("]):
print(f"{i}: {line}")
PYRepository: Team-WSS/WSS-Android
Length of output: 458
초기 로드 및 추가 로드 실패 시 재시도 UI를 추가하세요.
novels.itemCount == 0 && novels.loadState.refresh is LoadState.Loading만 처리해 초기 로드 실패는 시각적 피드백 없이 렌더됩니다. novels.loadState.refresh is LoadState.Error와 novels.loadState.append is LoadState.Error를 확인하고, 초기 실패에는 오류 메시지와 novels.retry()로 실패 페이지를 다시 시도할 수 있게 하세요. 추가 로드 실패에는 하단 재시도 UI도 제공하세요.
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/CollectionLibraryNovelSelectionScreen.kt`
around lines 86 - 119, Update the collection grid around the refresh and append
load-state checks to handle LoadState.Error. For an initial refresh failure,
show an error message with a retry action calling novels.retry() instead of
rendering only the empty grid; for an append failure, add a bottom retry UI that
also invokes novels.retry(), while preserving the existing loading indicators
and successful-content behavior.
| CollectionAppBar( | ||
| title = "작품 리스트", | ||
| actionLabel = "완료", | ||
| onNavigateBack = onNavigateBack, | ||
| isActionEnabled = addedNovelCount > 0, | ||
| ) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== candidate files =="
fd -a 'Collection(NovelSearchSearchScreen|NavHost|CreateScreen|AppBar|CollectionNovelSection)\.kt$' . || true
echo
echo "== outline relevant files =="
for f in \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionAppBar.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSection.kt; do
if [ -f "$f" ]; then
echo "--- $f ---"
wc -l "$f"
ast-grep outline "$f" || true
fi
done
echo
echo "== targeted snippets =="
for f in \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionAppBar.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSection.kt; do
if [ -f "$f" ]; then
echo "--- $f ---"
nl -ba "$f" | sed -n '1,140p'
fi
doneRepository: Team-WSS/WSS-Android
Length of output: 1733
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== exact files =="
git ls-files 'feature/collection/src/main/java/com/into/websoso/feature/collection/*' | sed -n '1,120p'
echo
echo "== snippets =="
for f in \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt \
feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionAppBar.kt; do
if [ -f "$f" ]; then
echo "--- $f ($(wc -l < "$f") lines) ---"
cat -n "$f" | sed -n '1,140p'
fi
done
echo
echo "== symbols =="
rg -n "onActionClick|CollectionNovelSearchScreen|COLLECTION_NOVEL_SEARCH_ROUTE|COLLECTION_LIBRARY_NOVEL_SELECTION_ROUTE|COLLECTION_CREATE_ROUTE|savedStateHandle|selectedNovelIds|selectedNovelIdsKey|SELECTED_NOVEL_IDS_KEY|CollectionNovelSection|CollectionAppBar" feature/collection/src/main -S || trueRepository: Team-WSS/WSS-Android
Length of output: 25917
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== CollectionNovelSection =="
cat -n feature/collection/src/main/java/com/into/websoso/feature/collection/component/CollectionNovelSection.kt | sed -n '1,140p'
echo
echo "== CollectionScreen route construction == "
cat -n feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt | sed -n '1,120p'
echo
echo "== focused call graph text =="
rg -n "CollectionNovelSearchScreen\\(|CollectionCreateScreen\\(|CollectionAppBar\\(|ACTION|isActionEnabled|onActionClick|previousBackStackEntry|SELECTED_NOVEL_IDS_KEY|collection/create" feature/collection/src/main/java/com/into/websoso/feature/collection -SRepository: Team-WSS/WSS-Android
Length of output: 11156
작품 선택 후 컬렉션 생성 완료로 흐름을 연결하세요.
CollectionNovelSearchScreen.kt#L51-L56:CollectionAppBar호출에onActionClick을 전달하세요. 기본값이 없어 컴파일 오류가 발생합니다.CollectionNavHost.kt#L46-L58: 검색 화면 완료 동작에서COLLECTION_CREATE_ROUTE의savedStateHandle에selectedNovelIds를 저장한 뒤popBackStack()하도록 연결하세요.CollectionCreateScreen.kt#L40-L43: 생성 화면은 선택 작품 ID를savedStateHandle에서 읽어CollectionNovelSection에 표시하고,onActionClick을 컬렉션 생성 로직으로 연결하세요.
📍 Affects 3 files
feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt#L51-L56(this comment)feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt#L46-L58feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionCreateScreen.kt#L40-L43
🤖 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/collection/src/main/java/com/into/websoso/feature/collection/CollectionNovelSearchScreen.kt`
around lines 51 - 56, Connect the novel-selection completion flow across all
affected sites: in CollectionNovelSearchScreen.kt lines 51-56, pass
onActionClick to CollectionAppBar; in CollectionNavHost.kt lines 46-58, save
selectedNovelIds in the COLLECTION_CREATE_ROUTE savedStateHandle and then call
popBackStack(); in CollectionCreateScreen.kt lines 40-43, read the selected IDs
from savedStateHandle for CollectionNovelSection and connect onActionClick to
the collection creation logic.
📌𝘐𝘴𝘴𝘶𝘦𝘴
📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯
📷𝘚𝘤𝘳𝘦𝘦𝘯𝘴𝘩𝘰𝘵
💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴
Summary by CodeRabbit