Skip to content

Commit cd72e29

Browse files
committed
[REFACTOR/#212] Onboarding 단계 이동 시 currentRoute 파싱 대신 명시적 currentStep 인자로 대체
1 parent 34fd208 commit cd72e29

File tree

7 files changed

+22
-20
lines changed

7 files changed

+22
-20
lines changed

core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import androidx.compose.runtime.remember
55
import androidx.navigation.NavHostController
66
import androidx.navigation.NavOptions
77
import androidx.navigation.compose.rememberNavController
8-
import com.yapp.common.navigation.extensions.toRoute
98
import com.yapp.common.navigation.route.AlarmInteractionDestination
109
import com.yapp.common.navigation.route.FortuneBaseRoute
1110
import com.yapp.common.navigation.route.FortuneDestination
@@ -28,13 +27,13 @@ class OrbitNavigator(
2827
navController.navigate(OnboardingBaseRoute, navOptions)
2928
}
3029

31-
fun navigateToOnboardingNextStep(navOptions: NavOptions? = null) {
32-
val currentRoute = navController.currentBackStackEntry?.destination?.route ?: return
30+
fun navigateToOnboardingNextStep(currentStep: Int, navOptions: NavOptions? = null) {
31+
val nextRouteClass = OnboardingDestination.nextRoute(currentStep + 1) ?: return
3332

34-
val currentIndex = OnboardingDestination.routes.indexOfFirst { it.toRoute() == currentRoute }
35-
val nextRouteClass = OnboardingDestination.nextRoute(currentIndex + 1) ?: return
33+
val nextRouteInstance = nextRouteClass.objectInstance
34+
?: error("Cannot get object instance of route class: $nextRouteClass")
3635

37-
navController.navigate(nextRouteClass, navOptions)
36+
navController.navigate(nextRouteInstance, navOptions)
3837
}
3938

4039
fun navigateToAddAlarm(navOptions: NavOptions? = null) {

core/common/src/main/java/com/yapp/common/navigation/route/OnboardingRoute.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,33 @@ import kotlin.reflect.KClass
66
@Serializable
77
data object OnboardingBaseRoute
88

9-
sealed interface OnboardingDestination {
9+
sealed class OnboardingDestination {
1010
@Serializable
11-
data object Explain : OnboardingDestination
11+
data object Explain : OnboardingDestination()
1212

1313
@Serializable
14-
data object AlarmTimeSelection : OnboardingDestination
14+
data object AlarmTimeSelection : OnboardingDestination()
1515

1616
@Serializable
17-
data object Birthday : OnboardingDestination
17+
data object Birthday : OnboardingDestination()
1818

1919
@Serializable
20-
data object TimeOfBirth : OnboardingDestination
20+
data object TimeOfBirth : OnboardingDestination()
2121

2222
@Serializable
23-
data object Name : OnboardingDestination
23+
data object Name : OnboardingDestination()
2424

2525
@Serializable
26-
data object Gender : OnboardingDestination
26+
data object Gender : OnboardingDestination()
2727

2828
@Serializable
29-
data object Access : OnboardingDestination
29+
data object Access : OnboardingDestination()
3030

3131
@Serializable
32-
data object Complete1 : OnboardingDestination
32+
data object Complete1 : OnboardingDestination()
3333

3434
@Serializable
35-
data object Complete2 : OnboardingDestination
35+
data object Complete2 : OnboardingDestination()
3636

3737
companion object {
3838
val routes: List<KClass<out OnboardingDestination>> = listOf(

feature/navigator/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ dependencies {
1414
implementation(libs.orbit.core)
1515
implementation(libs.orbit.compose)
1616
implementation(libs.orbit.viewmodel)
17+
implementation(libs.kotlin.reflect)
1718
implementation(projects.feature.home)
1819
implementation(projects.feature.alarmInteraction)
1920
implementation(projects.feature.onboarding)

feature/onboarding/src/main/java/com/yapp/onboarding/OnboardingContract.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ sealed class OnboardingContract {
7272
}
7373

7474
sealed class SideEffect : com.yapp.ui.base.SideEffect {
75-
data object NavigateToNextStep : SideEffect()
75+
data class NavigateToNextStep(val currentStep: Int) : SideEffect()
7676

7777
data object NavigateBack : SideEffect()
7878

feature/onboarding/src/main/java/com/yapp/onboarding/OnboardingNavGraph.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ private fun handleSideEffect(
114114
viewModel: OnboardingViewModel,
115115
) {
116116
when (sideEffect) {
117-
OnboardingContract.SideEffect.NavigateToNextStep -> {
118-
navigator.navigateToOnboardingNextStep()
117+
is OnboardingContract.SideEffect.NavigateToNextStep -> {
118+
navigator.navigateToOnboardingNextStep(sideEffect.currentStep)
119119
}
120120

121121
OnboardingContract.SideEffect.NavigateBack -> {

feature/onboarding/src/main/java/com/yapp/onboarding/OnboardingViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class OnboardingViewModel @Inject constructor(
104104
if (nextRoute != null) {
105105
savedStateHandle["currentStep"] = nextStep
106106
updateState { copy(currentStep = nextStep) }
107-
emitSideEffect(OnboardingContract.SideEffect.NavigateToNextStep)
107+
emitSideEffect(OnboardingContract.SideEffect.NavigateToNextStep(currentStep))
108108
} else {
109109
emitSideEffect(OnboardingContract.SideEffect.OnboardingCompleted)
110110
}

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ amplitude-analytics = { group = "com.amplitude", name = "analytics-android", ver
182182

183183
play-services-ads = { group = "com.google.android.gms", name = "play-services-ads", version.ref = "playServicesAd" }
184184

185+
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
186+
185187
[plugins]
186188
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
187189
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

0 commit comments

Comments
 (0)