Skip to content

Commit c7499c5

Browse files
committed
Refacor: Guide MviviewModel 제거
1 parent ace38ff commit c7499c5

5 files changed

Lines changed: 43 additions & 63 deletions

File tree

presentation/src/main/java/com/threegap/bitnagil/presentation/guide/GuideScreen.kt

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.threegap.bitnagil.presentation.guide
22

3-
import androidx.compose.foundation.background
43
import androidx.compose.foundation.layout.Column
54
import androidx.compose.foundation.layout.Spacer
65
import androidx.compose.foundation.layout.fillMaxSize
@@ -14,24 +13,22 @@ import androidx.compose.ui.Modifier
1413
import androidx.compose.ui.tooling.preview.Preview
1514
import androidx.compose.ui.unit.dp
1615
import androidx.hilt.navigation.compose.hiltViewModel
17-
import androidx.lifecycle.compose.collectAsStateWithLifecycle
18-
import com.threegap.bitnagil.designsystem.BitnagilTheme
1916
import com.threegap.bitnagil.designsystem.component.block.BitnagilTopBar
20-
import com.threegap.bitnagil.presentation.common.flow.collectAsEffect
2117
import com.threegap.bitnagil.presentation.guide.component.atom.GuideButton
2218
import com.threegap.bitnagil.presentation.guide.component.template.GuideBottomSheet
23-
import com.threegap.bitnagil.presentation.guide.model.GuideIntent
2419
import com.threegap.bitnagil.presentation.guide.model.GuideSideEffect
2520
import com.threegap.bitnagil.presentation.guide.model.GuideType
21+
import org.orbitmvi.orbit.compose.collectAsState
22+
import org.orbitmvi.orbit.compose.collectSideEffect
2623

2724
@Composable
2825
fun GuideScreenContainer(
2926
navigateToBack: () -> Unit,
3027
viewModel: GuideViewModel = hiltViewModel(),
3128
) {
32-
val uiState by viewModel.container.stateFlow.collectAsStateWithLifecycle()
29+
val uiState by viewModel.collectAsState()
3330

34-
viewModel.sideEffectFlow.collectAsEffect { sideEffect ->
31+
viewModel.collectSideEffect { sideEffect ->
3532
when (sideEffect) {
3633
is GuideSideEffect.NavigateToBack -> navigateToBack()
3734
}
@@ -41,27 +38,25 @@ fun GuideScreenContainer(
4138
uiState.guideType?.let { guideType ->
4239
GuideBottomSheet(
4340
guideType = guideType,
44-
onDismissRequest = { viewModel.sendIntent(GuideIntent.OnHideGuideBottomSheet) },
41+
onDismissRequest = viewModel::onHideGuideBottomSheet,
4542
)
4643
}
4744
}
4845

4946
GuideScreen(
50-
onClickGuideButton = { viewModel.sendIntent(GuideIntent.OnClickGuideButton(it)) },
51-
onBackClick = { viewModel.sendIntent(GuideIntent.OnBackClick) },
47+
onClickGuideButton = viewModel::onShowGuideBottomSheet,
48+
onBackClick = viewModel::navigateToBack,
5249
)
5350
}
5451

5552
@Composable
5653
private fun GuideScreen(
5754
onClickGuideButton: (GuideType) -> Unit,
5855
onBackClick: () -> Unit,
59-
modifier: Modifier = Modifier,
6056
) {
6157
Column(
62-
modifier = modifier
58+
modifier = Modifier
6359
.fillMaxSize()
64-
.background(BitnagilTheme.colors.white)
6560
.statusBarsPadding(),
6661
) {
6762
BitnagilTopBar(
@@ -85,7 +80,7 @@ private fun GuideScreen(
8580
}
8681
}
8782

88-
@Preview
83+
@Preview(showBackground = true)
8984
@Composable
9085
private fun GuideScreenPreview() {
9186
GuideScreen(
Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,39 @@
11
package com.threegap.bitnagil.presentation.guide
22

3-
import androidx.lifecycle.SavedStateHandle
4-
import com.threegap.bitnagil.presentation.common.mviviewmodel.MviViewModel
5-
import com.threegap.bitnagil.presentation.guide.model.GuideIntent
3+
import androidx.lifecycle.ViewModel
64
import com.threegap.bitnagil.presentation.guide.model.GuideSideEffect
75
import com.threegap.bitnagil.presentation.guide.model.GuideState
6+
import com.threegap.bitnagil.presentation.guide.model.GuideType
87
import dagger.hilt.android.lifecycle.HiltViewModel
9-
import org.orbitmvi.orbit.syntax.Syntax
8+
import org.orbitmvi.orbit.Container
9+
import org.orbitmvi.orbit.ContainerHost
10+
import org.orbitmvi.orbit.viewmodel.container
1011
import javax.inject.Inject
1112

1213
@HiltViewModel
13-
class GuideViewModel @Inject constructor(
14-
savedStateHandle: SavedStateHandle,
15-
) : MviViewModel<GuideState, GuideSideEffect, GuideIntent>(
16-
initState = GuideState(),
17-
savedStateHandle = savedStateHandle,
18-
) {
19-
override suspend fun Syntax<GuideState, GuideSideEffect>.reduceState(
20-
intent: GuideIntent,
21-
state: GuideState,
22-
): GuideState? {
23-
val newState = when (intent) {
24-
is GuideIntent.OnClickGuideButton -> {
25-
state.copy(
26-
guideType = intent.guideType,
27-
guideBottomSheetVisible = true,
28-
)
29-
}
14+
class GuideViewModel @Inject constructor() : ContainerHost<GuideState, GuideSideEffect>, ViewModel() {
15+
16+
override val container: Container<GuideState, GuideSideEffect> = container(initialState = GuideState.INIT)
3017

31-
is GuideIntent.OnHideGuideBottomSheet -> {
32-
state.copy(
33-
guideType = null,
34-
guideBottomSheetVisible = false,
35-
)
18+
fun onShowGuideBottomSheet(guideType: GuideType) {
19+
intent {
20+
reduce {
21+
state.copy(guideType = guideType, guideBottomSheetVisible = true)
3622
}
23+
}
24+
}
3725

38-
is GuideIntent.OnBackClick -> {
39-
sendSideEffect(GuideSideEffect.NavigateToBack)
40-
null
26+
fun onHideGuideBottomSheet() {
27+
intent {
28+
reduce {
29+
state.copy(guideType = null, guideBottomSheetVisible = false)
4130
}
4231
}
32+
}
4333

44-
return newState
34+
fun navigateToBack() {
35+
intent {
36+
postSideEffect(GuideSideEffect.NavigateToBack)
37+
}
4538
}
4639
}

presentation/src/main/java/com/threegap/bitnagil/presentation/guide/model/GuideIntent.kt

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.threegap.bitnagil.presentation.guide.model
22

3-
import com.threegap.bitnagil.presentation.common.mviviewmodel.MviSideEffect
4-
5-
sealed interface GuideSideEffect : MviSideEffect {
3+
sealed interface GuideSideEffect {
64
data object NavigateToBack : GuideSideEffect
75
}
Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package com.threegap.bitnagil.presentation.guide.model
22

3-
import com.threegap.bitnagil.presentation.common.mviviewmodel.MviState
4-
import kotlinx.parcelize.Parcelize
5-
6-
@Parcelize
73
data class GuideState(
8-
val guideType: GuideType? = null,
9-
val guideBottomSheetVisible: Boolean = false,
10-
) : MviState
4+
val guideType: GuideType?,
5+
val guideBottomSheetVisible: Boolean,
6+
) {
7+
companion object {
8+
val INIT = GuideState(
9+
guideType = null,
10+
guideBottomSheetVisible = false,
11+
)
12+
}
13+
}

0 commit comments

Comments
 (0)