Skip to content

Commit 02db0f7

Browse files
committed
Refactor: 루틴 완료 토글 로직 상태 호이스팅
- 루틴/서브루틴 완료 여부를 토글할 때, 기존의 isCompleted Boolean 값을 직접 전달하는 방식에서 파라미터 없이 호출하는 방식으로 변경
1 parent e401a09 commit 02db0f7

7 files changed

Lines changed: 39 additions & 42 deletions

File tree

data/src/main/java/com/threegap/bitnagil/data/routine/model/response/RoutineDto.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ fun RoutineDto.toDomain(): Routine =
4141
repeatDays = this.repeatDay.map { DayOfWeek.fromString(it) },
4242
executionTime = this.executionTime,
4343
routineDate = this.routineDate,
44-
isComplete = this.routineCompleteYn,
44+
isCompleted = this.routineCompleteYn,
4545
subRoutineNames = this.subRoutineNames,
4646
subRoutineIsCompleted = this.subRoutineCompleteYn,
4747
recommendedRoutineType = RecommendedRoutineType.fromString(this.recommendedRoutineType),

presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,11 @@ fun HomeScreenContainer(
7777
onNextWeekClick = {
7878
viewModel.sendIntent(HomeIntent.OnNextWeekClick)
7979
},
80-
onRoutineCompletionToggle = { routineId, isCompleted ->
81-
viewModel.toggleRoutineCompletion(routineId, isCompleted)
80+
onRoutineCompletionToggle = { routineId ->
81+
viewModel.toggleRoutineCompletion(routineId)
8282
},
83-
onSubRoutineCompletionToggle = { routineId, subRoutineIndex, isCompleted ->
84-
viewModel.toggleSubRoutineCompletion(routineId, subRoutineIndex, isCompleted)
83+
onSubRoutineCompletionToggle = { routineId, subRoutineIndex ->
84+
viewModel.toggleSubRoutineCompletion(routineId, subRoutineIndex)
8585
},
8686
onHelpClick = {
8787
viewModel.sendIntent(HomeIntent.OnHelpClick)
@@ -104,8 +104,8 @@ private fun HomeScreen(
104104
onDateSelect: (LocalDate) -> Unit,
105105
onPreviousWeekClick: () -> Unit,
106106
onNextWeekClick: () -> Unit,
107-
onRoutineCompletionToggle: (String, Boolean) -> Unit,
108-
onSubRoutineCompletionToggle: (String, Int, Boolean) -> Unit,
107+
onRoutineCompletionToggle: (String) -> Unit,
108+
onSubRoutineCompletionToggle: (String, Int) -> Unit,
109109
onHelpClick: () -> Unit,
110110
onRegisterRoutineClick: () -> Unit,
111111
onRegisterEmotionClick: () -> Unit,
@@ -187,11 +187,9 @@ private fun HomeScreen(
187187
) { routine ->
188188
RoutineSection(
189189
routine = routine,
190-
onRoutineToggle = { isCompleted ->
191-
onRoutineCompletionToggle(routine.id, isCompleted)
192-
},
193-
onSubRoutineToggle = { subRoutineIndex, isCompleted ->
194-
onSubRoutineCompletionToggle(routine.id, subRoutineIndex, isCompleted)
190+
onRoutineToggle = { onRoutineCompletionToggle(routine.id) },
191+
onSubRoutineToggle = { subRoutineIndex ->
192+
onSubRoutineCompletionToggle(routine.id, subRoutineIndex)
195193
},
196194
)
197195
}
@@ -217,8 +215,8 @@ private fun HomeScreenPreview() {
217215
onDateSelect = {},
218216
onPreviousWeekClick = {},
219217
onNextWeekClick = {},
220-
onRoutineCompletionToggle = { _, _ -> },
221-
onSubRoutineCompletionToggle = { _, _, _ -> },
218+
onRoutineCompletionToggle = { _ -> },
219+
onSubRoutineCompletionToggle = { _, _ -> },
222220
onHelpClick = {},
223221
onRegisterRoutineClick = {},
224222
onRegisterEmotionClick = {},

presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeViewModel.kt

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ class HomeViewModel @Inject constructor(
9999
}
100100

101101
is HomeIntent.OnRoutineCompletionToggle -> {
102-
updateMainRoutine(state, intent.routineId, intent.isCompleted)
102+
updateMainRoutine(state, intent.routineId)
103103
}
104104

105105
is HomeIntent.OnSubRoutineCompletionToggle -> {
106-
updateSubRoutine(state, intent.routineId, intent.subRoutineIndex, intent.isCompleted)
106+
updateSubRoutine(state, intent.routineId, intent.subRoutineIndex)
107107
}
108108

109109
is HomeIntent.LoadTodayEmotion -> {
@@ -238,19 +238,19 @@ class HomeViewModel @Inject constructor(
238238
}
239239
}
240240

241-
fun toggleRoutineCompletion(routineId: String, isCompleted: Boolean) {
241+
fun toggleRoutineCompletion(routineId: String) {
242242
val originalState = container.stateFlow.value
243-
sendIntent(HomeIntent.OnRoutineCompletionToggle(routineId, isCompleted))
243+
sendIntent(HomeIntent.OnRoutineCompletionToggle(routineId))
244244

245-
val predictedUpdatedState = updateMainRoutine(originalState, routineId, isCompleted)
245+
val predictedUpdatedState = updateMainRoutine(originalState, routineId)
246246
processRoutineToggleChanges(originalState, predictedUpdatedState)
247247
}
248248

249-
fun toggleSubRoutineCompletion(routineId: String, subRoutineIndex: Int, isCompleted: Boolean) {
249+
fun toggleSubRoutineCompletion(routineId: String, subRoutineIndex: Int) {
250250
val originalState = container.stateFlow.value
251-
sendIntent(HomeIntent.OnSubRoutineCompletionToggle(routineId, subRoutineIndex, isCompleted))
251+
sendIntent(HomeIntent.OnSubRoutineCompletionToggle(routineId, subRoutineIndex))
252252

253-
val predictedUpdatedState = updateSubRoutine(originalState, routineId, subRoutineIndex, isCompleted)
253+
val predictedUpdatedState = updateSubRoutine(originalState, routineId, subRoutineIndex)
254254
processRoutineToggleChanges(originalState, predictedUpdatedState)
255255
}
256256

@@ -281,16 +281,17 @@ class HomeViewModel @Inject constructor(
281281
private fun updateMainRoutine(
282282
state: HomeState,
283283
routineId: String,
284-
isCompleted: Boolean,
285284
): HomeState {
286285
return updateRoutinesForDate(state) { routinesForDate ->
287286
val routineIndex = routinesForDate.indexOfFirst { it.id == routineId }
288287
if (routineIndex == -1) return@updateRoutinesForDate false
289288

290289
val routine = routinesForDate[routineIndex]
290+
val newIsCompleted = !routine.isCompleted
291+
291292
val updatedRoutine = routine.copy(
292-
isCompleted = isCompleted,
293-
subRoutineIsCompleted = routine.subRoutineIsCompleted.map { isCompleted },
293+
isCompleted = newIsCompleted,
294+
subRoutineIsCompleted = routine.subRoutineIsCompleted.map { newIsCompleted },
294295
)
295296

296297
routinesForDate[routineIndex] = updatedRoutine
@@ -302,20 +303,20 @@ class HomeViewModel @Inject constructor(
302303
state: HomeState,
303304
routineId: String,
304305
subRoutineIndex: Int,
305-
isCompleted: Boolean,
306306
): HomeState {
307307
return updateRoutinesForDate(state) { routinesForDate ->
308308
val routineIndex = routinesForDate.indexOfFirst { it.id == routineId }
309309
if (routineIndex == -1) return@updateRoutinesForDate false
310310

311311
val routine = routinesForDate[routineIndex]
312+
val newIsCompleted = !routine.subRoutineIsCompleted[subRoutineIndex]
312313

313314
if (subRoutineIndex !in routine.subRoutineIsCompleted.indices) {
314315
return@updateRoutinesForDate false
315316
}
316317

317318
val updatedSubRoutineCompleteYn = routine.subRoutineIsCompleted.toMutableList().also {
318-
it[subRoutineIndex] = isCompleted
319+
it[subRoutineIndex] = newIsCompleted
319320
}
320321

321322
val routineCompleted = updatedSubRoutineCompleteYn.all { it }

presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/RoutineItem.kt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import com.threegap.bitnagil.presentation.home.model.RoutineUiModel
2424
@Composable
2525
fun RoutineItem(
2626
routine: RoutineUiModel,
27-
onRoutineToggle: (Boolean) -> Unit,
28-
onSubRoutineToggle: (Int, Boolean) -> Unit,
27+
onRoutineToggle: () -> Unit,
28+
onSubRoutineToggle: (Int) -> Unit,
2929
modifier: Modifier = Modifier,
3030
) {
3131
Column(
@@ -43,7 +43,7 @@ fun RoutineItem(
4343
Row(
4444
modifier = Modifier
4545
.fillMaxWidth()
46-
.clickableWithoutRipple { onRoutineToggle(!routine.isCompleted) },
46+
.clickableWithoutRipple { onRoutineToggle() },
4747
horizontalArrangement = Arrangement.SpaceBetween,
4848
verticalAlignment = Alignment.CenterVertically,
4949
) {
@@ -73,9 +73,7 @@ fun RoutineItem(
7373
SubRoutinesItem(
7474
subRoutineNames = routine.subRoutineNames,
7575
subRoutineCompleteYn = routine.subRoutineIsCompleted,
76-
onSubRoutineToggle = { index, isCompleted ->
77-
onSubRoutineToggle(index, isCompleted)
78-
},
76+
onSubRoutineToggle = { index -> onSubRoutineToggle(index) },
7977
)
8078
}
8179
}
@@ -97,7 +95,7 @@ private fun RoutineItemPreview() {
9795
recommendedRoutineType = null,
9896
),
9997
onRoutineToggle = { },
100-
onSubRoutineToggle = { _, _ -> },
98+
onSubRoutineToggle = { _ -> },
10199
)
102100
}
103101

@@ -117,6 +115,6 @@ private fun NoneSubRoutineRoutineItemPreview() {
117115
recommendedRoutineType = null,
118116
),
119117
onRoutineToggle = {},
120-
onSubRoutineToggle = { _, _ -> },
118+
onSubRoutineToggle = { _ -> },
121119
)
122120
}

presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/SubRoutinesItem.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import com.threegap.bitnagil.designsystem.modifier.clickableWithoutRipple
2020
fun SubRoutinesItem(
2121
subRoutineNames: List<String>,
2222
subRoutineCompleteYn: List<Boolean>,
23-
onSubRoutineToggle: (Int, Boolean) -> Unit,
23+
onSubRoutineToggle: (Int) -> Unit,
2424
modifier: Modifier = Modifier,
2525
) {
2626
val minSize = minOf(subRoutineNames.size, subRoutineCompleteYn.size)
@@ -38,7 +38,7 @@ fun SubRoutinesItem(
3838
horizontalArrangement = Arrangement.spacedBy(10.dp),
3939
modifier = Modifier
4040
.fillMaxWidth()
41-
.clickableWithoutRipple { onSubRoutineToggle(index, !isCompleted) },
41+
.clickableWithoutRipple { onSubRoutineToggle(index) },
4242
) {
4343
BitnagilIcon(
4444
id = if (isCompleted) R.drawable.ic_check_circle else R.drawable.ic_check_default,
@@ -63,6 +63,6 @@ private fun SubRoutinesItemPreview() {
6363
SubRoutinesItem(
6464
subRoutineNames = listOf("물 마시기", "스트레칭하기", "심호흡하기"),
6565
subRoutineCompleteYn = listOf(true, false, true),
66-
onSubRoutineToggle = { _, _ -> },
66+
onSubRoutineToggle = { _ -> },
6767
)
6868
}

presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineSection.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import com.threegap.bitnagil.presentation.home.util.formatExecutionTime24Hour
1717
@Composable
1818
fun RoutineSection(
1919
routine: RoutineUiModel,
20-
onRoutineToggle: (Boolean) -> Unit,
21-
onSubRoutineToggle: (Int, Boolean) -> Unit,
20+
onRoutineToggle: () -> Unit,
21+
onSubRoutineToggle: (Int) -> Unit,
2222
modifier: Modifier = Modifier,
2323
) {
2424
Row(

presentation/src/main/java/com/threegap/bitnagil/presentation/home/model/HomeIntent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ sealed class HomeIntent : MviIntent {
99
data class LoadTodayEmotion(val emotion: TodayEmotionUiModel?) : HomeIntent()
1010
data class LoadWeeklyRoutines(val routines: RoutineScheduleUiModel) : HomeIntent()
1111
data class OnDateSelect(val date: LocalDate) : HomeIntent()
12-
data class OnRoutineCompletionToggle(val routineId: String, val isCompleted: Boolean) : HomeIntent()
13-
data class OnSubRoutineCompletionToggle(val routineId: String, val subRoutineIndex: Int, val isCompleted: Boolean) : HomeIntent()
12+
data class OnRoutineCompletionToggle(val routineId: String) : HomeIntent()
13+
data class OnSubRoutineCompletionToggle(val routineId: String, val subRoutineIndex: Int) : HomeIntent()
1414
data object RoutineToggleCompletionFailure : HomeIntent()
1515
data object OnHelpClick : HomeIntent()
1616
data object OnRegisterEmotionClick : HomeIntent()

0 commit comments

Comments
 (0)