diff --git a/app/src/main/java/app/closer/ui/challenges/ConnectionChallengesScreen.kt b/app/src/main/java/app/closer/ui/challenges/ConnectionChallengesScreen.kt index c3e89f09..bc3d232c 100644 --- a/app/src/main/java/app/closer/ui/challenges/ConnectionChallengesScreen.kt +++ b/app/src/main/java/app/closer/ui/challenges/ConnectionChallengesScreen.kt @@ -112,7 +112,7 @@ class ConnectionChallengesViewModel @Inject constructor( return@launch } val couple = coupleRepository.getCoupleForUser(uid) ?: run { - _uiState.update { it.copy(phase = ChallengesPhase.PICK) } + _uiState.update { it.copy(navigateTo = AppRoute.CREATE_INVITE) } return@launch } val partnerId = couple.userIds.firstOrNull { it != uid } ?: uid diff --git a/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt b/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt index 7fc1731b..fe01dbc2 100644 --- a/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt +++ b/app/src/main/java/app/closer/ui/desiresync/DesireSyncScreen.kt @@ -145,8 +145,10 @@ class DesireSyncViewModel @Inject constructor( } val uid = gameSessionManager.currentUserId ?: return@launch fail("You need to be signed in to play.") - val couple = gameSessionManager.getCoupleForUser(uid) - ?: return@launch fail("Pair with your partner to play together.") + val couple = gameSessionManager.getCoupleForUser(uid) ?: run { + _uiState.update { it.copy(navigateTo = AppRoute.CREATE_INVITE) } + return@launch + } userId = uid coupleId = couple.id diff --git a/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt b/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt index d346cb08..b09720e9 100644 --- a/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt +++ b/app/src/main/java/app/closer/ui/howwell/HowWellScreen.kt @@ -175,8 +175,10 @@ class HowWellViewModel @Inject constructor( viewModelScope.launch { val uid = gameSessionManager.currentUserId ?: return@launch fail("You need to be signed in to play.") - val couple = gameSessionManager.getCoupleForUser(uid) - ?: return@launch fail("Pair with your partner to play together.") + val couple = gameSessionManager.getCoupleForUser(uid) ?: run { + _uiState.update { it.copy(navigateTo = AppRoute.CREATE_INVITE) } + return@launch + } userId = uid coupleId = couple.id partnerId = couple.userIds.firstOrNull { it != uid } diff --git a/app/src/main/java/app/closer/ui/memorylane/MemoryLaneScreen.kt b/app/src/main/java/app/closer/ui/memorylane/MemoryLaneScreen.kt index ff32d25b..798ca1b0 100644 --- a/app/src/main/java/app/closer/ui/memorylane/MemoryLaneScreen.kt +++ b/app/src/main/java/app/closer/ui/memorylane/MemoryLaneScreen.kt @@ -115,7 +115,8 @@ data class MemoryLaneUiState( val selectedPrompt: String? = null, val isSaving: Boolean = false, val error: String? = null, - val hasPremium: Boolean = true + val hasPremium: Boolean = true, + val navigateTo: String? = null ) @HiltViewModel @@ -146,7 +147,7 @@ class MemoryLaneViewModel @Inject constructor( return@launch } val couple = coupleRepository.getCoupleForUser(uid) ?: run { - _uiState.update { it.copy(phase = MemoryLanePhase.ERROR, error = "Link up with a partner to start creating capsules.") } + _uiState.update { it.copy(navigateTo = AppRoute.CREATE_INVITE) } return@launch } @@ -174,6 +175,8 @@ class MemoryLaneViewModel @Inject constructor( load() } + fun onNavigated() = _uiState.update { it.copy(navigateTo = null) } + fun openCreate() = _uiState.update { it.copy( phase = MemoryLanePhase.CREATE, @@ -247,6 +250,10 @@ fun MemoryLaneScreen( ) { val state by viewModel.uiState.collectAsState() + LaunchedEffect(state.navigateTo) { + state.navigateTo?.let { onNavigate(it); viewModel.onNavigated() } + } + Box( modifier = Modifier .fillMaxSize() diff --git a/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt b/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt index ea3a0a69..bf67c8b6 100644 --- a/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt +++ b/app/src/main/java/app/closer/ui/thisorthat/ThisOrThatScreen.kt @@ -170,8 +170,10 @@ class ThisOrThatViewModel @Inject constructor( viewModelScope.launch { val uid = gameSessionManager.currentUserId ?: return@launch fail("You need to be signed in to play.") - val couple = gameSessionManager.getCoupleForUser(uid) - ?: return@launch fail("Pair with your partner to play together.") + val couple = gameSessionManager.getCoupleForUser(uid) ?: run { + _uiState.update { it.copy(navigateTo = AppRoute.CREATE_INVITE) } + return@launch + } userId = uid coupleId = couple.id