diff --git a/presentation/src/main/java/com/jusiCool/presentation/main/screen/MainScreen.kt b/presentation/src/main/java/com/jusiCool/presentation/main/screen/MainScreen.kt index 5a54348..d937bce 100644 --- a/presentation/src/main/java/com/jusiCool/presentation/main/screen/MainScreen.kt +++ b/presentation/src/main/java/com/jusiCool/presentation/main/screen/MainScreen.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -22,6 +23,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.compose.composable @@ -46,7 +48,6 @@ import com.jusiCool.presentation.main.viewModel.MainViewModel import com.jusiCool.presentation.utill.Event import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay const val mainRoute = "mainRoute" @@ -91,6 +92,8 @@ internal fun MainRoute( ) { val (isSwipeRefreshLoading, setIsSwipeRefreshLoading) = remember { mutableStateOf(false) } val swipeRefreshState = rememberSwipeRefreshState(isRefreshing = isSwipeRefreshLoading) + val getMyPointResponse by viewModel.getMyPointResponse.collectAsStateWithLifecycle() + val getMyStockResponse by viewModel.getMyStockResponse.collectAsStateWithLifecycle() MainScreen( modifier = modifier, @@ -101,8 +104,18 @@ internal fun MainRoute( "파이낸셜뉴스", 1 ), - pointData = viewModel.myPoint.value, - stockData = viewModel.myStock.toImmutableList(), + pointData = when (getMyPointResponse) { + is Event.Success -> getMyPointResponse.data!! + else -> GetMyPointModel( + points = 0, + upDownPercent = 0.0, + upDownPoints = 0, + ) + }, + stockData = when (getMyStockResponse) { + is Event.Success -> getMyStockResponse.data!! + else -> persistentListOf() + }, onRefresh = { viewModel.apply { getMyPoint() @@ -127,30 +140,11 @@ internal fun MainRoute( } LaunchedEffect(Unit) { - viewModel.getMyPointResponse.collect { response -> - when (response) { - is Event.Success -> { - viewModel.myPoint.value = response.data!! - } - - else -> {} - } - } - } - - LaunchedEffect(Unit) { - viewModel.getMyStockResponse.collect { response -> - when (response) { - is Event.Success -> { - viewModel.myStock.removeRange(0, viewModel.myStock.size) - viewModel.myStock.addAll(response.data!!) - } - - else -> { - viewModel.myStock.removeRange(0, viewModel.myStock.size) - } - } + viewModel.apply { + getMyPoint() + getMyStock() } + setIsSwipeRefreshLoading(true) } } @@ -174,10 +168,6 @@ internal fun MainScreen( navigateToCommunity: () -> Unit, navigateToHoldShareRoute: () -> Unit, ) { - LaunchedEffect(Unit) { - onRefresh() - } - SwipeRefresh( state = swipeRefreshState, onRefresh = onRefresh diff --git a/presentation/src/main/java/com/jusiCool/presentation/main/viewModel/MainViewModel.kt b/presentation/src/main/java/com/jusiCool/presentation/main/viewModel/MainViewModel.kt index ea73604..cdd43da 100644 --- a/presentation/src/main/java/com/jusiCool/presentation/main/viewModel/MainViewModel.kt +++ b/presentation/src/main/java/com/jusiCool/presentation/main/viewModel/MainViewModel.kt @@ -13,6 +13,8 @@ import com.jusiCool.domain.usecase.user.GetMyStockUseCase import com.jusiCool.presentation.utill.Event import com.jusiCool.presentation.utill.errorHandling import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.catch @@ -28,7 +30,7 @@ class MainViewModel @Inject constructor( private val _getMyPointResponse = MutableStateFlow>(Event.Loading) val getMyPointResponse = _getMyPointResponse.asStateFlow() - private val _getMyStockResponse = MutableStateFlow>>(Event.Loading) + private val _getMyStockResponse = MutableStateFlow>>(Event.Loading) val getMyStockResponse = _getMyStockResponse.asStateFlow() private val _getStockListResponse = MutableStateFlow>>(Event.Loading) @@ -40,15 +42,6 @@ class MainViewModel @Inject constructor( var stockList = mutableStateListOf() private set - var myPoint = mutableStateOf( - GetMyPointModel( - points = 0, - upDownPercent = 0.0, - upDownPoints = 0, - ) - ) - private set - internal fun getMyPoint() = viewModelScope.launch { getMyPointUseCase().onSuccess { it.catch { remoteError -> @@ -66,7 +59,7 @@ class MainViewModel @Inject constructor( it.catch { remoteError -> _getMyStockResponse.value = remoteError.errorHandling() }.collect { response -> - _getMyStockResponse.value = Event.Success(data = response) + _getMyStockResponse.value = Event.Success(data = response.toImmutableList()) } }.onFailure { error -> _getMyStockResponse.value = error.errorHandling() @@ -78,7 +71,7 @@ class MainViewModel @Inject constructor( it.catch { remoteError -> _getStockListResponse.value = remoteError.errorHandling() }.collect { response -> - _getStockListResponse.value = Event.Success(data = response) + _getStockListResponse.value = Event.Success(data = response.toImmutableList()) } }.onFailure { error -> _getStockListResponse.value = error.errorHandling()