@@ -5,8 +5,12 @@ import androidx.compose.runtime.getValue
55import androidx.compose.runtime.mutableStateOf
66import androidx.compose.runtime.rememberCoroutineScope
77import androidx.compose.runtime.setValue
8+ import com.slack.circuit.retained.collectAsRetainedState
89import com.ninecraft.booket.core.data.api.repository.AuthRepository
10+ import com.ninecraft.booket.core.data.api.repository.UserRepository
11+ import com.ninecraft.booket.feature.screens.BottomNavigationScreen
912import com.ninecraft.booket.feature.screens.LoginScreen
13+ import com.ninecraft.booket.feature.screens.OnboardingScreen
1014import com.ninecraft.booket.feature.screens.TermsAgreementScreen
1115import com.orhanobut.logger.Logger
1216import com.slack.circuit.codegen.annotations.CircuitInject
@@ -21,14 +25,40 @@ import kotlinx.coroutines.launch
2125
2226class LoginPresenter @AssistedInject constructor(
2327 @Assisted private val navigator : Navigator ,
24- private val repository : AuthRepository ,
28+ private val authRepository : AuthRepository ,
29+ private val userRepository : UserRepository ,
2530) : Presenter<LoginUiState> {
2631
2732 @Composable
2833 override fun present (): LoginUiState {
2934 val scope = rememberCoroutineScope()
3035 var isLoading by rememberRetained { mutableStateOf(false ) }
3136 var sideEffect by rememberRetained { mutableStateOf<LoginSideEffect ?>(null ) }
37+ val isOnboardingCompleted by userRepository.isOnboardingCompleted.collectAsRetainedState(
38+ initial = false
39+ )
40+
41+ fun navigateAfterLogin () {
42+ scope.launch {
43+ userRepository.getUserProfile()
44+ .onSuccess { userProfile ->
45+ if (userProfile.termsAgreed) {
46+ if (isOnboardingCompleted) {
47+ navigator.resetRoot(BottomNavigationScreen )
48+ } else {
49+ navigator.resetRoot(OnboardingScreen )
50+ }
51+ } else {
52+ navigator.resetRoot(TermsAgreementScreen )
53+ }
54+ }.onFailure { exception ->
55+ exception.message?.let { Logger .e(it) }
56+ sideEffect = exception.message?.let {
57+ LoginSideEffect .ShowToast (it)
58+ }
59+ }
60+ }
61+ }
3262
3363 fun handleEvent (event : LoginUiEvent ) {
3464 when (event) {
@@ -46,9 +76,9 @@ class LoginPresenter @AssistedInject constructor(
4676 scope.launch {
4777 try {
4878 isLoading = true
49- repository .login(event.accessToken)
79+ authRepository .login(event.accessToken)
5080 .onSuccess {
51- navigator.resetRoot( TermsAgreementScreen )
81+ navigateAfterLogin( )
5282 }.onFailure { exception ->
5383 exception.message?.let { Logger .e(it) }
5484 sideEffect = exception.message?.let {
0 commit comments