diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/BlockListScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/BlockListScreen.kt index 5c1534e4..19e6669d 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/BlockListScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/BlockListScreen.kt @@ -1,10 +1,13 @@ package com.bff.wespot.entire.screen.screen import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -14,6 +17,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp @@ -99,6 +103,12 @@ fun BlockListScreen( } } + if (state.isLoading) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() + } + } + LaunchedEffect(Unit) { action(EntireAction.OnBlockListScreenEntered) } diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireUiState.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireUiState.kt index 522f6bda..ee91a8a5 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireUiState.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireUiState.kt @@ -10,4 +10,5 @@ data class EntireUiState( val blockedMessageList: List = listOf(), val unBlockList: List = listOf(), val unBlockMessageId: Int = -1, + val isLoading: Boolean = false, ) diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/viewmodel/EntireViewModel.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/viewmodel/EntireViewModel.kt index 3690150e..f5ee7c7b 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/viewmodel/EntireViewModel.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/viewmodel/EntireViewModel.kt @@ -90,24 +90,22 @@ class EntireViewModel @Inject constructor( } private fun unblockMessage() = intent { - val messageId = state.unBlockMessageId - if (state.unBlockList.contains(messageId).not()) { - val updatedList = state.unBlockList.toMutableList().apply { add(messageId) } - reduce { state.copy(unBlockList = updatedList) } - } + reduce { state.copy(isLoading = true) } viewModelScope.launch { - messageStorageRepository.blockMessage(messageId) - .onFailure { - Timber.e(it) - // 차단 해제 실패 시, 차단 해제된 목록에서 삭제 - if (state.unBlockList.contains(messageId)) { + messageStorageRepository.blockMessage(state.unBlockMessageId) + .onSuccess { + if (state.unBlockList.contains(state.unBlockMessageId).not()) { val updatedList = state.unBlockList.toMutableList().apply { - remove(messageId) + add(state.unBlockMessageId) } - reduce { state.copy(unBlockList = updatedList) } + reduce { state.copy(unBlockList = updatedList, isLoading = false) } } } + .onFailure { + reduce { state.copy(isLoading = false) } + Timber.e(it) + } } }