Conversation
- 시술 여부 선택 뷰 컨텐트 구현
- 시술 카테고리 선택 뷰 컨텐트 구현
- 시술 플로우의 시술 필터링 뷰 컨텐트 구현
- 시술 플로우의 시술 다운타임 설정 뷰 컨텐트 구현
- 시술플로우 시술 필터링 + 검색 뷰 컨텐트 구현
Walkthrough시술 플로우 관련 다수의 신규 컴포저블과 UI 모델을 추가하고, 디자인 시스템 컴포넌트의 텍스트 스타일 및 일부 컴포저블 시그니처( Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant RecoveryScheduleContent
participant SelectionSection
participant ScheduleSettingSection
participant DateInputBasicSection
User->>RecoveryScheduleContent: 화면 진입
RecoveryScheduleContent->>SelectionSection: 항목 렌더링 요청
User->>SelectionSection: 항목 선택(onItemClick)
SelectionSection-->>RecoveryScheduleContent: selectedIndex 전달
RecoveryScheduleContent->>ScheduleSettingSection: selectedIndex 존재 시 표시
ScheduleSettingSection->>DateInputBasicSection: 연/월/일 입력 필드 렌더링
User->>DateInputBasicSection: 값 입력(onYear/Month/DayChange)
DateInputBasicSection-->>RecoveryScheduleContent: 변경 콜백 전달
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧹 Recent nitpick comments
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro 📒 Files selected for processing (6)
🚧 Files skipped from review as they are similar to previous changes (2)
🧰 Additional context used📓 Path-based instructions (1)**/*.kt⚙️ CodeRabbit configuration file
Files:
🧠 Learnings (1)📚 Learning: 2026-01-12T19:49:27.085ZApplied to files:
🧬 Code graph analysis (3)app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.kt (2)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/CategoryContent.kt (2)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/ExistenceContent.kt (2)
⏰ 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)
🔇 Additional comments (6)
✏️ Tip: You can disable this entire section by setting 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
🤖 Fix all issues with AI agents
In
`@app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureTitleSection.kt`:
- Around line 17-19: The functions ProcedureTitleSection and
ProcedureTitleWithCaution declare an unused id: Long parameter; remove id from
both function signatures and any internal references (none currently used) and
update all call sites to stop passing the id so the function signatures and
usages remain consistent; ensure imports/overloads are adjusted if needed and
run a build to catch remaining references.
In
`@app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.kt`:
- Around line 106-107: The LazyColumn is reusing the external parameter named
modifier (modifier.fillMaxWidth()) which duplicates parent Column's modifiers;
change the LazyColumn invocation to use a fresh Modifier (e.g.,
Modifier.fillMaxWidth()) instead of the passed-in modifier so external
padding/size constraints from the parent Column are not applied twice. Locate
the LazyColumn call in FilteringWithSearchContent.kt and replace modifier =
modifier.fillMaxWidth() with modifier = Modifier.fillMaxWidth() (or compose the
needed local modifiers using Modifier.then(...) without reusing the external
modifier).
- Around line 94-104: The component currently stores the search query in the
local var text but never uses it to filter the displayed cards and
onSearchAction is a no-op; either implement local filtering by deriving a
filtered list from the existing cardItems using the text state (e.g., compute
filteredCardItems = cardItems.filter { matches(query) } and render that instead
of cardItems), or propagate the query to the parent by calling a provided
callback from ProcedureTextField's onValueChange or onSearchAction so the parent
returns filtered data; update ProcedureTextField usage (onValueChange = { text =
it; onSearchActionCallback?.invoke(it) } or call onSearchAction with the current
text) and replace references to cardItems in the UI with the filtered
collection, and double-check the component's TODO comment to confirm whether
implementing search here is appropriate.
🧹 Nitpick comments (9)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.kt (3)
56-79:sectionTitle연산을remember로 최적화 고려
sectionTitle이AnimatedVisibility블록 내부에서 매번 recomposition마다 계산됩니다.selectedIndex가 변경될 때만 다시 계산되도록remember를 사용하면 불필요한 연산을 줄일 수 있습니다.♻️ 제안된 수정
AnimatedVisibility( visible = hasSelection, enter = fadeIn() + expandVertically(), exit = fadeOut() + shrinkVertically() ) { + val sectionTitle = remember(selectedIndex) { + if (selectedIndex == 0) { + "대략적인 회복 목표일을 정해볼까요?" + } else { + "언제까지 회복이 완료되면 좋을까요?" + } + } + Column( modifier = Modifier.padding(top = 56.dp) ) { - val sectionTitle = if (selectedIndex == 0) { - "대략적인 회복 목표일을 정해볼까요?" - } else { - "언제까지 회복이 완료되면 좋을까요?" - } - ScheduleSettingSection(
154-169: 날짜 입력에KeyboardType.Number지정 권장날짜 입력 필드에
keyboardType = KeyboardType.Number를 지정하면 사용자가 숫자 키패드로 바로 입력할 수 있어 UX가 개선됩니다.♻️ 제안된 수정
+import androidx.compose.ui.text.input.KeyboardTypeCherrishTextField( value = date, placeholder = placeholder, onValueChange = onValueChange, roundedCornerShape = RoundedCornerShape(8.dp), placeholderTextStyle = CherrishTheme.typography.title2R16.copy( textAlign = TextAlign.Center ), placeholderTextColor = CherrishTheme.colors.gray500, inputTextStyle = CherrishTheme.typography.title2M16.copy( textAlign = TextAlign.Center ), inputTextColor = CherrishTheme.colors.gray800, paddingValues = PaddingValues(horizontal = 19.dp, vertical = 8.dp), - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), + keyboardType = KeyboardType.Number )
149-150:fillMaxWidth()중복 적용
modifier파라미터로 이미weight(1f)가 전달되므로fillMaxWidth()는 중복입니다. 간결성을 위해 제거를 고려해주세요.♻️ 제안된 수정
Row( - modifier = modifier.fillMaxWidth(), + modifier = modifier, horizontalArrangement = Arrangement.spacedBy(4.dp), verticalAlignment = CenterVertically ) {app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/ExistenceContent.kt (1)
28-39: Preview 상태 타입을 파라미터 타입과 일치시키는 것을 권장합니다.
selectedIndex파라미터가Int?(nullable)로 선언되어 "선택 없음"을null로 표현하도록 설계되어 있습니다. 그러나 Preview에서는mutableIntStateOf(-1)을 사용하여-1로 "선택 없음"을 표현하고 있어 의미적 불일치가 있습니다.♻️ 타입 일관성을 위한 수정 제안
`@Preview`(showBackground = true) `@Composable` private fun ExistenceContentPreview() { CherrishTheme { - var selectedIndex by remember { mutableIntStateOf(-1) } + var selectedIndex by remember { mutableStateOf<Int?>(null) } ExistenceContent( selectedIndex = selectedIndex, onItemClick = { selectedIndex = it } ) } }추가로 import 필요:
import androidx.compose.runtime.mutableStateOfapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/CautionDescription.kt (1)
14-17: 하드코딩된 기본 텍스트를 문자열 리소스로 이동 권장기본
description값이 코드에 직접 하드코딩되어 있습니다. 다국어 지원(i18n)과 유지보수를 위해strings.xml리소스로 이동하는 것을 고려해 주세요.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/DowntimeContent.kt (1)
107-121: 아이템 간격 적용 방식 개선 제안각
ProcedureCard에modifier = Modifier.padding(top = 10.dp)를 적용하는 대신,LazyColumn의verticalArrangement를 사용하면 더 일관된 간격 관리가 가능합니다.♻️ 리팩토링 제안
LazyColumn( modifier = modifier.fillMaxWidth(), - contentPadding = PaddingValues(horizontal = 24.dp, vertical = 20.dp) + contentPadding = PaddingValues(horizontal = 24.dp, vertical = 20.dp), + verticalArrangement = Arrangement.spacedBy(10.dp) ) { // ... itemsIndexed( items = cardItems, key = { _, item -> item.id } ) { _, item -> ProcedureCard( name = item.name, category = item.category, minDowntimeDays = item.minDowntimeDays, maxDowntimeDays = item.maxDowntimeDays, onCardClick = { onCardClick(item.id) }, isSelected = selectedCardId == item.id, - displayMode = item.displayMode, - modifier = Modifier.padding(top = 10.dp) + displayMode = item.displayMode ) }단, 헤더 아이템과 카드 아이템 사이의 간격을 다르게 유지하려면 현재 방식이 더 적합할 수 있습니다.
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/CategoryContent.kt (1)
34-37: 불필요한 recomposition 시 리스트 재생성 가능성
items와selectedIndex계산이 매 recomposition마다 실행됩니다.worries리스트가 작다면 큰 문제는 아니지만,remember와derivedStateOf를 사용하면 불필요한 재계산을 방지할 수 있습니다.♻️ 최적화 제안
`@Composable` fun CategoryContent( worries: ImmutableList<ProcedureWorryUiModel>, selectedWorryId: Long?, onWorryClick: (Long) -> Unit ) { - val items = worries.map { it.content }.toImmutableList() - - val selectedIndex = worries.indexOfFirst { it.id == selectedWorryId } - .takeIf { it >= 0 } + val items = remember(worries) { + worries.map { it.content }.toImmutableList() + } + + val selectedIndex = remember(worries, selectedWorryId) { + worries.indexOfFirst { it.id == selectedWorryId }.takeIf { it >= 0 } + }app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.kt (1)
130-134: 내부 함수 파라미터명 일관성
ProcedureCardDuration의 파라미터명(minDowntimeDay,maxDowntimeDay)이 public API(minDowntimeDays,maxDowntimeDays)와 다릅니다. 일관성을 위해 통일하는 것을 고려해 보세요.♻️ 네이밍 일관성 제안
`@Composable` private fun ProcedureCardDuration( - minDowntimeDay: Int, - maxDowntimeDay: Int + minDowntimeDays: Int, + maxDowntimeDays: Int ) { Row( verticalAlignment = Alignment.CenterVertically ) { Icon( imageVector = ImageVector.vectorResource(id = R.drawable.ic_clock), contentDescription = null, tint = CherrishTheme.colors.gray700 ) Text( - text = "다운타임* $minDowntimeDay-${maxDowntimeDay}일", + text = "다운타임* $minDowntimeDays-${maxDowntimeDays}일", style = CherrishTheme.typography.body2R13, color = CherrishTheme.colors.gray700 ) } }app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringContent.kt (1)
87-87:ImmutableList사용 권장
cardItems파라미터가List<ProcedureCardItemUiModel>로 선언되어 있습니다.CategoryContent에서는ImmutableList를 사용하고 있으므로, 일관성과 Compose 안정성을 위해ImmutableList로 변경하는 것을 권장합니다.♻️ ImmutableList 사용 제안
+import kotlinx.collections.immutable.ImmutableList + `@Composable` fun FilteringContent( id: Long, name: String, - cardItems: List<ProcedureCardItemUiModel>, + cardItems: ImmutableList<ProcedureCardItemUiModel>, selectedCardId: Long?, onCardClick: (Long) -> Unit, modifier: Modifier = Modifier )mock 데이터도
persistentListOf로 변경:+import kotlinx.collections.immutable.persistentListOf + -private val mockProcedureCardItems = listOf( +private val mockProcedureCardItems = persistentListOf(
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
app/src/main/java/com/cherrish/android/core/designsystem/component/chip/CherrishSelectionChip.ktapp/src/main/java/com/cherrish/android/core/designsystem/component/textfield/CherrishTextField.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/CautionDescription.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureTitleSection.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/CategoryContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/DowntimeContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/ExistenceContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureCardItemUiModel.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureWorryUiModel.kt
🧰 Additional context used
📓 Path-based instructions (1)
**/*.kt
⚙️ CodeRabbit configuration file
**/*.kt: - Jetpack Compose 구조, 상태 관리, recomposition 최적화에 집중
- ViewModel, UiState, 단방향 데이터 흐름 패턴 검토
- 불필요한 recomposition 가능성, remember/derivedStateOf 적절한 사용 확인
- 네이밍 컨벤션, 가독성, Google 권장 Android 아키텍처 준수 여부
Files:
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/CategoryContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureWorryUiModel.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/CautionDescription.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureCardItemUiModel.ktapp/src/main/java/com/cherrish/android/core/designsystem/component/chip/CherrishSelectionChip.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/DowntimeContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureTitleSection.ktapp/src/main/java/com/cherrish/android/core/designsystem/component/textfield/CherrishTextField.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/ExistenceContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringContent.kt
🧠 Learnings (3)
📚 Learning: 2026-01-12T19:49:27.085Z
Learnt from: nhyeonii
Repo: TEAM-Cherrish/Cherrish-Android PR: 41
File: app/src/main/java/com/cherrish/android/presentation/challenge/ChallengeScreen.kt:30-39
Timestamp: 2026-01-12T19:49:27.085Z
Learning: When a Jetpack Compose screen composable receives a Scaffold paddingValues: PaddingValues parameter (commonly from Scaffold), apply it to the root container's modifier first (e.g., .padding(paddingValues)) before applying any additional padding. This ensures content respects system bars (status/navigation) and avoids layout overlap. This pattern should be followed across presentation screens under app/src/main/java/com/cherrish/android/presentation/ to maintain consistent insets handling.
Applied to files:
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/CategoryContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureWorryUiModel.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/CautionDescription.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureCardItemUiModel.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/DowntimeContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureTitleSection.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/ExistenceContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.ktapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringContent.kt
📚 Learning: 2026-01-09T08:25:52.533Z
Learnt from: nhyeonii
Repo: TEAM-Cherrish/Cherrish-Android PR: 14
File: app/src/main/java/com/cherrish/android/core/designsystem/component/chip/CherrishSelction.kt:1-1
Timestamp: 2026-01-09T08:25:52.533Z
Learning: Enforce that the Kotlin file name under the design system chip package matches the main Jetpack Compose function name defined in that file. For example, CherrishBasicChip.kt should declare a top-level composable function named CherrishBasicChip. If the file name and main composable name do not align, flag for refactor. This improves consistency and discovery across the Android codebase (TEAM-Cherrish/Cherrish-Android).
Applied to files:
app/src/main/java/com/cherrish/android/core/designsystem/component/chip/CherrishSelectionChip.kt
📚 Learning: 2026-01-12T19:49:27.085Z
Learnt from: nhyeonii
Repo: TEAM-Cherrish/Cherrish-Android PR: 41
File: app/src/main/java/com/cherrish/android/presentation/challenge/ChallengeScreen.kt:30-39
Timestamp: 2026-01-12T19:49:27.085Z
Learning: In the Cherrish-Android codebase, Screen composables that receive a `paddingValues: PaddingValues` parameter from Scaffold must apply it to their root container's modifier (e.g., `.padding(paddingValues)`) before applying additional padding, to avoid layout overlap with system bars.
Applied to files:
app/src/main/java/com/cherrish/android/core/designsystem/component/textfield/CherrishTextField.kt
🧬 Code graph analysis (6)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/CategoryContent.kt (2)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/SelectionSection.kt (1)
SelectionSection(26-53)app/src/main/java/com/cherrish/android/core/designsystem/theme/Theme.kt (1)
CherrishTheme(38-61)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.kt (4)
app/src/main/java/com/cherrish/android/presentation/calendar/component/ProcedureSearchTextField.kt (1)
ProcedureTextField(30-85)app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/CautionDescription.kt (1)
CautionDescription(13-35)app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.kt (1)
ProcedureCard(37-86)app/src/main/java/com/cherrish/android/core/designsystem/theme/Theme.kt (1)
CherrishTheme(38-61)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/DowntimeContent.kt (3)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.kt (1)
ProcedureCard(37-86)app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/CautionDescription.kt (1)
CautionDescription(13-35)app/src/main/java/com/cherrish/android/core/designsystem/theme/Theme.kt (1)
CherrishTheme(38-61)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureTitleSection.kt (1)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/CautionDescription.kt (1)
CautionDescription(13-35)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.kt (3)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/SelectionSection.kt (1)
SelectionSection(26-53)app/src/main/java/com/cherrish/android/core/designsystem/component/textfield/CherrishTextField.kt (1)
CherrishTextField(30-89)app/src/main/java/com/cherrish/android/core/designsystem/theme/Theme.kt (1)
CherrishTheme(38-61)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringContent.kt (3)
app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureTitleSection.kt (1)
ProcedureTitleSection(16-39)app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.kt (1)
ProcedureCard(37-86)app/src/main/java/com/cherrish/android/core/designsystem/theme/Theme.kt (1)
CherrishTheme(38-61)
⏰ 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: PR Lint Check
- GitHub Check: PR Build Check
🔇 Additional comments (16)
app/src/main/java/com/cherrish/android/core/designsystem/component/chip/CherrishSelectionChip.kt (2)
18-43: LGTM!타이포그래피 스타일을
CherrishTheme.typography.body1SB14로 변경하여 디자인 시스템의 테마 일관성을 유지하고 있습니다. PR 전반의 테마 정리 방향과 잘 맞습니다. 파일명(CherrishSelectionChip.kt)과 메인 컴포저블 함수명(CherrishSelectionChip)이 일치하여 네이밍 컨벤션도 준수하고 있습니다. (Based on learnings)
45-59: LGTM!프리뷰 함수에서
remember와mutableStateOf를 적절히 사용하여 상태 관리가 잘 되어 있고,CherrishTheme으로 감싸 테마 적용도 올바르게 되어 있습니다.app/src/main/java/com/cherrish/android/core/designsystem/component/textfield/CherrishTextField.kt (2)
72-86: placeholder의fillMaxWidth()추가는 적절합니다.placeholder Text에
Modifier.fillMaxWidth()를 추가하여 TextField가 특정 너비를 가질 때 placeholder가 전체 너비를 차지하도록 개선한 점이 좋습니다.다만, 일관성을 위해
innerTextField()도 동일한 너비 동작을 보장하도록 고려해볼 수 있습니다. 현재 구현에서는 실제 입력 텍스트와 placeholder의 레이아웃 동작이 미세하게 다를 수 있습니다. 만약 입력 중에도 동일한 너비 동작이 필요하다면, decorationBox 내부 Box에fillMaxWidth()를 적용하는 방식도 검토해 보세요.
47-49:remember를 활용한 recomposition 최적화가 적절합니다.
inputTextStyle과inputTextColor를 key로 사용하여 불필요한TextStyle객체 생성을 방지하고 있습니다. Compose 최적화 모범 사례를 잘 따르고 있습니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/RecoveryScheduleContent.kt (2)
84-139: LGTM!
ScheduleSettingSection은 관심사 분리가 잘 되어있고, state hoisting 패턴을 올바르게 적용했습니다. CherrishTheme 스타일링도 일관되게 사용되었습니다.
179-223: LGTM!두 가지 시나리오(선택 전/후)를 커버하는 프리뷰 함수들이 잘 구성되어 있습니다.
CherrishTheme으로 감싸고 interactive state를 사용한 점이 좋습니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/ExistenceContent.kt (2)
1-11: 패키지 및 import 구성이 적절합니다.
persistentListOf를 위한kotlinx.collections.immutable사용은 Compose에서 불필요한 recomposition을 방지하는 좋은 패턴입니다.
13-26: 컴포넌트 구현이 깔끔합니다.
SelectionSection을 재사용하여 간결하게 구현했고,persistentListOf를 사용하여 안정적인 리스트를 전달하는 것이 좋습니다. 단방향 데이터 흐름 패턴도 잘 적용되어 있습니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureWorryUiModel.kt (1)
1-6: LGTM!간결하고 적절한 UI 모델 정의입니다.
CategoryContent에서 worry 항목을 렌더링하는 데 필요한 속성들이 잘 정의되어 있습니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/model/ProcedureCardItemUiModel.kt (1)
1-10: LGTM!
ProcedureCard컴포저블에 필요한 속성들이 잘 정의된 UI 모델입니다. 여러 content 컴포넌트에서 재사용되는 공통 모델로 적합합니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringWithSearchContent.kt (1)
119-133: LGTM!
itemsIndexed에key함수를 사용하여 안정적인 아이템 식별을 제공하고 있습니다. 이는 리스트 아이템의 recomposition 최적화에 도움이 됩니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/DowntimeContent.kt (1)
85-132: LGTM!
DowntimeContent의 전체 구조가 잘 구성되어 있습니다:
- 안내 텍스트 헤더
itemsIndexed와key함수를 사용한 최적화된 리스트 렌더링- 맥락에 맞는 커스텀
CautionDescriptionapp/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/CategoryContent.kt (1)
28-50: LGTM!
CategoryContent의 전체 구조가 깔끔합니다.ImmutableList사용과 단방향 데이터 흐름 패턴(onWorryClick콜백)이 적절하게 적용되어 있습니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureTitleSection.kt (1)
41-61: LGTM!
ProcedureTitleWithCaution추출이 잘 되어 있고,CautionDescription컴포넌트 재사용이 적절합니다. 레이아웃 구조와 스타일링이 일관성 있게 적용되어 있습니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/component/ProcedureCard.kt (1)
38-46: LGTM!파라미터명 변경(
name,category,minDowntimeDays,maxDowntimeDays)이 서버 응답 스펙 및ProcedureCardItemUiModel과 일관성 있게 적용되었습니다.app/src/main/java/com/cherrish/android/presentation/calendar/procedure/content/FilteringContent.kt (1)
92-123: LGTM!
LazyColumn구조가 적절합니다.itemsIndexed에key를 제공하여 아이템 안정성을 보장하고 있으며, 헤더 콘텐츠를item {}블록으로 분리한 것도 좋습니다.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
hyeminililo
left a comment
There was a problem hiding this comment.
수고하셨습니다 궁금 한 것 답변 부탁드릴게용ㅇ ~~ !!
|
|
||
| itemsIndexed( | ||
| items = cardItems, | ||
| key = { _, item -> item.id } |
There was a problem hiding this comment.
P2: index를 사용하지 않는데, 적은 이유가 있을까요 ?
items(
items = cardItems,
key = { it.id }
)
There was a problem hiding this comment.
앗 !! 원래 index 기반으로 구현했다가 API 명세서 기준으로 id 기반 목데이터 적용하면서 index를 더 이상 사용하지 않게 되엇네용 !! 수정하겠습니당 ~~
| ProcedureTextField( | ||
| value = text, | ||
| onValueChange = { text = it }, | ||
| onSearchAction = {}, |
There was a problem hiding this comment.
P4: 이것은 따로 빼지 않은 이유가 있을까요 ?? 궁금합니다 !!
|
|
||
| itemsIndexed( | ||
| items = cardItems, | ||
| key = { _, item -> item.id } |
There was a problem hiding this comment.
P2: 이것도 index 사용하지 않으니 it을 사용해보는건 어떨까용 ??
| ) { | ||
| Text( | ||
| text = text, | ||
| style = CherrishTheme.typography.body1SB14, |
There was a problem hiding this comment.
p1: 폰트 틀렸습니다...................................................................................................................................
| color = placeholderTextColor, | ||
| style = placeholderTextStyle | ||
| style = placeholderTextStyle, | ||
| modifier = Modifier.fillMaxWidth() |
There was a problem hiding this comment.
p3: (단순 궁금) 이거 없애도 되지 않나여??
There was a problem hiding this comment.
이거 없애면 텍스트 필드 placeholder 가운데 정렬이 안먹더라구용.. 그대로 두겟습니다!
placeholderTextStyle = CherrishTheme.typography.title2R16.copy(
textAlign = TextAlign.Center
),
| ProcedureCardTitle( | ||
| title = title, | ||
| description = description, | ||
| title = name, |
There was a problem hiding this comment.
p3: 개인적인 건의 사항..ㅎㅎㅎ
name 대신에 procedureName 어떠신가요??
| ) | ||
|
|
||
| ProcedureTitleWithCaution( | ||
| content = content |
There was a problem hiding this comment.
p1999: 저는 잘 모르겠는데..ㅜㅜ 저의 이해력의 문제니 거의 공부를 더 해오도록 하겠스빈다!
There was a problem hiding this comment.
worryName으로 바꿔드렷습니다 베이비
| item { | ||
| Text( | ||
| text = "필요에 맞게 다운타임을 조정할 수 있어요.", | ||
| style = CherrishTheme.typography.title1SB18 |
|
|
||
| @Composable | ||
| fun DowntimeContent( | ||
| cardItems: List<ProcedureCardItemUiModel>, |
| contentPadding = PaddingValues(horizontal = 24.dp, vertical = 20.dp) | ||
| ) { | ||
| item { | ||
| Text( |
There was a problem hiding this comment.
p3: 이거 스크롤 영역 티엘님한테 한 번 확인 하셔야 될 것 같아요~!!
There was a problem hiding this comment.
이미 확인하고 구현햇습니다!! 소히 베이비
| import com.cherrish.android.presentation.calendar.procedure.model.ProcedureCardDisplayMode | ||
| import com.cherrish.android.presentation.calendar.procedure.model.ProcedureCardItemUiModel | ||
|
|
||
| /* TODO: 삭제 예정 */ |
There was a problem hiding this comment.
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
|
|
||
| AnimatedVisibility( | ||
| visible = hasSelection, | ||
| enter = fadeIn() + expandVertically(), |
There was a problem hiding this comment.
p3: (단순 궁금) 여기 애니메이션 구현인건가요??
There was a problem hiding this comment.
생각해보니 그냥 단순한게 좋을 것 같아서 애니 대신에 조건부 렌더링으로 수정햇슴둥.
| ProcedureTextField( | ||
| value = text, | ||
| onValueChange = { text = it }, | ||
| onSearchAction = {}, |
nhyeonii
left a comment
There was a problem hiding this comment.
와웅 넘 잘하는데 ?!?!! 리뷰 몇개만 확인하고 수정 부악드려용이 ~~~~ 고생해써 ~~~~~
| val clickedId = worries[index].id | ||
| onWorryClick(clickedId) |
There was a problem hiding this comment.
| val clickedId = worries[index].id | |
| onWorryClick(clickedId) | |
| onWorryClick(worries[index].id) |
P3 : 요정도는 바로 써줘도 괜찮을거 가트요 ㅎㅎㅎㅎㅎㅎㅎ
|
|
||
| @Composable | ||
| fun DowntimeContent( | ||
| cardItems: List<ProcedureCardItemUiModel>, |
There was a problem hiding this comment.
| cardItems: List<ProcedureCardItemUiModel>, | |
| cardItems: ImmutableList<ProcedureCardItemUiModel>, |
P1 : immutableList 사용해주셍요 ~~
| Text( | ||
| text = "필요에 맞게 다운타임을 조정할 수 있어요.", | ||
| style = CherrishTheme.typography.title1SB18 | ||
| ) |
There was a problem hiding this comment.
P1 : 여기 컬러 지정해줘야 할 거 가트융 ~~
There was a problem hiding this comment.
헉스 ! !! !
수정하겟습니다!
| onItemClick: (Int) -> Unit | ||
| ) { | ||
| SelectionSection( | ||
| title = "시술 일정을 추가해볼게요.", |
There was a problem hiding this comment.
오호.... 이걸 못보다니
수정하겠습니당나귀
| @Composable | ||
| fun FilteringContent( | ||
| name: String, | ||
| cardItems: List<ProcedureCardItemUiModel>, |
There was a problem hiding this comment.
| cardItems: List<ProcedureCardItemUiModel>, | |
| cardItems: ImmutableList<ProcedureCardItemUiModel>, |
P1 : 여기도 !!
| ) { | ||
| ProcedureTextField( | ||
| value = text, | ||
| onValueChange = { text = it }, |
There was a problem hiding this comment.
P1 : 요 onValueChanege두 상태 호이스팅 해쥬세용 ~~~~
| ProcedureTextField( | ||
| value = text, | ||
| onValueChange = { text = it }, | ||
| onSearchAction = {}, |
| } | ||
|
|
||
| @Composable | ||
| private fun DateInputBasicRow( |
There was a problem hiding this comment.
| private fun DateInputBasicRow( | |
| private fun DateInputBasicSection |
P2 : 요 이름은 어때요잉 ?!?
| @@ -0,0 +1,10 @@ | |||
| package com.cherrish.android.presentation.calendar.procedure.model | |||
|
|
|||
There was a problem hiding this comment.
P1 : @immutable 어노테이션 붙여줍시닿ㅎ @immutable 어노테이션은 해당 클래스가 완전히 불변이며 내부 프로퍼티가 변경되지 않는다는 것을 컴포즈에 알려주는 역할을 해용 !!! 얘를 통해서 같은 인스턴스가 전달될 경우 상태가 변하지 않았다고 판단하여 불필요한 리컴포지션을 스킵할 수 잇답니닿 ㅎㅎㅎㅎ
| @@ -0,0 +1,6 @@ | |||
| package com.cherrish.android.presentation.calendar.procedure.model | |||
|
|
|||





Related issue 🛠
Work Description ✏️
Screenshot 📸
Uncompleted Tasks 😅
N/A
To Reviewers 📢
시술 플로우 컨텐트들을 구현햇으용 API 연결이 필요한 컨텐트들은 API 명세서 스펙에 맞춰 목데이터를 적용해두었습니다!!
수정할 부분들이 많을 것으로 예상됩니도.... 편하게 많이 코멘트 주세요!!
야르
Summary by CodeRabbit
새로운 기능
개선사항
✏️ Tip: You can customize this high-level summary in your review settings.