From 9e0ee256fe2f24c89ffd23775436f59dabae7c26 Mon Sep 17 00:00:00 2001 From: youloveli Date: Mon, 19 Aug 2024 21:09:58 +0900 Subject: [PATCH 1/3] =?UTF-8?q?:fire:=20::=20myPoint=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/main/screen/MainScreen.kt | 47 +++++++------------ .../main/viewModel/MainViewModel.kt | 17 ++----- 2 files changed, 22 insertions(+), 42 deletions(-) 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..273ee2e 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 @@ -45,8 +47,8 @@ import com.jusiCool.presentation.main.component.PopularSummaryNewsData import com.jusiCool.presentation.main.viewModel.MainViewModel import com.jusiCool.presentation.utill.Event import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.immutableListOf import kotlinx.collections.immutable.persistentListOf -import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.delay const val mainRoute = "mainRoute" @@ -91,6 +93,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 +105,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 -> immutableListOf() + }, onRefresh = { viewModel.apply { getMyPoint() @@ -125,33 +139,6 @@ internal fun MainRoute( setIsSwipeRefreshLoading(false) } } - - 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) - } - } - } - } } val tempMyAccountData = MyAccountData(137871, -5778, 4.0f, 6) 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() From a296f84b884e881be4957b829a19f690756c9939 Mon Sep 17 00:00:00 2001 From: youloveli Date: Tue, 20 Aug 2024 08:08:16 +0900 Subject: [PATCH 2/3] =?UTF-8?q?:recycle:=20::=20onRefresh=EB=A5=BC=20?= =?UTF-8?q?=EC=9D=B4=EC=9A=A9=ED=95=9C=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=B4=88=EA=B8=B0=ED=99=94=20=EB=A1=9C=EC=A7=81=20route?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jusiCool/presentation/main/screen/MainScreen.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 273ee2e..50112e6 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 @@ -139,6 +139,14 @@ internal fun MainRoute( setIsSwipeRefreshLoading(false) } } + + LaunchedEffect(Unit) { + viewModel.apply { + getMyPoint() + getMyStock() + } + setIsSwipeRefreshLoading(true) + } } val tempMyAccountData = MyAccountData(137871, -5778, 4.0f, 6) @@ -161,10 +169,6 @@ internal fun MainScreen( navigateToCommunity: () -> Unit, navigateToHoldShareRoute: () -> Unit, ) { - LaunchedEffect(Unit) { - onRefresh() - } - SwipeRefresh( state = swipeRefreshState, onRefresh = onRefresh From c513f37e1c7e3aa8ad214936e0180d4e4dddd1dd Mon Sep 17 00:00:00 2001 From: youloveli Date: Tue, 20 Aug 2024 08:18:17 +0900 Subject: [PATCH 3/3] =?UTF-8?q?:recycle:=20::=20=EA=B6=8C=EC=9E=A5?= =?UTF-8?q?=EB=90=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20immutableListOf=20->?= =?UTF-8?q?=20persistentListOf=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jusiCool/presentation/main/screen/MainScreen.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 50112e6..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 @@ -47,7 +47,6 @@ import com.jusiCool.presentation.main.component.PopularSummaryNewsData import com.jusiCool.presentation.main.viewModel.MainViewModel import com.jusiCool.presentation.utill.Event import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.immutableListOf import kotlinx.collections.immutable.persistentListOf import kotlinx.coroutines.delay @@ -115,7 +114,7 @@ internal fun MainRoute( }, stockData = when (getMyStockResponse) { is Event.Success -> getMyStockResponse.data!! - else -> immutableListOf() + else -> persistentListOf() }, onRefresh = { viewModel.apply {