diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index b653d8910..c50d90eb3 100644 --- a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -46,12 +46,18 @@ import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKM import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.FOR_YOU import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapNotNull import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.update import kotlinx.datetime.TimeZone +import java.util.UUID @Composable fun rememberNiaAppState( @@ -117,6 +123,20 @@ class NiaAppState( initialValue = false, ) + private val _errorMessages = MutableStateFlow>(emptyList()) + val errorMessage: StateFlow = _errorMessages.map{ it.firstOrNull()?.message }.stateIn( + scope = coroutineScope, + started = SharingStarted.WhileSubscribed(5_000), + initialValue = null, + ) + fun addErrorMessage(error: String) { + _errorMessages.update { it + ErrorMessage(error) } + } + + fun clearErrorMessage() { + _errorMessages.update { it.drop(1) } + } + /** * Map of top level destinations to be used in the TopBar, BottomBar and NavRail. The key is the * route. @@ -198,3 +218,8 @@ private fun NavigationTrackingSideEffect(navController: NavHostController) { } } } + +data class ErrorMessage( + val message: String, + val id: String = UUID.randomUUID().toString(), +)