Skip to content

Commit

Permalink
Merge pull request #49 from niscy-eudiw/main
Browse files Browse the repository at this point in the history
Migrated Compose's MutableState to Kotlin's MutableStateFlow
  • Loading branch information
stzouvaras authored Jan 29, 2025
2 parents 8fba28c + 756d296 commit 0567480
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 12 deletions.
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
lifecycleRuntimeKtx = "2.8.7"
activityCompose = "1.9.3"
activityCompose = "1.10.0"
androidxNavigation = "2.8.5"
composeBom = "2024.12.01"
composeBom = "2025.01.00"
appcompat = "1.7.0"
material3 = "1.3.1"
material = "1.12.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,15 @@

package eu.europa.ec.eudi.rqesui.presentation.architecture

import androidx.compose.runtime.MutableState
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch

internal abstract class MviViewModel<Event : ViewEvent, UiState : ViewState, Effect : ViewSideEffect> :
Expand All @@ -32,8 +33,8 @@ internal abstract class MviViewModel<Event : ViewEvent, UiState : ViewState, Eff
private val initialState: UiState by lazy { setInitialState() }
abstract fun setInitialState(): UiState

private val _viewState: MutableState<UiState> by lazy { mutableStateOf(initialState) }
val viewState: State<UiState> by lazy { _viewState }
private val _viewState: MutableStateFlow<UiState> by lazy { MutableStateFlow(initialState) }
val viewState: StateFlow<UiState> by lazy { _viewState.asStateFlow() }

private val _event: MutableSharedFlow<Event> = MutableSharedFlow()

Expand All @@ -53,7 +54,7 @@ internal abstract class MviViewModel<Event : ViewEvent, UiState : ViewState, Eff

protected fun setState(reducer: UiState.() -> UiState) {
val newState = viewState.value.reducer()
_viewState.value = newState
_viewState.update { newState }
notifyViewStateHistoryChanged(newState)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,14 @@ import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import eu.europa.ec.eudi.rqes.AuthorizationMode
import eu.europa.ec.eudi.rqes.CredentialAuthorization
Expand Down Expand Up @@ -90,7 +92,7 @@ internal fun SelectCertificateScreen(
navController: NavController,
viewModel: SelectCertificateViewModel
) {
val state = viewModel.viewState.value
val state: State by viewModel.viewState.collectAsStateWithLifecycle()
val context = LocalContext.current

val isBottomSheetOpen = state.isBottomSheetOpen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@ import androidx.compose.material3.SheetState
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import eu.europa.ec.eudi.rqesui.domain.extension.toUri
import eu.europa.ec.eudi.rqesui.infrastructure.config.data.DocumentData
Expand Down Expand Up @@ -64,7 +66,7 @@ internal fun SelectQtspScreen(
navController: NavController,
viewModel: SelectQtspViewModel
) {
val state = viewModel.viewState.value
val state: State by viewModel.viewState.collectAsStateWithLifecycle()
val context = LocalContext.current

val isBottomSheetOpen = state.isBottomSheetOpen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,12 @@ import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import eu.europa.ec.eudi.rqesui.domain.extension.toUri
import eu.europa.ec.eudi.rqesui.domain.util.safeLet
Expand Down Expand Up @@ -69,7 +71,7 @@ internal fun SuccessScreen(
navController: NavController,
viewModel: SuccessViewModel
) {
val state = viewModel.viewState.value
val state: State by viewModel.viewState.collectAsStateWithLifecycle()
val context = LocalContext.current

val isBottomSheetOpen = state.isBottomSheetOpen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import com.github.barteksc.pdfviewer.PDFView
import eu.europa.ec.eudi.rqesui.domain.extension.toUri
Expand All @@ -53,7 +55,7 @@ internal fun ViewDocumentScreen(
navController: NavController,
viewModel: ViewDocumentViewModel,
) {
val state = viewModel.viewState.value
val state: State by viewModel.viewState.collectAsStateWithLifecycle()

ContentScreen(
isLoading = state.isLoading,
Expand Down

0 comments on commit 0567480

Please sign in to comment.