@@ -2,53 +2,47 @@ package com.aykuttasil.modernapp.ui.user
22
33import androidx.hilt.Assisted
44import androidx.hilt.lifecycle.ViewModelInject
5- import androidx.lifecycle.MutableLiveData
65import androidx.lifecycle.SavedStateHandle
76import androidx.lifecycle.viewModelScope
87import com.aykuttasil.domain.entities.UserEntity
98import com.aykuttasil.domain.usecases.user.GetUserUseCase
109import com.aykuttasil.domain.util.Resource
1110import com.aykuttasil.modernapp.App
1211import com.aykuttasil.modernapp.ui.common.BaseViewModel
13- import com.aykuttasil.modernapp.util.SingleLiveEvent
1412import kotlinx.coroutines.ExperimentalCoroutinesApi
13+ import kotlinx.coroutines.flow.MutableStateFlow
1514import kotlinx.coroutines.flow.launchIn
1615import kotlinx.coroutines.flow.onEach
1716import kotlinx.coroutines.launch
1817
19- data class UserActivityViewState (
20- var isLoading : Boolean = true ,
21- var userEntity : UserEntity ? = null ,
22- var error : String? = null
23- )
24-
2518@ExperimentalCoroutinesApi
2619class UserViewModel @ViewModelInject constructor(
2720 @Assisted private val savedStateHandle : SavedStateHandle ,
2821 private val app : App ,
2922 private val getUserUseCase : GetUserUseCase
3023) : BaseViewModel(app) {
3124
32- val viewState = MutableLiveData <UserActivityViewState >()
33- var errorState: SingleLiveEvent <Throwable ?> = SingleLiveEvent ()
34-
35- init {
36- viewState.value = UserActivityViewState ()
25+ sealed class ViewState {
26+ object Loading : ViewState()
27+ data class Success (val user : UserEntity ) : ViewState()
28+ data class Error (val err : Throwable ) : ViewState()
3729 }
3830
31+ val viewState = MutableStateFlow <ViewState >(ViewState .Loading )
32+
3933 fun getUser () {
4034 viewModelScope.launch {
4135 getUserUseCase(" aykuttasil" ) { state ->
4236 state.onEach {
4337 when (it) {
4438 is Resource .Loading -> {
45- viewState.value = viewState.value?.copy(isLoading = true )
39+ viewState.value = ViewState . Loading
4640 }
4741 is Resource .Success -> {
48- viewState.value = viewState.value?.copy(isLoading = false , userEntity = it.data)
42+ viewState.value = ViewState . Success ( it.data!! )
4943 }
5044 is Resource .Error -> {
51- errorState .value = it.error
45+ viewState .value = ViewState . Error ( it.error ? : Exception ( " Error! " ))
5246 }
5347 }
5448 }.launchIn(viewModelScope)
0 commit comments