Skip to content

Commit

Permalink
[CHORE]#29: SideEffect으로 대체
Browse files Browse the repository at this point in the history
  • Loading branch information
flash159483 committed Jul 16, 2024
1 parent bf662b2 commit 497f69c
Show file tree
Hide file tree
Showing 11 changed files with 163 additions and 75 deletions.
17 changes: 0 additions & 17 deletions app/src/main/kotlin/com/bff/wespot/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,7 @@ class MainActivity : ComponentActivity() {
super.onCreate(savedInstanceState)

setContent {
val navController = rememberNavController()
val engine = rememberNavHostEngine()
val viewModel: AuthViewModel = viewModel()

WeSpotTheme {
Surface(
modifier = Modifier.fillMaxSize(),
) {
DestinationsNavHost(
navGraph = NavGraphs.root,
navController = navController,
engine = engine,
dependenciesContainerBuilder = {
dependency(viewModel)
},
)
}
}
}
}
}
79 changes: 78 additions & 1 deletion feature/auth/src/main/kotlin/com/bff/wespot/auth/AuthActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,87 @@ package com.bff.wespot.auth

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Surface
import androidx.compose.ui.Modifier
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.rememberNavController
import com.bff.wespot.auth.screen.NavGraphs
import com.bff.wespot.auth.screen.destinations.ClassScreenDestination
import com.bff.wespot.auth.screen.destinations.CompleteScreenDestination
import com.bff.wespot.auth.screen.destinations.EditScreenDestination
import com.bff.wespot.auth.screen.destinations.GenderScreenDestination
import com.bff.wespot.auth.screen.destinations.GradeScreenDestination
import com.bff.wespot.auth.screen.destinations.NameScreenDestination
import com.bff.wespot.auth.screen.destinations.SchoolScreenDestination
import com.bff.wespot.auth.state.AuthSideEffect
import com.bff.wespot.auth.viewmodel.AuthViewModel
import com.bff.wespot.designsystem.theme.WeSpotTheme
import com.ramcosta.composedestinations.DestinationsNavHost
import com.ramcosta.composedestinations.navigation.dependency
import com.ramcosta.composedestinations.navigation.navigate
import com.ramcosta.composedestinations.rememberNavHostEngine
import org.orbitmvi.orbit.compose.collectSideEffect

class AuthActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContent {
val navController = rememberNavController()
val engine = rememberNavHostEngine()
val viewModel: AuthViewModel = viewModel()

viewModel.collectSideEffect {
when (it) {
AuthSideEffect.PopBackStack -> navController.popBackStack()
is AuthSideEffect.NavigateToGradeScreen -> {
navController.navigate(GradeScreenDestination(it.edit))
}

is AuthSideEffect.NavigateToSchoolScreen -> {
navController.navigate(SchoolScreenDestination(it.edit))
}

is AuthSideEffect.NavigateToClassScreen -> {
navController.navigate(ClassScreenDestination(it.edit))
}

is AuthSideEffect.NavigateToGenderScreen -> {
navController.navigate(GenderScreenDestination(it.edit))
}

is AuthSideEffect.NavigateToNameScreen -> {
navController.navigate(NameScreenDestination(it.edit))
}

AuthSideEffect.NavigateToEditScreen -> {
navController.navigate(EditScreenDestination)
}

AuthSideEffect.NavigateToCompleteScreen -> {
navController.navigate(CompleteScreenDestination, navOptionsBuilder = {
popUpTo(SchoolScreenDestination.route) { inclusive = true }
})
}
}
}


WeSpotTheme {
Surface(
modifier = Modifier.fillMaxSize(),
) {
DestinationsNavHost(
navGraph = NavGraphs.root,
navController = navController,
engine = engine,
dependenciesContainerBuilder = {
dependency(viewModel)
},
)
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,15 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.unit.dp
import com.bff.wespot.auth.R
import com.bff.wespot.auth.screen.destinations.GenderScreenDestination
import com.bff.wespot.auth.state.AuthAction
import com.bff.wespot.auth.state.NavigationAction
import com.bff.wespot.auth.viewmodel.AuthViewModel
import com.bff.wespot.designsystem.component.button.WSButton
import com.bff.wespot.designsystem.component.header.WSTopBar
import com.bff.wespot.designsystem.component.input.WsTextField
import com.bff.wespot.designsystem.theme.StaticTypeScale
import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.delay
import org.orbitmvi.orbit.compose.collectAsState

Expand All @@ -42,7 +41,6 @@ import org.orbitmvi.orbit.compose.collectAsState
fun ClassScreen(
viewModel: AuthViewModel,
edit: Boolean,
navigator: DestinationsNavigator,
) {
val keyboard = LocalSoftwareKeyboardController.current

Expand All @@ -56,7 +54,7 @@ fun ClassScreen(
title = stringResource(id = R.string.register),
canNavigateBack = true,
navigateUp = {
navigator.navigateUp()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
},
)
},
Expand Down Expand Up @@ -120,10 +118,10 @@ fun ClassScreen(
WSButton(
onClick = {
if (edit) {
navigator.popBackStack()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
return@WSButton
}
navigator.navigate(GenderScreenDestination(edit = false))
action(AuthAction.Navigation(NavigationAction.NavigateToGenderScreen(false)))
},
text = stringResource(
id = if (edit) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,9 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavOptions
import com.bff.wespot.auth.R
import com.bff.wespot.auth.screen.destinations.ClassScreenDestination
import com.bff.wespot.auth.screen.destinations.CompleteScreenDestination
import com.bff.wespot.auth.screen.destinations.GenderScreenDestination
import com.bff.wespot.auth.screen.destinations.GradeScreenDestination
import com.bff.wespot.auth.screen.destinations.NameScreenDestination
import com.bff.wespot.auth.screen.destinations.SchoolScreenDestination
import com.bff.wespot.auth.state.AuthAction
import com.bff.wespot.auth.state.NavigationAction
import com.bff.wespot.auth.viewmodel.AuthViewModel
import com.bff.wespot.designsystem.component.button.WSButton
import com.bff.wespot.designsystem.component.button.WSButtonType
Expand All @@ -45,17 +40,16 @@ import com.bff.wespot.designsystem.theme.StaticTypeScale
import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.bff.wespot.ui.WSBottomSheet
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import org.orbitmvi.orbit.compose.collectAsState

@OptIn(ExperimentalMaterial3Api::class)
@Destination
@Composable
fun EditScreen(
viewModel: AuthViewModel,
navigator: DestinationsNavigator,
) {
val state by viewModel.collectAsState()
val action = viewModel::onAction

var firstEnter by remember {
mutableStateOf(true)
Expand All @@ -70,7 +64,7 @@ fun EditScreen(
title = stringResource(id = R.string.register),
canNavigateBack = true,
navigateUp = {
navigator.navigateUp()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
},
)
},
Expand All @@ -83,7 +77,7 @@ fun EditScreen(
title = stringResource(id = R.string.name),
value = state.name,
) {
navigator.navigate(NameScreenDestination(edit = true))
action(AuthAction.Navigation(NavigationAction.NavigateToNameScreen(true)))
}

EditField(
Expand All @@ -94,28 +88,28 @@ fun EditScreen(
stringResource(id = R.string.female_student)
},
) {
navigator.navigate(GenderScreenDestination(edit = true))
action(AuthAction.Navigation(NavigationAction.NavigateToGenderScreen(true)))
}

EditField(
title = stringResource(id = R.string.get_class),
value = state.classNumber.toString(),
) {
navigator.navigate(ClassScreenDestination(edit = true))
action(AuthAction.Navigation(NavigationAction.NavigateToClassScreen(true)))
}

EditField(
title = stringResource(id = R.string.grade),
value = "${state.grade}학년",
) {
navigator.navigate(GradeScreenDestination(edit = true))
action(AuthAction.Navigation(NavigationAction.NavigateToGradeScreen(true)))
}

EditField(
title = stringResource(id = R.string.school),
value = state.selectedSchool?.name ?: "",
) {
navigator.navigate(SchoolScreenDestination(edit = true))
action(AuthAction.Navigation(NavigationAction.NavigateToSchoolScreen(true)))
}
}
}
Expand Down Expand Up @@ -148,13 +142,7 @@ fun EditScreen(
if (register) {
WSBottomSheet(closeSheet = { register = true }) {
RegisterBottomSheetContent {
navigator.navigate(
CompleteScreenDestination,
navOptions = NavOptions
.Builder()
.setPopUpTo(SchoolScreenDestination.route, inclusive = true)
.build(),
)
action(AuthAction.Navigation(NavigationAction.NavigateToCompleteScreen))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,13 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.bff.wespot.auth.R
import com.bff.wespot.auth.screen.destinations.NameScreenDestination
import com.bff.wespot.auth.state.AuthAction
import com.bff.wespot.auth.state.NavigationAction
import com.bff.wespot.auth.viewmodel.AuthViewModel
import com.bff.wespot.designsystem.component.header.WSTopBar
import com.bff.wespot.designsystem.theme.StaticTypeScale
import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import org.orbitmvi.orbit.compose.collectAsState

@OptIn(ExperimentalMaterial3Api::class)
Expand All @@ -43,7 +42,6 @@ import org.orbitmvi.orbit.compose.collectAsState
fun GenderScreen(
viewModel: AuthViewModel,
edit: Boolean,
navigator: DestinationsNavigator,
) {
val state by viewModel.collectAsState()
val action = viewModel::onAction
Expand All @@ -54,7 +52,7 @@ fun GenderScreen(
title = stringResource(id = R.string.register),
canNavigateBack = true,
navigateUp = {
navigator.navigateUp()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
},
)
},
Expand Down Expand Up @@ -87,10 +85,10 @@ fun GenderScreen(
onClicked = {
action(AuthAction.OnGenderChanged("male"))
if (edit) {
navigator.popBackStack()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
return@GenderBox
}
navigator.navigate(NameScreenDestination(edit = false))
action(AuthAction.Navigation(NavigationAction.NavigateToNameScreen(false)))
},
)
GenderBox(
Expand All @@ -102,10 +100,10 @@ fun GenderScreen(
onClicked = {
action(AuthAction.OnGenderChanged("female"))
if (edit) {
navigator.popBackStack()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
return@GenderBox
}
navigator.navigate(NameScreenDestination(edit = false))
action(AuthAction.Navigation(NavigationAction.NavigateToNameScreen(false)))
},
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.bff.wespot.auth.R
import com.bff.wespot.auth.screen.destinations.ClassScreenDestination
import com.bff.wespot.auth.state.AuthAction
import com.bff.wespot.auth.state.NavigationAction
import com.bff.wespot.auth.viewmodel.AuthViewModel
import com.bff.wespot.designsystem.component.button.WSButton
import com.bff.wespot.designsystem.component.button.WSOutlineButton
Expand All @@ -37,7 +37,6 @@ import com.bff.wespot.designsystem.theme.StaticTypeScale
import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.bff.wespot.ui.WSBottomSheet
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import org.orbitmvi.orbit.compose.collectAsState

@OptIn(ExperimentalMaterial3Api::class)
Expand All @@ -46,7 +45,6 @@ import org.orbitmvi.orbit.compose.collectAsState
fun GradeScreen(
viewModel: AuthViewModel,
edit: Boolean,
navigator: DestinationsNavigator,
) {
val state by viewModel.collectAsState()
val action = viewModel::onAction
Expand All @@ -60,7 +58,7 @@ fun GradeScreen(
title = stringResource(id = R.string.register),
canNavigateBack = true,
navigateUp = {
navigator.navigateUp()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
},
)
},
Expand Down Expand Up @@ -141,10 +139,10 @@ fun GradeScreen(

action(AuthAction.OnGradeChanged(grade))
if (edit) {
navigator.popBackStack()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
return@BottomSheetContent
}
navigator.navigate(ClassScreenDestination(edit = false))
action(AuthAction.Navigation(NavigationAction.NavigateToClassScreen(false)))
},
)
}
Expand All @@ -154,10 +152,10 @@ fun GradeScreen(
WSButton(
onClick = {
if (edit) {
navigator.popBackStack()
action(AuthAction.Navigation(NavigationAction.PopBackStack))
return@WSButton
}
navigator.navigate(ClassScreenDestination(edit = false))
action(AuthAction.Navigation(NavigationAction.NavigateToClassScreen(false)))
},
text = stringResource(
id = if (edit) {
Expand Down
Loading

0 comments on commit 497f69c

Please sign in to comment.