@@ -3,27 +3,29 @@ package com.sap.cdc.bitsnbytes.ui.route
33import androidx.compose.material3.Text
44import androidx.compose.runtime.Composable
55import androidx.compose.ui.platform.LocalContext
6+ import androidx.lifecycle.viewmodel.compose.viewModel
67import androidx.navigation.compose.NavHost
78import androidx.navigation.compose.composable
89import androidx.navigation.compose.rememberNavController
910import com.sap.cdc.android.sdk.auth.ResolvableContext
1011import com.sap.cdc.bitsnbytes.cdc.IdentityServiceRepository
11- import com.sap.cdc.bitsnbytes.ui.view.custom.AuthenticationTabView
12- import com.sap.cdc.bitsnbytes.ui.view.flow.AboutMeView
13- import com.sap.cdc.bitsnbytes.ui.view.flow.EmailRegisterView
14- import com.sap.cdc.bitsnbytes.ui.view.flow.EmailSignInView
15- import com.sap.cdc.bitsnbytes.ui.view.flow.HomeView
16- import com.sap.cdc.bitsnbytes.ui.view.flow.LinkAccountView
17- import com.sap.cdc.bitsnbytes.ui.view.flow.LoginOptionsView
18- import com.sap.cdc.bitsnbytes.ui.view.flow.MyProfileView
19- import com.sap.cdc.bitsnbytes.ui.view.flow.OTPType
20- import com.sap.cdc.bitsnbytes.ui.view.flow.OtpSignInView
21- import com.sap.cdc.bitsnbytes.ui.view.flow.OtpVerifyView
22- import com.sap.cdc.bitsnbytes.ui.view.flow.PendingRegistrationView
23- import com.sap.cdc.bitsnbytes.ui.view.flow.RegisterView
24- import com.sap.cdc.bitsnbytes.ui.view.flow.ScreenSetView
25- import com.sap.cdc.bitsnbytes.ui.view.flow.SignInView
26- import com.sap.cdc.bitsnbytes.ui.view.flow.WelcomeView
12+ import com.sap.cdc.bitsnbytes.ui.view.composables.AuthenticationTabView
13+ import com.sap.cdc.bitsnbytes.ui.view.screens.AboutMeView
14+ import com.sap.cdc.bitsnbytes.ui.view.screens.EmailRegisterView
15+ import com.sap.cdc.bitsnbytes.ui.view.screens.EmailSignInView
16+ import com.sap.cdc.bitsnbytes.ui.view.screens.HomeView
17+ import com.sap.cdc.bitsnbytes.ui.view.screens.LinkAccountView
18+ import com.sap.cdc.bitsnbytes.ui.view.screens.LoginOptionsView
19+ import com.sap.cdc.bitsnbytes.ui.view.screens.MyProfileView
20+ import com.sap.cdc.bitsnbytes.ui.view.screens.OTPType
21+ import com.sap.cdc.bitsnbytes.ui.view.screens.OtpSignInView
22+ import com.sap.cdc.bitsnbytes.ui.view.screens.OtpVerifyView
23+ import com.sap.cdc.bitsnbytes.ui.view.screens.PendingRegistrationView
24+ import com.sap.cdc.bitsnbytes.ui.view.screens.RegisterView
25+ import com.sap.cdc.bitsnbytes.ui.view.screens.ScreenSetView
26+ import com.sap.cdc.bitsnbytes.ui.view.screens.SignInView
27+ import com.sap.cdc.bitsnbytes.ui.view.screens.WelcomeView
28+ import com.sap.cdc.bitsnbytes.ui.viewmodel.AccountViewModel
2729import com.sap.cdc.bitsnbytes.ui.viewmodel.EmailRegisterViewModel
2830import com.sap.cdc.bitsnbytes.ui.viewmodel.EmailSignInViewModel
2931import com.sap.cdc.bitsnbytes.ui.viewmodel.LinkAccountViewModel
@@ -34,6 +36,8 @@ import com.sap.cdc.bitsnbytes.ui.viewmodel.PendingRegistrationViewModel
3436import com.sap.cdc.bitsnbytes.ui.viewmodel.RegisterViewModel
3537import com.sap.cdc.bitsnbytes.ui.viewmodel.ScreenSetViewModel
3638import com.sap.cdc.bitsnbytes.ui.viewmodel.SignInViewModel
39+ import com.sap.cdc.bitsnbytes.ui.viewmodel.WelcomeViewModel
40+ import com.sap.cdc.bitsnbytes.ui.viewmodel.factory.CustomViewModelFactory
3741import kotlinx.serialization.json.Json
3842
3943/* *
@@ -96,88 +100,129 @@ fun ProfileNavHost() {
96100 val profileNavController = rememberNavController()
97101 NavigationCoordinator .INSTANCE .setNavController(profileNavController)
98102
103+ val context = LocalContext .current.applicationContext
104+ val identityServiceRepository = IdentityServiceRepository .getInstance(context)
105+
99106 NavHost (
100107 profileNavController, startDestination =
101- when (IdentityServiceRepository .getInstance( LocalContext .current) .availableSession()) {
108+ when (identityServiceRepository .availableSession()) {
102109 true -> ProfileScreenRoute .MyProfile .route
103110 false -> ProfileScreenRoute .Welcome .route
104111 }
105112 ) {
106113 composable(ProfileScreenRoute .Welcome .route) {
107- WelcomeView ()
114+ val viewModel: WelcomeViewModel = viewModel(
115+ factory = CustomViewModelFactory (context)
116+ )
117+ WelcomeView (viewModel)
108118 }
109119 composable(ProfileScreenRoute .SignIn .route) {
110- SignInView (viewModel = SignInViewModel (LocalContext .current))
120+ val viewModel: SignInViewModel = viewModel(
121+ factory = CustomViewModelFactory (context)
122+ )
123+ SignInView (
124+ viewModel
125+ )
111126 }
112127 composable(ProfileScreenRoute .Register .route) {
113- RegisterView (viewModel = RegisterViewModel (LocalContext .current))
128+ val viewModel: RegisterViewModel = viewModel(
129+ factory = CustomViewModelFactory (context)
130+ )
131+ RegisterView (viewModel)
114132 }
115133 composable(" ${ProfileScreenRoute .AuthTabView .route} /{selected}" ) { backStackEntry ->
116134 val selected = backStackEntry.arguments?.getString(" selected" )
117- AuthenticationTabView (selected = selected!! .toInt(), )
135+ AuthenticationTabView (selected = selected!! .toInt())
118136 }
119137 composable(ProfileScreenRoute .EmailSignIn .route) {
120- EmailSignInView (viewModel = EmailSignInViewModel (LocalContext .current))
138+ val viewModel: EmailSignInViewModel = viewModel(
139+ factory = CustomViewModelFactory (context)
140+ )
141+ EmailSignInView (viewModel)
121142 }
122143 composable(ProfileScreenRoute .EmailRegister .route) {
123- EmailRegisterView (viewModel = EmailRegisterViewModel (LocalContext .current))
144+ val viewModel: EmailRegisterViewModel = viewModel(
145+ factory = CustomViewModelFactory (context)
146+ )
147+ EmailRegisterView (viewModel)
124148 }
125149 composable(" ${ProfileScreenRoute .ResolvePendingRegistration .route} /{resolvableContext}" ) { backStackEntry ->
126150 val resolvableJson = backStackEntry.arguments?.getString(" resolvableContext" )
127151 val resolvable = Json .decodeFromString<ResolvableContext >(resolvableJson!! )
128- PendingRegistrationView (
129- viewModel = PendingRegistrationViewModel (LocalContext .current),
130- resolvable,
152+ val viewModel: PendingRegistrationViewModel = viewModel(
153+ factory = CustomViewModelFactory (context)
131154 )
155+ PendingRegistrationView (viewModel, resolvable)
132156 }
133157 composable(" ${ProfileScreenRoute .ResolveLinkAccount .route} /{resolvableContext}" ) { backStackEntry ->
134158 val resolvableJson = backStackEntry.arguments?.getString(" resolvableContext" )
135159 val resolvable = Json .decodeFromString<ResolvableContext >(resolvableJson!! )
136- LinkAccountView (
137- viewModel = LinkAccountViewModel (LocalContext .current),
138- resolvable,
160+ val viewModel: LinkAccountViewModel = viewModel(
161+ factory = CustomViewModelFactory (context)
139162 )
163+ LinkAccountView (viewModel, resolvable)
140164 }
141165 composable(ProfileScreenRoute .MyProfile .route) {
142- MyProfileView ()
166+ val viewModel: AccountViewModel = viewModel(
167+ factory = CustomViewModelFactory (context)
168+ )
169+ MyProfileView (viewModel)
143170 }
144171 composable(ProfileScreenRoute .AboutMe .route) {
145- AboutMeView ()
172+ val viewModel: AccountViewModel = viewModel(
173+ factory = CustomViewModelFactory (context)
174+ )
175+ AboutMeView (viewModel)
146176 }
147177 composable(ScreenSetsRoute .ScreenSetRegistrationLoginLogin .route) {
178+ val viewModel: ScreenSetViewModel = viewModel(
179+ factory = CustomViewModelFactory (context)
180+ )
148181 ScreenSetView (
149- ScreenSetViewModel ( LocalContext .current) ,
182+ viewModel ,
150183 " Default-RegistrationLogin" ,
151184 " gigya-login-screen"
152185 )
153186 }
154187 composable(ScreenSetsRoute .ScreenSetRegistrationLoginRegister .route) {
188+ val viewModel: ScreenSetViewModel = viewModel(
189+ factory = CustomViewModelFactory (context)
190+ )
155191 ScreenSetView (
156- ScreenSetViewModel ( LocalContext .current) ,
192+ viewModel ,
157193 " Default-RegistrationLogin" ,
158194 " gigya-register-screen"
159195 )
160196 }
161197 composable(" ${ProfileScreenRoute .OTPSignIn .route} /{type}" ) { backStackEntry ->
162198 val type = backStackEntry.arguments?.getString(" type" )
163199 val otpType = OTPType .getByValue(type!! .toInt())
164- OtpSignInView (viewModel = OtpSignInViewModel (LocalContext .current), otpType = otpType!! )
200+ val viewModel: OtpSignInViewModel = viewModel(
201+ factory = CustomViewModelFactory (context)
202+ )
203+ OtpSignInView (viewModel, otpType = otpType!! )
165204 }
166205 composable(" ${ProfileScreenRoute .OTPVerify .route} /{resolvableContext}/{type}/{inputField}" ) { backStackEntry ->
167206 val resolvableJson = backStackEntry.arguments?.getString(" resolvableContext" )
168207 val input = backStackEntry.arguments?.getString(" inputField" )
169208 val type = backStackEntry.arguments?.getString(" type" )
170209 val otpType = OTPType .getByValue(type!! .toInt())
171210 val resolvable = Json .decodeFromString<ResolvableContext >(resolvableJson!! )
211+ val viewModel: OtpVerifyViewModel = viewModel(
212+ factory = CustomViewModelFactory (context)
213+ )
172214 OtpVerifyView (
173- viewModel = OtpVerifyViewModel ( LocalContext .current) ,
215+ viewModel,
174216 resolvable,
175217 otpType = otpType!! ,
176218 inputField = input!!
177219 )
178220 }
179221 composable(ProfileScreenRoute .LoginOptions .route) {
180- LoginOptionsView (viewModel = LoginOptionsViewModel (LocalContext .current))
222+ val viewModel: LoginOptionsViewModel = viewModel(
223+ factory = CustomViewModelFactory (context)
224+ )
225+ LoginOptionsView (viewModel)
181226 }
182227 }
183228}
0 commit comments