Skip to content

Commit

Permalink
1) Code refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
ItamiOMW committed Jun 2, 2024
1 parent e7c2ce1 commit 3c86490
Show file tree
Hide file tree
Showing 97 changed files with 1,521 additions and 726 deletions.
Original file line number Diff line number Diff line change
@@ -1,38 +1,24 @@
package com.itami.calorie_tracker.authentication_feature.presentation

import androidx.hilt.navigation.compose.hiltViewModel
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavType
import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import androidx.navigation.navigation
import com.itami.calorie_tracker.authentication_feature.presentation.screens.age.AgeScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.age.AgeViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.email_activation.EmailActivationScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.email_activation.EmailActivationViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.forgot_password.ForgotPasswordScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.forgot_password.ForgotPasswordViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.gender.GenderScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.gender.GenderViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.goal.GoalScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.goal.GoalViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.height.HeightScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.height.HeightViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.lifestyle.LifestyleScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.lifestyle.LifestyleViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.login_email.LoginEmailScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.login_email.LoginEmailViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.recommended_nutrients.RecommendedNutrientsScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.recommended_nutrients.RecommendedNutrientsViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.register_email.RegisterEmailScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.register_email.RegisterEmailViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.reset_password.ResetPasswordScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.reset_password.ResetPasswordViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.reset_password_success.ResetPasswordSuccessScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.weight.WeightScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.weight.WeightViewModel
import com.itami.calorie_tracker.authentication_feature.presentation.screens.welcome.WelcomeScreen
import com.itami.calorie_tracker.authentication_feature.presentation.screens.welcome.WelcomeViewModel
import com.itami.calorie_tracker.core.presentation.navigation.Graph
import com.itami.calorie_tracker.core.presentation.navigation.NavigationState
import com.itami.calorie_tracker.core.presentation.navigation.Screen
Expand All @@ -46,12 +32,12 @@ fun NavGraphBuilder.authGraph(
route = Graph.Auth.route,
startDestination = AuthGraphScreen.Welcome.fullRoute
) {
composable(
route = AuthGraphScreen.Welcome.fullRoute,
) {
val viewModel: WelcomeViewModel = hiltViewModel()
composable(route = AuthGraphScreen.Welcome.fullRoute) {
WelcomeScreen(
onNavigateToDiary = {
onStart = {
navState.navigateToScreen(route = AuthGraphScreen.Goal.fullRoute)
},
onGoogleLoginSuccessful = {
navState.navigateToGraph(
graph = Graph.Diary.route,
popUpInclusive = true,
Expand All @@ -60,103 +46,72 @@ fun NavGraphBuilder.authGraph(
onNavigateToLoginEmail = {
navState.navigateToScreen(route = AuthGraphScreen.LoginEmail.fullRoute)
},
onNavigateToGoal = {
navState.navigateToScreen(route = AuthGraphScreen.Goal.fullRoute)
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(route = AuthGraphScreen.Goal.fullRoute) {
val viewModel: GoalViewModel = hiltViewModel()
GoalScreen(
onNavigateToGender = {
onGoalSaved = {
navState.navigateToScreen(route = AuthGraphScreen.Gender.fullRoute)
},
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
}
)
}
composable(route = AuthGraphScreen.Gender.fullRoute) {
val viewModel: GenderViewModel = hiltViewModel()
GenderScreen(
onNavigateToLifestyle = {
onGenderSaved = {
navState.navigateToScreen(route = AuthGraphScreen.Lifestyle.fullRoute)
},
onNavigateBack = {
navState.navigateBack()
},
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
}
)
}
composable(route = AuthGraphScreen.Lifestyle.fullRoute) {
val viewModel: LifestyleViewModel = hiltViewModel()
LifestyleScreen(
onNavigateToHeight = {
onLifestyleSaved = {
navState.navigateToScreen(AuthGraphScreen.Height.fullRoute)
},
onNavigateBack = {
navState.navigateBack()
},
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
}
)
}
composable(route = AuthGraphScreen.Height.fullRoute) {
val viewModel: HeightViewModel = hiltViewModel()
HeightScreen(
onNavigateToWeight = {
onHeightSaved = {
navState.navigateToScreen(AuthGraphScreen.Weight.fullRoute)
},
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(route = AuthGraphScreen.Weight.fullRoute) {
val viewModel: WeightViewModel = hiltViewModel()
WeightScreen(
onNavigateToAge = {
onWeightSaved = {
navState.navigateToScreen(route = AuthGraphScreen.Age.fullRoute)
},
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(route = AuthGraphScreen.Age.fullRoute) {
val viewModel: AgeViewModel = hiltViewModel()
AgeScreen(
onNavigateToRecommendedPFC = {
onAgeSaved = {
navState.navigateToScreen(route = AuthGraphScreen.RecommendedNutrients.fullRoute)
},
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(route = AuthGraphScreen.RecommendedNutrients.fullRoute) {
val viewModel: RecommendedNutrientsViewModel = hiltViewModel()
RecommendedNutrientsScreen(
onNavigateToDiary = {
onGoogleRegisterSuccess = {
navState.navigateToGraph(
graph = Graph.Diary.route,
popUpInclusive = true
Expand All @@ -165,16 +120,12 @@ fun NavGraphBuilder.authGraph(
onNavigateToRegisterEmail = {
navState.navigateToScreen(route = AuthGraphScreen.RegisterEmail.fullRoute)
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(route = AuthGraphScreen.LoginEmail.fullRoute) {
val viewModel: LoginEmailViewModel = hiltViewModel()
LoginEmailScreen(
onNavigateToDiary = {
onLoginSuccess = {
navState.navigateToGraph(
graph = Graph.Diary.route,
popUpInclusive = true,
Expand All @@ -186,16 +137,12 @@ fun NavGraphBuilder.authGraph(
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(route = AuthGraphScreen.ForgotPassword.fullRoute) {
val viewModel: ForgotPasswordViewModel = hiltViewModel()
ForgotPasswordScreen(
onNavigateToResetPassword = { email ->
onResetCodeSent = { email ->
navState.navigateToScreen(
route = AuthGraphScreen.ResetPassword.routeWithArgs(
email
Expand All @@ -205,10 +152,7 @@ fun NavGraphBuilder.authGraph(
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(
Expand All @@ -219,9 +163,8 @@ fun NavGraphBuilder.authGraph(
}
)
) {
val viewModel: ResetPasswordViewModel = hiltViewModel()
ResetPasswordScreen(
onNavigateToResetPasswordSuccess = {
onPasswordResetSuccess = {
navState.navigateToScreen(
route = AuthGraphScreen.ResetPasswordSuccess.fullRoute,
popUpToRoute = AuthGraphScreen.LoginEmail.fullRoute
Expand All @@ -230,10 +173,7 @@ fun NavGraphBuilder.authGraph(
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(route = AuthGraphScreen.ResetPasswordSuccess.fullRoute) {
Expand All @@ -247,9 +187,8 @@ fun NavGraphBuilder.authGraph(
)
}
composable(route = AuthGraphScreen.RegisterEmail.fullRoute) {
val viewModel: RegisterEmailViewModel = hiltViewModel()
RegisterEmailScreen(
onNavigateToEmailConfirmation = { email ->
onEmailRegisterSuccess = { email ->
navState.navigateToScreen(
route = AuthGraphScreen.EmailActivation.routeWithArgs(email),
popUpToRoute = AuthGraphScreen.Welcome.fullRoute
Expand All @@ -258,10 +197,7 @@ fun NavGraphBuilder.authGraph(
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
composable(
Expand All @@ -272,9 +208,8 @@ fun NavGraphBuilder.authGraph(
}
)
) {
val viewModel: EmailActivationViewModel = hiltViewModel()
EmailActivationScreen(
onNavigateToLoginEmail = {
onNavigateToLogin = {
navState.navigateToScreen(
route = AuthGraphScreen.LoginEmail.fullRoute,
popUpToRoute = AuthGraphScreen.Welcome.fullRoute
Expand All @@ -283,10 +218,7 @@ fun NavGraphBuilder.authGraph(
onNavigateBack = {
navState.navigateBack()
},
onShowSnackbar = onShowSnackbar,
state = viewModel.state,
uiEvent = viewModel.uiEvent,
onAction = viewModel::onAction
onShowSnackbar = onShowSnackbar
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ sealed class AgeAction {

data class AgeValueChange(val age: String) : AgeAction()

data object SaveAge : AgeAction()
data object NavigateNextClick : AgeAction()

data object NavigateBackClick : AgeAction()

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import androidx.compose.material3.TextButton
import androidx.compose.material3.TextField
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand All @@ -32,34 +31,52 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import com.itami.calorie_tracker.R
import com.itami.calorie_tracker.core.domain.model.Theme
import com.itami.calorie_tracker.core.presentation.components.ObserveAsEvents
import com.itami.calorie_tracker.core.presentation.theme.CalorieTrackerTheme
import kotlinx.coroutines.flow.Flow


@Composable
fun AgeScreen(
onNavigateToRecommendedPFC: () -> Unit,
onAgeSaved: () -> Unit,
onNavigateBack: () -> Unit,
onShowSnackbar: (message: String) -> Unit,
state: AgeState,
uiEvent: Flow<AgeUiEvent>,
onAction: (AgeAction) -> Unit,
viewModel: AgeViewModel = hiltViewModel(),
) {
LaunchedEffect(key1 = true) {
uiEvent.collect { event ->
when (event) {
is AgeUiEvent.AgeSaved -> {
onNavigateToRecommendedPFC()
}

is AgeUiEvent.ShowSnackbar -> {
onShowSnackbar(event.message)
}
}
ObserveAsEvents(viewModel.uiEvent) { event ->
when (event) {
is AgeUiEvent.AgeSaved -> onAgeSaved()
is AgeUiEvent.NavigateBack -> onNavigateBack()
is AgeUiEvent.ShowSnackbar -> onShowSnackbar(event.message)
}
}

AgeScreenContent(
state = viewModel.state,
onAction = viewModel::onAction
)
}

@Preview
@Composable
fun AgeScreenContentPreview() {
CalorieTrackerTheme(theme = Theme.SYSTEM_THEME) {
AgeScreenContent(
state = AgeState(),
onAction = {}
)
}
}

@Composable
private fun AgeScreenContent(
state: AgeState,
onAction: (AgeAction) -> Unit,
) {
Scaffold(
containerColor = CalorieTrackerTheme.colors.background,
contentColor = CalorieTrackerTheme.colors.onBackground
Expand Down Expand Up @@ -91,9 +108,11 @@ fun AgeScreen(
)
BottomSection(
onFABClick = {
onAction(AgeAction.SaveAge)
onAction(AgeAction.NavigateNextClick)
},
onNavigateBack = {
onAction(AgeAction.NavigateBackClick)
},
onNavigateBack = onNavigateBack,
isLoading = state.isLoading,
modifier = Modifier
.align(Alignment.BottomCenter)
Expand Down
Loading

0 comments on commit 3c86490

Please sign in to comment.