1
1
package com.espressodev.gptmap.feature.login
2
2
3
+ import android.util.Log
3
4
import androidx.compose.foundation.layout.Column
4
5
import androidx.compose.foundation.layout.Row
5
6
import androidx.compose.foundation.layout.Spacer
@@ -9,7 +10,9 @@ import androidx.compose.material3.MaterialTheme
9
10
import androidx.compose.material3.Text
10
11
import androidx.compose.material3.TextButton
11
12
import androidx.compose.runtime.Composable
13
+ import androidx.compose.runtime.LaunchedEffect
12
14
import androidx.compose.runtime.getValue
15
+ import androidx.compose.runtime.rememberUpdatedState
13
16
import androidx.compose.ui.Alignment
14
17
import androidx.compose.ui.Modifier
15
18
import androidx.compose.ui.res.stringResource
@@ -33,19 +36,36 @@ import com.espressodev.gptmap.core.designsystem.R.drawable as AppDrawable
33
36
import com.espressodev.gptmap.core.designsystem.R.string as AppText
34
37
35
38
@Composable
36
- fun LoginRoute (
39
+ internal fun LoginRoute (
37
40
navigateToMap : () -> Unit ,
38
41
navigateToRegister : () -> Unit ,
39
42
navigateToForgotPassword : () -> Unit ,
40
43
viewModel : LoginViewModel = hiltViewModel(),
41
44
) {
42
45
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
46
+ val onEvent by rememberUpdatedState(
47
+ newValue = { event: LoginEvent -> viewModel.onEvent(event) }
48
+ )
49
+
50
+ val navigationState by viewModel.navigationState.collectAsStateWithLifecycle()
51
+ LaunchedEffect (key1 = navigationState) {
52
+ fun performNavigation (action : () -> Unit ) {
53
+ action()
54
+ viewModel.resetNavigation()
55
+ }
56
+ when (navigationState) {
57
+ is LoginNavigationState .NavigateToMap -> performNavigation(navigateToMap)
58
+ is LoginNavigationState .NavigateToRegister -> performNavigation(navigateToRegister)
59
+ is LoginNavigationState .NavigateToForgotPassword ->
60
+ performNavigation(navigateToForgotPassword)
61
+ LoginNavigationState .None -> Unit
62
+ }
63
+ }
64
+
43
65
if (uiState.loadingState is LoadingState .Loading ) GmProgressIndicator ()
44
66
LoginScreen (
45
67
uiState = uiState,
46
- onEvent = { event -> viewModel.onEvent(event, navigateToMap) },
47
- onNotMemberClick = navigateToRegister,
48
- onForgotPasswordClick = navigateToForgotPassword
68
+ onEvent = { event -> onEvent(event) },
49
69
)
50
70
OneTapLauncher (
51
71
oneTapClient = viewModel.oneTapClient,
@@ -57,13 +77,15 @@ fun LoginRoute(
57
77
}
58
78
59
79
@Composable
60
- fun LoginScreen (
80
+ private fun LoginScreen (
61
81
uiState : LoginUiState ,
62
82
onEvent : (LoginEvent ) -> Unit ,
63
- onNotMemberClick : () -> Unit ,
64
- onForgotPasswordClick : () -> Unit ,
65
83
modifier : Modifier = Modifier
66
84
) {
85
+ LaunchedEffect (key1 = onEvent) {
86
+ Log .d(" LoginScreen" , " LoginScreen: onEvent" )
87
+ }
88
+
67
89
AppWrapper (modifier) {
68
90
LoginHeader ()
69
91
DefaultTextField (
@@ -80,7 +102,7 @@ fun LoginScreen(
80
102
onValueChange = { onEvent(LoginEvent .OnPasswordChanged (it)) }
81
103
)
82
104
TextButton (
83
- onClick = onForgotPasswordClick ,
105
+ onClick = { onEvent( LoginEvent . OnForgotPasswordClicked ) } ,
84
106
modifier = Modifier .align(Alignment .End )
85
107
) {
86
108
Text (stringResource(AppText .forgot_password))
@@ -110,7 +132,7 @@ fun LoginScreen(
110
132
text = stringResource(id = AppText .not_a_member),
111
133
style = MaterialTheme .typography.titleMedium
112
134
)
113
- TextButton (onClick = onNotMemberClick ) {
135
+ TextButton (onClick = { onEvent( LoginEvent . OnNotMemberClicked ) } ) {
114
136
Text (
115
137
text = stringResource(id = AppText .register_now),
116
138
style = MaterialTheme .typography.titleMedium
@@ -121,7 +143,7 @@ fun LoginScreen(
121
143
}
122
144
123
145
@Composable
124
- fun LoginHeader (modifier : Modifier = Modifier ) {
146
+ private fun LoginHeader (modifier : Modifier = Modifier ) {
125
147
HeaderWrapper (modifier = modifier) {
126
148
Text (
127
149
text = stringResource(AppText .login_header),
@@ -139,5 +161,5 @@ fun LoginHeader(modifier: Modifier = Modifier) {
139
161
@Preview(showBackground = true )
140
162
@Composable
141
163
private fun LoginScreenPreview () {
142
- LoginScreen (LoginUiState (" Fatih" ), {}, {}, {} )
164
+ LoginScreen (LoginUiState (" Fatih" ), {})
143
165
}
0 commit comments