Skip to content

Conversation

@seoyoon513
Copy link
Contributor

@seoyoon513 seoyoon513 commented Dec 20, 2025

🔗 관련 이슈

📙 작업 설명

디자인 시스템

  • Chip 컴포넌트 추가
  • ReedSpacing에 spacing15 추가

기록 첫 번째 STEP

  • 메모 항목 추가 및 UI 변경사항 적용
  • 책 페이지, 메모 항목 선택사항으로 설정

기록 두 번째 STEP

  • 감정 선택 UI 변경사항 적용
  • 바텀시트를 통한 세부 감정 선택 추가

🧪 테스트 내역

  • 주요 기능 정상 동작 확인
  • 브라우저/기기에서 동작 확인
  • 엣지 케이스 테스트 완료
  • 기존 기능 영향 없음

📸 스크린샷 또는 시연 영상

Quote Step

Reed_.mp4

Emotion Step

Reed_._.mp4

💬 추가 설명 or 리뷰 포인트

  • 개편된 화면은 step_v2 패키지에 별도 작업 진행했습니다. 서버 API 개발 완료 전까지는 기존 화면을 유지, UI/UX 검증이 필요한 경우 RecordRegisterUi에서 아래 예시처럼 V2 컴포넌트로 임시 교체하여 확인해 주세요.
Scaffold(
    modifier = modifier
        .fillMaxSize()
        .preventMultiTouch(),
    containerColor = White,
    contentWindowInsets = ScaffoldDefaults.contentWindowInsets.exclude(WindowInsets.ime),
) { innerPadding ->
    Column(
        modifier = Modifier
            .fillMaxSize()
            .padding(innerPadding),
    ) {
        .
        .
        .
        
        when (state.currentStep) {
            RecordStep.QUOTE -> {
                QuoteStepV2(state = state) // V2 적용
            }

            RecordStep.EMOTION -> {
                EmotionStepV2(state = state) // V2 적용
            }

            RecordStep.IMPRESSION -> {
                ImpressionStep(state = state)
            }
        }
    }
}
image
  • "기타" 감정의 경우 서버 API 개발 완료 후 작업하겠습니다 🙇

Summary by CodeRabbit

  • 새로운 기능

    • 감정 선택 시 상세 감정 선택 바텀시트(선택/제거/건너뛰기/확인) 추가
    • 감정별 새 이미지와 설명문구 추가
    • 선택형(Selectable) 및 제거형(Removable) 칩 컴포넌트 추가 및 칩 크기 스타일(작음/중간) 제공
    • 기록 흐름에 새 단계(감정 선택 V2, 감정 상세, 문장·페이지·메모 입력)와 스캔 버튼 및 키보드/포커스 개선 추가
  • 스타일/리소스

    • 새로운 간격 단위(spacing15)와 다수 문자열 리소스(바텀시트 텍스트 등) 추가

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Dec 20, 2025

Walkthrough

감정 리소스 및 칩 스타일/컴포넌트가 디자인 시스템에 추가되고, 기록 플로우에 감정 상세 선택 바텀시트와 인용문 입력(QuoteStepV2)이 도입되며 RecordRegister 상태와 이벤트가 확장되었습니다.

Changes

Cohort / File(s) 설명
디자인 시스템 — 감정 리소스
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt, core/designsystem/src/main/res/values/strings.xml
EmotiongraphicResV2descriptionRes 게터 프로퍼티 추가; 감정 설명 문자열 리소스 4개 추가
디자인 시스템 — 칩 스타일/컴포넌트
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ChipSizeStyle.kt, core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedRemovableChip.kt, core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedSelectableChip.kt, core/designsystem/stability/designsystem.stability
ChipSizeStyle 데이터 클래스 및 mediumChipStyle/smallChipStyle @Composable 게터 추가; ReedRemovableChipReedSelectableChip 컴포저블 추가 및 안정성(스테이블) 선언 업데이트
디자인 시스템 — 간격
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Spacing.kt
ReedSpacingspacing15: Dp = 6.dp 추가
기록 플로우 — 상태/이벤트 확장
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt, feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt
RecordRegisterUiStatememoState, emotionDetails, selectedEmotionDetails, committedEmotion, committedEmotionDetails, isEmotionDetailBottomSheetVisible 필드 추가; 감정 상세 관련 이벤트(선택/토글/제거/스킵/커밋/바텀시트 닫기) 및 헬퍼 함수(provideEmotionDetailMap, getEmotionDetails) 추가; 이벤트 처리 로직 확장
기록 플로우 — UI 컴포넌트 (Step V2)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt, .../EmotionItem.kt, .../EmotionDetailBottomSheet.kt, .../QuoteStepV2.kt, feature/record/src/main/res/values/strings.xml
감정 선택 화면(EmotionStepV2), 감정 아이템(EmotionItem), 감정 상세 선택 바텀시트(EmotionDetailBottomSheet), 인용문 입력 화면(QuoteStepV2) 추가; 관련 문자열 리소스 6개 추가
안정성 메타데이터
feature/record/stability/record.stability
여러 기존 컴포저블의 상태 파라미터 안정성(STABLE→RUNTIME) 및 skippable 플래그 변경; step_v2 컴포저블의 안정성/노테이션 추가

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant UI as EmotionStepV2
    participant Presenter as RecordRegisterPresenter
    participant State as RecordRegisterUiState
    participant Sheet as EmotionDetailBottomSheet

    User->>UI: 감정 터치
    UI->>Presenter: eventSink(OnSelectEmotionV2(emotion))
    Presenter->>Presenter: provide/getEmotionDetails(emotion)
    Presenter->>State: set emotionDetails, isEmotionDetailBottomSheetVisible=true, committedEmotion
    State-->>UI: 상태 변경 반영 (바텀시트 표시)

    User->>Sheet: 상세 감정 토글/제거
    Sheet->>Presenter: OnEmotionDetailToggled / OnEmotionDetailRemoved
    Presenter->>State: update selectedEmotionDetails
    State-->>Sheet: 선택 반영

    alt 스킵
        User->>Sheet: 건너뛰기
        Sheet->>Presenter: OnEmotionDetailSkipped
        Presenter->>State: clear/commit defaults, isEmotionDetailBottomSheetVisible=false
    else 완료
        User->>Sheet: 선택 완료
        Sheet->>Presenter: OnEmotionDetailCommitted
        Presenter->>State: commit selectedEmotionDetails, isEmotionDetailBottomSheetVisible=false
    end

    State-->>UI: 변경 반영
    UI->>User: UI 업데이트
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • 추가 검토가 권장되는 항목:
    • feature/record/.../RecordRegisterPresenter.kt: 감정 상세 상태 전이, provide/getEmotionDetails 구현, 이벤트 처리 분기
    • feature/record/.../EmotionStepV2.kt: SheetState/코루틴으로 인한 생명주기와 시트 표시/숨김 로직
    • feature/record/.../EmotionDetailBottomSheet.kt, EmotionItem.kt: 선택 토글/제거 콜백과 UI 동기화
    • core/designsystem/.../ChipSizeStyle.kt 및 ReedRemovableChip/ReedSelectableChip: 패딩·타이포그래피 일관성, 접근성(클릭 영역) 확인
    • QuoteStepV2.kt: 키보드 감지와 bringIntoView 동작의 안정성

🐰 깡충깡충 뛸래요, 새 UI가 왔으니요.
칩 위에 단어들이 춤추고, 바텀시트가 속마음을 열어요.
한 줄 적고 한숨 놓으며, 기록은 따스히 빛나죠.
📚✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목이 PR의 주요 변경사항인 독서 기록 플로우 UI/UX 개편을 정확하게 요약하고 있습니다.
Linked Issues check ✅ Passed PR은 연결된 이슈 #235의 모든 코딩 요구사항을 충족합니다. 플로우 단계별 변경사항(Quote Step, Emotion Step의 step_v2 구현)과 세부 감정 추가(EmotionDetailBottomSheet, emotionDetails 상태 관리)가 모두 구현되었습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 독서 기록 플로우 UI/UX 개편 범위 내입니다. 디자인 시스템 개선(Chip, Spacing), Quote Step 및 Emotion Step 구현, 세부 감정 선택 기능 모두 PR 목표와 일치합니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch BOOK-477-feature/#235

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1457e9b and b8d3e44.

📒 Files selected for processing (3)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1 hunks)
  • feature/record/stability/record.stability (5 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: seoyoon513
Repo: YAPP-Github/Reed-Android PR: 46
File: feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/InfiniteLazyColumn.kt:83-95
Timestamp: 2025-07-14T00:46:03.843Z
Learning: seoyoon513과 팀은 한국어 주석을 선호하며, 한국어 주석을 영어로 번역하라는 제안을 하지 않아야 함
📚 Learning: 2025-08-28T12:25:54.058Z
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 174
File: feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt:128-133
Timestamp: 2025-08-28T12:25:54.058Z
Learning: In BookSearchPresenter.kt, when a guest user tries to register a book and is redirected to login, the bottom sheet (isBookRegisterBottomSheetVisible) and selection state (selectedBookIsbn, selectedBookStatus) are intentionally kept open/preserved so that when the user returns from login, they can continue from where they left off without losing context.

Applied to files:

  • feature/record/stability/record.stability
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Compose Stability Check
  • GitHub Check: ci-build
🔇 Additional comments (3)
feature/record/stability/record.stability (3)

1-5: 자동 생성 파일 확인

이 파일은 Compose Stability Analyzer에 의해 자동 생성되며, 직접 수정하지 않고 ./gradlew :record:stabilityDump 명령어로 재생성하는 것이 올바른 접근입니다.


214-280: step_v2 composable 추가 확인 완료

새롭게 추가된 step_v2 패키지의 composable 함수들이 올바르게 정의되었습니다:

  • EmotionDetailBottomSheetEmotionItem은 모든 파라미터가 STABLE하여 최적화 가능(skippable: true)
  • EmotionStepV2QuoteStepV2RecordRegisterUiState를 사용하므로 RUNTIME stability를 가지며, 기존 step 함수들과 일관성 있게 동작
  • 각 composable마다 preview 함수가 적절히 제공됨

136-140: RecordRegisterUiState의 TextFieldState 필드로 인한 stability 저하 문제

RecordRegisterUiState@Stable 또는 @Immutable 어노테이션으로 표시되지 않았으며, 4개의 TextFieldState 필드(recordPageState, recordSentenceState, memoState, impressionState)를 포함하고 있습니다. TextFieldStateandroidx.compose.foundation.text.input의 mutable 타입이기 때문에 Compose 컴파일러가 이 상태를 RUNTIME (런타임 체크 필요)으로 분류하게 되고, 이로 인해 다음 composable 함수들이 skippable: false로 설정됩니다:

  • HandleRecordRegisterSideEffects (136-140)
  • RecordRegisterUi (154-160)
  • EmotionStep (173-178)
  • ImpressionStep (181-186)
  • QuoteStep (195-200)

이는 매번 리컴포지션 시 이 함수들을 건너뛸 수 없으므로 성능 영향을 줄 수 있습니다.

다음 방법 중 하나로 개선하세요:

  • TextFieldState 필드들을 별도의 stable holder 클래스로 분리하고 RecordRegisterUiState에서는 제거
  • Compose의 안정성 요구사항을 충족하도록 RecordRegisterUiState@Stable 어노테이션 추가 (단, TextFieldState가 실제로 안정적인 경우에만 유효)

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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🧹 Nitpick comments (4)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedRemovableChip.kt (1)

52-61: 닫기 아이콘의 터치 영역이 작을 수 있습니다.

현재 아이콘 크기가 14.dp로 설정되어 있어 터치 타겟으로는 작을 수 있습니다. Android 접근성 가이드라인에서는 최소 48dp의 터치 영역을 권장합니다. Modifier.size()와 별도로 터치 영역을 확장하거나, 현재 구현이 의도된 것인지 확인해 주세요.

🔎 터치 영역 확장 제안
         Icon(
             imageVector = ImageVector.vectorResource(R.drawable.ic_close),
             contentDescription = "Icon Close",
             tint = ReedTheme.colors.contentBrand,
             modifier = Modifier
                 .size(14.dp)
+                .padding(ReedTheme.spacing.spacing2) // 터치 영역 확장
                 .noRippleClickable {
                     onRemove()
                 },
         )
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionDetailBottomSheet.kt (1)

54-57: 불필요한 람다 래핑을 제거할 수 있습니다.

onDismissRequest 콜백을 직접 전달할 수 있습니다.

🔎 제안된 수정
     ReedBottomSheet(
-        onDismissRequest = {
-            onDismissRequest()
-        },
+        onDismissRequest = onDismissRequest,
         sheetState = sheetState,
     ) {
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1)

98-102: 아이콘에 따른 contentDescription 업데이트가 필요합니다.

iconResisSelected 상태에 따라 체크 아이콘 또는 chevron 아이콘으로 변경되지만, contentDescription은 항상 "Chevron Right"로 고정되어 있습니다. 접근성을 위해 상태에 맞는 설명을 제공하는 것이 좋습니다.

🔎 제안된 수정
+    val iconContentDescription = if (isSelected) "Selected" else "Chevron Right"
+
     Icon(
         imageVector = ImageVector.vectorResource(iconRes),
-        contentDescription = "Chevron Right",
+        contentDescription = iconContentDescription,
         tint = iconTint,
     )
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt (1)

120-124: 바텀시트 숨김 후 이벤트 전달 패턴 개선 고려

바텀시트를 숨기는 패턴이 여러 곳에서 반복됩니다 (lines 120-124, 129-133, 135-140). emotionDetailBottomSheetState.hide()를 호출한 후 이벤트를 전달하는 헬퍼 함수를 만들면 코드 중복을 줄일 수 있습니다.

🔎 제안: 헬퍼 함수로 리팩토링
suspend fun hideBottomSheetAndDispatch(event: RecordRegisterUiEvent) {
    emotionDetailBottomSheetState.hide()
    state.eventSink(event)
}

// 사용 예시
onCloseButtonClick = {
    coroutineScope.launch {
        hideBottomSheetAndDispatch(RecordRegisterUiEvent.OnEmotionDatilBottomSheetDismiss)
    }
}
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 194d574 and 5887d7e.

📒 Files selected for processing (13)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt (1 hunks)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ChipSizeStyle.kt (1 hunks)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedRemovableChip.kt (1 hunks)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedSelectableChip.kt (1 hunks)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Spacing.kt (1 hunks)
  • core/designsystem/src/main/res/values/strings.xml (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt (8 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt (2 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionDetailBottomSheet.kt (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt (1 hunks)
  • feature/record/src/main/res/values/strings.xml (1 hunks)
🧰 Additional context used
🧠 Learnings (3)
📓 Common learnings
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 88
File: feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/RecordItem.kt:29-37
Timestamp: 2025-07-31T23:17:40.054Z
Learning: Reed-Android 프로젝트에서는 API가 준비되지 않은 상황에서 UI를 먼저 구현하고, API 연동 시점에 하드코딩된 데이터를 실제 데이터로 교체하는 개발 방식을 사용한다. RecordItem 컴포넌트의 emotionTags 매개변수도 API 연동 시점에 `text = emotionTags.joinToString(separator = "·") { "#$it" }`로 적용될 예정이다.
Learnt from: seoyoon513
Repo: YAPP-Github/Reed-Android PR: 46
File: feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/InfiniteLazyColumn.kt:83-95
Timestamp: 2025-07-14T00:46:03.843Z
Learning: seoyoon513과 팀은 한국어 주석을 선호하며, 한국어 주석을 영어로 번역하라는 제안을 하지 않아야 함
📚 Learning: 2025-07-31T23:17:40.054Z
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 88
File: feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/RecordItem.kt:29-37
Timestamp: 2025-07-31T23:17:40.054Z
Learning: Reed-Android 프로젝트에서는 API가 준비되지 않은 상황에서 UI를 먼저 구현하고, API 연동 시점에 하드코딩된 데이터를 실제 데이터로 교체하는 개발 방식을 사용한다. RecordItem 컴포넌트의 emotionTags 매개변수도 API 연동 시점에 `text = emotionTags.joinToString(separator = "·") { "#$it" }`로 적용될 예정이다.

Applied to files:

  • core/designsystem/src/main/res/values/strings.xml
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionDetailBottomSheet.kt
  • feature/record/src/main/res/values/strings.xml
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt
📚 Learning: 2025-08-28T12:25:54.058Z
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 174
File: feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt:128-133
Timestamp: 2025-08-28T12:25:54.058Z
Learning: In BookSearchPresenter.kt, when a guest user tries to register a book and is redirected to login, the bottom sheet (isBookRegisterBottomSheetVisible) and selection state (selectedBookIsbn, selectedBookStatus) are intentionally kept open/preserved so that when the user returns from login, they can continue from where they left off without losing context.

Applied to files:

  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt
🧬 Code graph analysis (6)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt (4)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1)
  • EmotionItem (41-124)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt (1)
  • ReedButton (34-114)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionDetailBottomSheet.kt (1)
  • EmotionDetailBottomSheet (39-149)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionDetailBottomSheet.kt (4)
core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/ReedBottomSheet.kt (1)
  • ReedBottomSheet (21-40)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedSelectableChip.kt (1)
  • ReedSelectableChip (20-54)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt (1)
  • ReedButton (34-114)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedRemovableChip.kt (1)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (2)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedRemovableChip.kt (1)
  • ReedRemovableChip (25-63)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt (3)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedRecordTextField.kt (1)
  • ReedRecordTextField (42-129)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt (1)
  • ReedButton (34-114)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedSelectableChip.kt (1)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: ci-build
  • GitHub Check: Compose Stability Check
🔇 Additional comments (16)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Spacing.kt (1)

12-12: LGTM!

기존 네이밍 컨벤션(spacing05 패턴)을 따르고 있으며, 4.dp와 8.dp 사이의 6.dp 값이 적절하게 추가되었습니다.

core/designsystem/src/main/res/values/strings.xml (1)

7-10: LGTM!

감정 설명 문자열이 일관된 형식으로 잘 추가되었습니다. Emotion.descriptionRes 확장 프로퍼티와 연동되어 사용됩니다.

feature/record/src/main/res/values/strings.xml (1)

45-49: LGTM!

감정 상세 선택 UI를 위한 문자열이 적절하게 추가되었습니다. emotion_detail_title%1$s 포맷 문자열도 올바르게 사용되었습니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionDetailBottomSheet.kt (2)

94-102: FlowRow의 수평 패딩이 중복될 수 있습니다.

상위 Column에 이미 startendspacing5 패딩이 적용되어 있습니다 (라인 62-66). FlowRow에도 동일한 수평 패딩이 추가되어 있어 총 40dp의 수평 여백이 생깁니다. 의도된 디자인인지 확인해 주세요.


120-146: LGTM!

버튼 구성이 적절합니다. 확인 버튼의 enabled 로직이 selectedEmotionDetail.isNotEmpty()로 올바르게 구현되었습니다.

core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedSelectableChip.kt (1)

20-54: LGTM!

선택 상태에 따른 색상 로직이 명확하게 구현되었습니다. ReedRemovableChip과 일관된 스타일 패턴을 따르고 있습니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1)

41-74: LGTM!

EmotionItem의 레이아웃 구조와 조건부 border 처리가 Modifier.then()을 사용하여 깔끔하게 구현되었습니다.

core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/Emotion.kt (1)

38-52: 확장 프로퍼티 구현이 적절합니다

graphicResV2descriptionRes 확장 프로퍼티가 모든 Emotion 값에 대해 exhaustive when 표현식을 사용하고 있어, 향후 새로운 감정 타입이 추가될 때 컴파일러가 누락된 분기를 감지할 수 있습니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt (1)

68-73: 키보드 표시 시 스크롤 처리가 적절합니다

키보드가 표시되고 문장 입력 필드가 포커스되었을 때 bringIntoView()를 호출하여 필드를 화면에 표시하는 로직이 잘 구현되어 있습니다. 100ms 딜레이는 키보드 애니메이션과의 동기화를 위한 일반적인 패턴입니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt (1)

19-26: 감정 상세 상태 필드 추가가 적절합니다

새로운 감정 상세 선택 기능을 위한 상태 필드들이 잘 구성되어 있습니다. selectedEmotionDetailscommittedEmotionDetails를 분리하여 임시 선택과 확정을 구분한 설계가 좋습니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt (4)

177-184: 하드코딩된 감정 상세 데이터 확인

감정 상세 옵션이 하드코딩되어 있습니다. PR 설명에 따르면 서버 API 준비 전까지 임시로 사용하는 것으로 이해됩니다. API 연동 시 이 데이터를 실제 서버 응답으로 교체해야 합니다.

Based on learnings, Reed-Android 프로젝트에서는 API가 준비되지 않은 상황에서 UI를 먼저 구현하는 방식을 사용합니다.


267-275: 감정 상세 커밋 시 기존 선택 덮어쓰기 확인

Line 272에서 committedEmotionDetails를 새로운 맵으로 교체하고 있습니다. 만약 사용자가 여러 감정을 선택할 수 있다면, 이전에 선택한 다른 감정의 상세 정보가 손실될 수 있습니다. 현재 설계에서는 한 번에 하나의 감정만 선택 가능한지 확인이 필요합니다.

UI 플로우 상 사용자가 여러 감정을 동시에 선택할 수 있는지 EmotionStepV2 구현을 확인해주세요. 만약 여러 감정 선택이 가능하다면 다음과 같이 수정이 필요합니다:

🔎 여러 감정 선택 지원 시 제안 수정
-                    committedEmotionDetails = mapOf(emotionKey to details)
+                    committedEmotionDetails = committedEmotionDetails + (emotionKey to details)

117-121: 다음 버튼 활성화 조건이 적절합니다

QUOTE 단계에서 메모가 선택 사항으로 변경되었고, EMOTION 단계에서 committedEmotion을 확인하도록 수정된 것이 PR 목표와 일치합니다.


250-257: OnEmotionDetailRemoved 핸들러의 로직은 올바릅니다

칩 제거 기능은 의도대로 작동합니다. EmotionItem에 표시되는 칩들은 committedEmotionDetails에서 가져오므로, 제거 시에도 committedEmotionDetails에서 항목을 제거하는 것이 정확합니다. OnEmotionDetailToggled와 다르게 동작하는 이유는 두 핸들러가 다른 목적을 수행하기 때문입니다: selectedEmotionDetails는 바텀시트 내 임시 선택 상태이고, committedEmotionDetails는 이미 확정된 최종 상태입니다.

core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ChipSizeStyle.kt (1)

22-29: 칩 스타일 정의가 적절합니다

ChipSizeStyle 데이터 클래스와 두 가지 스타일 정의가 디자인 시스템 패턴을 잘 따르고 있습니다. smallChipStyle에서 사용하는 spacing15ReedSpacing6.dp로 정의되어 있으며, 모든 참조가 올바르게 작동합니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt (1)

113-113: 바텀시트 표시 시 selectedEmotion null 가능성 검토

코드 검증 결과, OnSelectEmotionV2 이벤트 핸들러가 selectedEmotion을 설정한 직후 isEmotionDetailBottomSheetVisibletrue로 설정하는 원자적 작업이므로, 바텀시트가 표시될 때 selectedEmotion이 null이 될 수 없습니다. 따라서 현재 ?: Emotion.WARM 폴백은 방어적 프로그래밍이지만 필수는 아니며, 의도를 명확히 하려면 주석을 추가하는 것이 좋습니다.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1)

112-120: 이전 리뷰 지적사항이 해결되었습니다.

변수 섀도잉 문제가 수정되었습니다. forEach 람다의 변수명이 detail로 변경되어 더 이상 컴포저블 파라미터 emotion을 섀도잉하지 않습니다.

🧹 Nitpick comments (1)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1)

76-102: 접근성 문자열을 한국어로 변경하거나 문자열 리소스 사용을 고려해보세요.

Line 78과 Line 100의 contentDescription이 영어로 되어 있습니다. 스크린 리더 사용자를 위해 한국어로 변경하거나 문자열 리소스(stringResource)를 사용하는 것이 좋습니다.

🔎 제안된 수정
             Image(
                 painter = painterResource(emotion.graphicResV2),
-                contentDescription = "Emotion Image",
+                contentDescription = "감정 이미지",
                 modifier = Modifier
                     .size(60.dp)
                     .clip(CircleShape)
             Icon(
                 imageVector = ImageVector.vectorResource(iconRes),
-                contentDescription = "Chevron Right",
+                contentDescription = if (isSelected) "선택됨" else "선택 가능",
                 tint = iconTint,
             )
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5887d7e and 1457e9b.

📒 Files selected for processing (7)
  • core/designsystem/stability/designsystem.stability (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt (8 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt (2 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt (1 hunks)
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt (1 hunks)
  • feature/record/src/main/res/values/strings.xml (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • feature/record/src/main/res/values/strings.xml
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionStepV2.kt
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 88
File: feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/RecordItem.kt:29-37
Timestamp: 2025-07-31T23:17:40.054Z
Learning: Reed-Android 프로젝트에서는 API가 준비되지 않은 상황에서 UI를 먼저 구현하고, API 연동 시점에 하드코딩된 데이터를 실제 데이터로 교체하는 개발 방식을 사용한다. RecordItem 컴포넌트의 emotionTags 매개변수도 API 연동 시점에 `text = emotionTags.joinToString(separator = "·") { "#$it" }`로 적용될 예정이다.
Learnt from: seoyoon513
Repo: YAPP-Github/Reed-Android PR: 46
File: feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/component/InfiniteLazyColumn.kt:83-95
Timestamp: 2025-07-14T00:46:03.843Z
Learning: seoyoon513과 팀은 한국어 주석을 선호하며, 한국어 주석을 영어로 번역하라는 제안을 하지 않아야 함
📚 Learning: 2025-07-31T23:17:40.054Z
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 88
File: feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/RecordItem.kt:29-37
Timestamp: 2025-07-31T23:17:40.054Z
Learning: Reed-Android 프로젝트에서는 API가 준비되지 않은 상황에서 UI를 먼저 구현하고, API 연동 시점에 하드코딩된 데이터를 실제 데이터로 교체하는 개발 방식을 사용한다. RecordItem 컴포넌트의 emotionTags 매개변수도 API 연동 시점에 `text = emotionTags.joinToString(separator = "·") { "#$it" }`로 적용될 예정이다.

Applied to files:

  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt
  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt
📚 Learning: 2025-08-28T12:25:54.058Z
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 174
File: feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt:128-133
Timestamp: 2025-08-28T12:25:54.058Z
Learning: In BookSearchPresenter.kt, when a guest user tries to register a book and is redirected to login, the bottom sheet (isBookRegisterBottomSheetVisible) and selection state (selectedBookIsbn, selectedBookStatus) are intentionally kept open/preserved so that when the user returns from login, they can continue from where they left off without losing context.

Applied to files:

  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt
📚 Learning: 2025-07-31T16:58:59.404Z
Learnt from: easyhooon
Repo: YAPP-Github/Reed-Android PR: 88
File: core/model/src/main/kotlin/com/ninecraft/booket/core/model/EmotionModel.kt:11-18
Timestamp: 2025-07-31T16:58:59.404Z
Learning: Reed-Android 프로젝트는 현재 다국어 지원 계획이 없어서 모델에 한글 문자열을 직접 포함하는 것이 허용된다.

Applied to files:

  • feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt
🧬 Code graph analysis (2)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (2)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/chip/ReedRemovableChip.kt (1)
  • ReedRemovableChip (25-63)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt (3)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/textfield/ReedRecordTextField.kt (1)
  • ReedRecordTextField (42-129)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt (1)
  • ReedButton (34-114)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: ci-build
  • GitHub Check: Compose Stability Check
🔇 Additional comments (10)
core/designsystem/stability/designsystem.stability (1)

166-198: LGTM! 칩 컴포넌트의 안정성 선언이 올바르게 추가되었습니다.

새로 추가된 칩 스타일과 컴포넌트들의 안정성 선언이 정확합니다:

  • 모든 파라미터가 STABLE로 적절히 표시되어 Compose 재구성 최적화에 유리합니다.
  • skippable: truerestartable: true 설정으로 성능이 최적화되어 있습니다.
  • 기존 버튼 컴포넌트 패턴과 일관성을 유지하고 있습니다.

자동 생성된 파일이므로 향후 컴포넌트 시그니처 변경 시 ./gradlew :designsystem:stabilityDump 명령어를 재실행하여 업데이트하시면 됩니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/EmotionItem.kt (1)

41-141: 전반적인 구현이 우수합니다.

EmotionItem 컴포저블이 잘 구현되었습니다:

  • 디자인 시스템 토큰 사용이 일관적이고 정확합니다
  • ImmutableList 사용으로 Compose 리컴포지션 최적화가 적용되었습니다
  • 조건부 스타일링과 칩 표시 로직이 명확하게 분리되어 있습니다
  • Preview 함수를 통해 디자인 타임 테스트가 가능합니다
  • 전체적인 코드 구조가 깔끔하고 유지보수하기 좋습니다
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUiState.kt (2)

19-26: 감정 상세 선택 워크플로우를 위한 상태 확장이 적절합니다.

새로 추가된 상태 필드들이 감정 상세 선택 기능을 잘 지원하고 있습니다:

  • memoState: 메모 입력 상태
  • emotionDetails: 선택 가능한 감정 상세 목록
  • selectedEmotionDetails: 사용자가 선택한 감정별 상세 정보
  • committedEmotion/committedEmotionDetails: 확정된 감정 및 상세 정보
  • isEmotionDetailBottomSheetVisible: 바텀시트 표시 상태

타입 안전성도 ImmutableListMap을 사용하여 잘 확보되어 있습니다.


56-61: 감정 상세 선택을 위한 이벤트 정의가 잘 구성되어 있습니다.

새로운 V2 이벤트들이 감정 선택 플로우를 명확하게 표현하고 있습니다:

  • OnSelectEmotionV2: 감정 선택 및 바텀시트 표시
  • OnEmotionDetailToggled/OnEmotionDetailRemoved: 상세 감정 토글/제거
  • OnEmotionDetailSkipped/OnEmotionDetailCommitted: 건너뛰기/확정
  • OnEmotionDetailBottomSheetDismiss: 바텀시트 닫기

과거 리뷰에서 지적된 오타(OnEmotionDatilBottomSheetDismiss)도 수정되었습니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt (1)

88-228: 전체적인 UI 구성이 잘 되어 있습니다.

QuoteStepV2 컴포넌트가 다음 요소들을 적절하게 구현하고 있습니다:

  • 문장, 페이지, 메모 입력 필드들의 상태 관리
  • 키보드 타입 및 IME 액션 설정
  • 에러 처리 및 유효성 검증
  • 포커스 관리 및 네비게이션

과거 리뷰에서 지적된 하드코딩 문자열 이슈도 stringResource를 사용하여 해결되었습니다.

feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterPresenter.kt (5)

176-187: 감정 상세 정보 제공 로직이 적절합니다.

하드코딩된 감정 상세 옵션들은 프로젝트의 개발 방식에 따라 허용됩니다. API 연동 시점에 실제 데이터로 교체될 예정입니다.

getEmotionDetails() 함수는 안전한 fallback(persistentListOf())을 제공하여 null-safety를 보장합니다.

Based on learnings, Reed-Android 프로젝트에서는 API 준비 전 UI를 먼저 구현하는 방식을 사용합니다.


231-235: 감정 선택 V2 핸들러가 잘 구현되어 있습니다.

과거 리뷰에서 지적된 unsafe cast 이슈가 .toPersistentList() 호출로 해결되었습니다. 로직이 명확합니다:

  1. 선택된 감정 설정
  2. 해당 감정의 상세 옵션 로드
  3. 상세 선택 바텀시트 표시

237-247: 상세 감정 토글 로직이 정확합니다.

null 안전성을 확보하고 토글 동작(있으면 제거, 없으면 추가)이 올바르게 구현되어 있습니다.


249-278: 감정 상세 관리 핸들러들이 잘 구현되어 있습니다.

각 핸들러가 명확한 책임을 가지고 있습니다:

  • OnEmotionDetailRemoved: 확정된 상세 감정 제거 및 선택 상태 동기화
  • OnEmotionDetailSkipped: 상세 감정 없이 진행 (상태 초기화)
  • OnEmotionDetailCommitted: 선택한 상세 감정 확정
  • OnEmotionDetailBottomSheetDismiss: 바텀시트 닫기

상태 동기화와 null 안전성이 잘 처리되어 있습니다.


119-121: 다음 버튼 활성화 조건이 새로운 워크플로우에 맞게 변경되었습니다.

EMOTION 단계에서 selectedEmotion 대신 committedEmotion을 확인하도록 변경된 것이 적절합니다. 이를 통해 사용자가 감정과 상세 정보를 확정해야만 다음 단계로 진행할 수 있습니다.

Comment on lines +64 to +72
val bringIntoViewRequester = remember { BringIntoViewRequester() }
val keyboardState by rememberKeyboardVisible()
var isSentenceTextFieldFocused by remember { mutableStateOf(false) }

LaunchedEffect(keyboardState, isSentenceTextFieldFocused) {
if (keyboardState && isSentenceTextFieldFocused) {
delay(100)
bringIntoViewRequester.bringIntoView()
}
Copy link

@coderabbitai coderabbitai bot Dec 20, 2025

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

BringIntoViewRequester가 컴포저블에 연결되지 않았습니다.

BringIntoViewRequester가 생성되고 bringIntoView()가 호출되지만, 실제로 어떤 컴포저블에도 .bringIntoViewRequester(bringIntoViewRequester) modifier가 연결되지 않아 자동 스크롤이 작동하지 않습니다.

🔎 수정 제안

문장 입력 TextField를 감싸는 Box에 modifier를 추가하세요:

+            Box(
+                modifier = Modifier.bringIntoViewRequester(bringIntoViewRequester)
+            ) {
                 ReedRecordTextField(
                     recordState = state.recordSentenceState,
                     recordHintRes = R.string.quote_step_sentence_hint,
                     modifier = Modifier
                         .fillMaxWidth()
                         .height(140.dp)
                         .onFocusChanged { focusState ->
                             isSentenceTextFieldFocused = focusState.isFocused
                         },
                     keyboardOptions = KeyboardOptions(
                         keyboardType = KeyboardType.Text,
                         imeAction = ImeAction.Default,
                     ),
                 )
+            }

또는 필요한 import를 추가하세요:

import androidx.compose.foundation.relocation.bringIntoViewRequester

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In
feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step_v2/QuoteStepV2.kt
around lines 64 to 72, the BringIntoViewRequester is created and bringIntoView()
is invoked but never attached to any composable; add the
.bringIntoViewRequester(bringIntoViewRequester) modifier to the Box (or the
container) that wraps the sentence input TextField (or the TextField itself) so
the requester is bound to a layout, and add the import
androidx.compose.foundation.relocation.bringIntoViewRequester if missing.

Copy link
Contributor

Choose a reason for hiding this comment

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

@seoyoon513 현 시점에서 필요한 코드인지 확인이 필요할 것 같습니다.

Copy link

Choose a reason for hiding this comment

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

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

@easyhooon easyhooon closed this Dec 24, 2025
@easyhooon easyhooon deleted the BOOK-477-feature/#235 branch December 24, 2025 06:58
@easyhooon easyhooon restored the BOOK-477-feature/#235 branch December 24, 2025 07:07
@easyhooon easyhooon reopened this Dec 24, 2025
@easyhooon
Copy link
Contributor

"기타" 감정의 경우 서버 API 개발 완료 후 작업하겠습니다 🙇

이 작업까지 완료되면 merge가 되는건가요 아니면 일단 merge 후 서버 API 반영 PR이 따로 올라오나여?

@seoyoon513
Copy link
Contributor Author

"기타" 감정의 경우 서버 API 개발 완료 후 작업하겠습니다 🙇

이 작업까지 완료되면 merge가 되는건가요 아니면 일단 merge 후 서버 API 반영 PR이 따로 올라오나여?

요거 merge 후 서버 API 반영 때 추가해서 PR로 올리려구요!


fun provideEmotionDetailMap(): Map<Emotion, ImmutableList<String>> {
return mapOf(
Emotion.WARM to persistentListOf("위로받은", "포근한", "다정한", "고마운", "마음이 놓이는", "편안한"),
Copy link
Contributor

@easyhooon easyhooon Dec 26, 2025

Choose a reason for hiding this comment

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

이후 API로 받아오는 방식으로 대체 예정

@easyhooon
Copy link
Contributor

문장 스캔 버튼 눌렀을때 갤러리에서 선택하는 옵션 추가 예정

Copy link
Contributor

@easyhooon easyhooon left a comment

Choose a reason for hiding this comment

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

LGTM! 서버 작업 반영 후 이후 작업 진행하시죠~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOOK-477/feat] 독서 기록 플로우 UI/UX 개편

3 participants