From 37fed187621ed58bb08cbc89e47cacc5aad978da Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:35:50 +0900 Subject: [PATCH 01/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=98=88=EC=95=BD?= =?UTF-8?q?=EB=90=9C=20=EC=AA=BD=EC=A7=80=20=EB=AA=A9=EB=A1=9D=20common=20?= =?UTF-8?q?ui=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 --- .../com/bff/wespot/ui/ReservedMessageItem.kt | 107 ++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt diff --git a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt new file mode 100644 index 00000000..407b61a0 --- /dev/null +++ b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt @@ -0,0 +1,107 @@ +package com.bff.wespot.ui + +import android.graphics.Color.parseColor +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.FilterChip +import androidx.compose.material3.FilterChipDefaults +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import coil.compose.AsyncImage +import coil.request.ImageRequest +import com.bff.wespot.designsystem.theme.StaticTypeScale +import com.bff.wespot.designsystem.theme.WeSpotThemeManager +import com.bff.wespot.model.message.response.Message + +@Composable +fun ReservedMessageItem( + reservedMessage: Message, + chipText: String, + chipEnabled: Boolean, + chipDisabledText: String, + onClick: () -> Unit, +) { + Column { + Row( + modifier = Modifier.padding(start = 18.dp, end = 18.dp, top = 12.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + val profile = reservedMessage.receiver.profileCharacter + + Box( + modifier = Modifier + .size(42.dp) + .clip(CircleShape) + .background( + runCatching { + Color(parseColor(profile.backgroundColor)) + }.getOrDefault(WeSpotThemeManager.colors.cardBackgroundColor), + ), + contentAlignment = Alignment.Center, + ) { + AsyncImage( + model = ImageRequest.Builder(LocalContext.current) + .data(profile.iconUrl) + .crossfade(true) + .build(), + contentDescription = stringResource(com.bff.wespot.ui.R.string.user_character_image), + ) + } + + Column( + modifier = Modifier + .padding(horizontal = 10.dp) + .weight(1f), + ) { + Text( + text = stringResource(com.bff.wespot.designsystem.R.string.letter_receiver), + style = StaticTypeScale.Default.body6, + color = WeSpotThemeManager.colors.txtSubColor, + ) + + Text( + text = reservedMessage.receiver.toDescription(), + style = StaticTypeScale.Default.body6, + color = WeSpotThemeManager.colors.txtTitleColor, + ) + } + + FilterChip( + shape = WeSpotThemeManager.shapes.extraLarge, + onClick = { onClick() }, + selected = false, + label = { + Text( + text = if (chipEnabled) chipText else chipDisabledText, + style = StaticTypeScale.Default.body6, + ) + }, + enabled = chipEnabled, + border = null, + colors = FilterChipDefaults.filterChipColors( + containerColor = WeSpotThemeManager.colors.secondaryBtnColor, + labelColor = Color(0xFFF7F7F8), + ), + ) + } + + HorizontalDivider( + modifier = Modifier.padding(top = 24.dp, start = 24.dp, end = 24.dp), + thickness = 1.dp, + color = WeSpotThemeManager.colors.cardBackgroundColor, + ) + } +} From dc7076572936d099be1bb82114a0eb86ac0ed415 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:42:34 +0900 Subject: [PATCH 02/27] =?UTF-8?q?[FEATURE]#74=20:=20string=20Resource=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/ui/src/main/res/values/string.xml | 4 ---- core/ui/src/main/res/values/strings.xml | 2 ++ feature/entire/src/main/res/values/strings.xml | 2 ++ 3 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 core/ui/src/main/res/values/string.xml diff --git a/core/ui/src/main/res/values/string.xml b/core/ui/src/main/res/values/string.xml deleted file mode 100644 index 22ec7b9b..00000000 --- a/core/ui/src/main/res/values/string.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - school icon - \ No newline at end of file diff --git a/core/ui/src/main/res/values/strings.xml b/core/ui/src/main/res/values/strings.xml index 0dd384a0..4c7aa882 100644 --- a/core/ui/src/main/res/values/strings.xml +++ b/core/ui/src/main/res/values/strings.xml @@ -1,4 +1,6 @@ User Character Image + 수정하기 + school icon \ No newline at end of file diff --git a/feature/entire/src/main/res/values/strings.xml b/feature/entire/src/main/res/values/strings.xml index 8a94a48c..8b06c474 100644 --- a/feature/entire/src/main/res/values/strings.xml +++ b/feature/entire/src/main/res/values/strings.xml @@ -48,4 +48,6 @@ " • 탈퇴 후 계정을 복구하고 싶다면 15일(360시간)이\n 지나기 전에 가입한 계정으로 다시 로그인해 주세요" 모든 내용을 숙지하였고, 탈퇴에 동의합니다 탈퇴하기 + 차단 해제 + 해제 완료 \ No newline at end of file From f4ad9352279cff608d4219b7d2b27f0910fe7983 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:42:51 +0900 Subject: [PATCH 03/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=98=88=EC=95=BD?= =?UTF-8?q?=EB=90=9C=20=EC=AA=BD=EC=A7=80=20=EA=B3=B5=ED=86=B5=20ui=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt index 407b61a0..8ca9fc4d 100644 --- a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt +++ b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt @@ -30,8 +30,8 @@ import com.bff.wespot.model.message.response.Message fun ReservedMessageItem( reservedMessage: Message, chipText: String, - chipEnabled: Boolean, - chipDisabledText: String, + chipEnabled: Boolean = false, + chipDisabledText: String = "", onClick: () -> Unit, ) { Column { From 42b20cea76734b456d059adfceac86071ffec3a9 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:43:02 +0900 Subject: [PATCH 04/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=98=88=EC=95=BD?= =?UTF-8?q?=EB=90=9C=20=EC=AA=BD=EC=A7=80=20=EA=B3=B5=ED=86=B5=20ui=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/screen/ReservedMessageScreen.kt | 94 +------------------ 1 file changed, 2 insertions(+), 92 deletions(-) diff --git a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt index 396f2a9a..439b8601 100644 --- a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt +++ b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt @@ -1,22 +1,14 @@ package com.bff.wespot.message.screen -import android.graphics.Color.parseColor -import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.FilterChip -import androidx.compose.material3.FilterChipDefaults -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -27,14 +19,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel -import coil.compose.AsyncImage -import coil.request.ImageRequest import com.bff.wespot.designsystem.R.string import com.bff.wespot.designsystem.component.header.WSTopBar import com.bff.wespot.designsystem.component.indicator.WSToast @@ -47,7 +34,7 @@ import com.bff.wespot.message.state.MessageAction import com.bff.wespot.message.state.send.SendAction import com.bff.wespot.message.viewmodel.MessageViewModel import com.bff.wespot.message.viewmodel.SendViewModel -import com.bff.wespot.model.message.response.Message +import com.bff.wespot.ui.ReservedMessageItem import com.ramcosta.composedestinations.annotation.Destination import org.orbitmvi.orbit.compose.collectAsState @@ -105,6 +92,7 @@ fun ReservedMessageScreen( items(state.reservedMessageList, key = { message -> message.id }) { item -> ReservedMessageItem( reservedMessage = item, + chipText = stringResource(R.string.message_edit), onClick = { navigator.navigateMessageEditScreen( args = EditMessageScreenArgs(true, item.id), @@ -138,81 +126,3 @@ fun ReservedMessageScreen( showToast = navArgs.isMessageEdit } } - -@Composable -fun ReservedMessageItem( - reservedMessage: Message, - onClick: () -> Unit, -) { - Column { - Row( - modifier = Modifier.padding(start = 18.dp, end = 18.dp, top = 12.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - val profile = reservedMessage.receiver.profileCharacter - - Box( - modifier = Modifier - .size(42.dp) - .clip(CircleShape) - .background( - runCatching { - Color(parseColor(profile.backgroundColor)) - }.getOrDefault(WeSpotThemeManager.colors.cardBackgroundColor), - ), - contentAlignment = Alignment.Center, - ) { - AsyncImage( - model = ImageRequest.Builder(LocalContext.current) - .data(profile.iconUrl) - .crossfade(true) - .build(), - contentDescription = stringResource(com.bff.wespot.ui.R.string.user_character_image), - ) - } - - Column( - modifier = Modifier - .padding(horizontal = 10.dp) - .weight(1f), - ) { - Text( - text = stringResource(id = string.letter_receiver), - style = StaticTypeScale.Default.body6, - color = WeSpotThemeManager.colors.txtSubColor, - ) - - Text( - text = reservedMessage.receiver.toDescription(), - style = StaticTypeScale.Default.body6, - color = WeSpotThemeManager.colors.txtTitleColor, - ) - } - - FilterChip( - shape = WeSpotThemeManager.shapes.extraLarge, - onClick = { - onClick() - }, - selected = false, - label = { - Text( - text = stringResource(R.string.message_edit), - style = StaticTypeScale.Default.body6, - ) - }, - border = null, - colors = FilterChipDefaults.filterChipColors( - containerColor = WeSpotThemeManager.colors.secondaryBtnColor, - labelColor = Color(0xFFF7F7F8), - ), - ) - } - - HorizontalDivider( - modifier = Modifier.padding(top = 24.dp, start = 24.dp, end = 24.dp), - thickness = 1.dp, - color = WeSpotThemeManager.colors.cardBackgroundColor, - ) - } -} From 483d4223ed43c9649d382503d31a20314e3dea96 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:43:57 +0900 Subject: [PATCH 05/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20Intent=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bff/wespot/entire/screen/state/EntireAction.kt | 2 ++ .../java/com/bff/wespot/entire/screen/state/EntireUiState.kt | 3 +++ 2 files changed, 5 insertions(+) diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt index f17376dc..30c814b2 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt @@ -3,8 +3,10 @@ package com.bff.wespot.entire.screen.state sealed class EntireAction { data object OnEntireScreenEntered : EntireAction() data object OnRevokeScreenEntered : EntireAction() + data object OnBlockListScreenEntered : EntireAction() data object OnRevokeConfirmed : EntireAction() data object OnSignOutButtonClicked : EntireAction() data object OnRevokeButtonClicked : EntireAction() data class OnRevokeReasonSelected(val reason: String) : EntireAction() + data class UnBlockMessage(val messageId: Int) : EntireAction() } 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 dd6ffb5c..14cbb35c 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 @@ -1,9 +1,12 @@ package com.bff.wespot.entire.screen.state +import com.bff.wespot.model.message.response.Message import com.bff.wespot.model.user.response.Profile data class EntireUiState( val profile: Profile = Profile(), val revokeReasonList: List = listOf(), val revokeConfirmed: Boolean = false, + val blockList: List = listOf(), + val unBlockList: List = listOf(), ) From e7bd5b81054be464f53c8918dcc26c6ab8485d96 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:44:07 +0900 Subject: [PATCH 06/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=ED=95=B4=EC=A0=9C=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/viewmodel/EntireViewModel.kt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) 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 18b5dc5b..c52df2ab 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 @@ -3,7 +3,9 @@ package com.bff.wespot.entire.screen.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.bff.wespot.domain.repository.auth.AuthRepository +import com.bff.wespot.domain.repository.message.MessageStorageRepository import com.bff.wespot.domain.repository.user.UserRepository +import com.bff.wespot.domain.usecase.GetBlockedMessageListUseCase import com.bff.wespot.entire.screen.state.EntireAction import com.bff.wespot.entire.screen.state.EntireSideEffect import com.bff.wespot.entire.screen.state.EntireUiState @@ -22,6 +24,8 @@ import javax.inject.Inject class EntireViewModel @Inject constructor( private val userRepository: UserRepository, private val authRepository: AuthRepository, + private val getBlockedMessageListUseCase: GetBlockedMessageListUseCase, + private val messageStorageRepository: MessageStorageRepository, private val navigator: Navigator, ) : ViewModel(), ContainerHost { override val container = container(EntireUiState()) @@ -32,7 +36,9 @@ class EntireViewModel @Inject constructor( EntireAction.OnRevokeButtonClicked -> revokeUser() EntireAction.OnSignOutButtonClicked -> signOut() EntireAction.OnRevokeConfirmed -> handleRevokeConfirmed() + EntireAction.OnBlockListScreenEntered -> getUnBlockedMessage() is EntireAction.OnRevokeReasonSelected -> handleRevokeReasonSelected(action.reason) + is EntireAction.UnBlockMessage -> unblockMessage(action.messageId) } } @@ -68,6 +74,35 @@ class EntireViewModel @Inject constructor( } } + private fun getUnBlockedMessage() = intent { + viewModelScope.launch { + getBlockedMessageListUseCase(cursorId = 0) + .onSuccess { messageList -> + reduce { state.copy(blockList = messageList) } + } + .onFailure { + Timber.e(it) + } + } + } + + private fun unblockMessage(messageId: Int) = intent { + viewModelScope.launch { + messageStorageRepository.blockMessage(messageId) + .onSuccess { + val updatedList = state.unBlockList.toMutableList().apply { + if (contains(messageId).not()) { + add(messageId) + } + } + reduce { state.copy(unBlockList = updatedList) } + } + .onFailure { + Timber.e(it) + } + } + } + private fun handleRevokeReasonSelected(reason: String) = intent { reduce { val updatedList = state.revokeReasonList.toMutableList().apply { From 85d62e26fff6060db7b6f26b4e140bf692edee73 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:44:27 +0900 Subject: [PATCH 07/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8?= =?UTF-8?q?=EB=90=9C=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?Ui=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entire/screen/screen/BlockListScreen.kt | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/BlockListScreen.kt 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 new file mode 100644 index 00000000..3a4ae656 --- /dev/null +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/BlockListScreen.kt @@ -0,0 +1,82 @@ +package com.bff.wespot.entire.screen.screen + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import com.bff.wespot.designsystem.component.header.WSTopBar +import com.bff.wespot.designsystem.theme.StaticTypeScale +import com.bff.wespot.designsystem.theme.WeSpotThemeManager +import com.bff.wespot.entire.R +import com.bff.wespot.entire.screen.state.EntireAction +import com.bff.wespot.entire.screen.viewmodel.EntireViewModel +import com.bff.wespot.ui.ReservedMessageItem +import com.ramcosta.composedestinations.annotation.Destination +import org.orbitmvi.orbit.compose.collectAsState + +interface BlockListNavigator { + fun navigateUp() +} + +@OptIn(ExperimentalMaterial3Api::class) +@Destination +@Composable +fun BlockListScreen( + navigator: BlockListNavigator, + viewModel: EntireViewModel = hiltViewModel(), +) { + val action = viewModel::onAction + val state by viewModel.collectAsState() + + Scaffold( + topBar = { + WSTopBar( + title = "", + canNavigateBack = true, + navigateUp = { navigator.navigateUp() }, + ) + }, + ) { + Column( + modifier = Modifier.padding(it), + ) { + Text( + modifier = Modifier.padding(bottom = 16.dp, start = 24.dp, end = 24.dp), + text = stringResource(R.string.block_list), + style = StaticTypeScale.Default.header1, + color = WeSpotThemeManager.colors.txtTitleColor, + ) + + LazyColumn( + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + items(state.blockList, key = { message -> message.id }) { item -> + ReservedMessageItem( + reservedMessage = item, + chipText = stringResource(R.string.unblock), + chipEnabled = item.id in state.unBlockList, + chipDisabledText = stringResource(R.string.unblock_done), + onClick = { + action(EntireAction.UnBlockMessage(item.id)) + }, + ) + } + } + } + } + + LaunchedEffect(Unit) { + action(EntireAction.OnBlockListScreenEntered) + } +} From d17ad15ba2a8c26ff3d64e521ddf76772931247b Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:44:37 +0900 Subject: [PATCH 08/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8?= =?UTF-8?q?=EB=90=9C=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EC=A0=84=ED=99=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt | 2 ++ .../main/kotlin/com/bff/wespot/CommonNavGraphNavigator.kt | 7 +++++++ .../com/bff/wespot/entire/screen/screen/SettingScreen.kt | 2 ++ 3 files changed, 11 insertions(+) diff --git a/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt b/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt index 1a358284..d6d9dd16 100644 --- a/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt +++ b/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt @@ -14,6 +14,7 @@ import androidx.navigation.NavDestination.Companion.hierarchy import androidx.navigation.NavGraph import androidx.navigation.NavHostController import com.bff.wespot.entire.screen.screen.destinations.AccountSettingScreenDestination +import com.bff.wespot.entire.screen.screen.destinations.BlockListScreenDestination import com.bff.wespot.entire.screen.screen.destinations.EntireScreenDestination import com.bff.wespot.entire.screen.screen.destinations.NotificationSettingScreenDestination import com.bff.wespot.entire.screen.screen.destinations.RevokeConfirmScreenDestination @@ -83,6 +84,7 @@ object AppNavGraphs { AccountSettingScreenDestination, RevokeScreenDestination, RevokeConfirmScreenDestination, + BlockListScreenDestination, ).routedIn(this) .associateBy { it.route } } diff --git a/app/src/main/kotlin/com/bff/wespot/CommonNavGraphNavigator.kt b/app/src/main/kotlin/com/bff/wespot/CommonNavGraphNavigator.kt index 69fd5c13..9e38d55d 100644 --- a/app/src/main/kotlin/com/bff/wespot/CommonNavGraphNavigator.kt +++ b/app/src/main/kotlin/com/bff/wespot/CommonNavGraphNavigator.kt @@ -2,10 +2,12 @@ package com.bff.wespot import androidx.navigation.NavController import com.bff.wespot.entire.screen.screen.AccountSettingNavigator +import com.bff.wespot.entire.screen.screen.BlockListNavigator import com.bff.wespot.entire.screen.screen.EntireNavigator import com.bff.wespot.entire.screen.screen.NotificationSettingNavigator import com.bff.wespot.entire.screen.screen.SettingNavigator import com.bff.wespot.entire.screen.screen.destinations.AccountSettingScreenDestination +import com.bff.wespot.entire.screen.screen.destinations.BlockListScreenDestination import com.bff.wespot.entire.screen.screen.destinations.NotificationSettingScreenDestination import com.bff.wespot.entire.screen.screen.destinations.RevokeConfirmScreenDestination import com.bff.wespot.entire.screen.screen.destinations.RevokeScreenDestination @@ -56,6 +58,7 @@ class CommonNavGraphNavigator( AccountSettingNavigator, RevokeNavigator, RevokeConfirmNavigator, + BlockListNavigator, VotingNavigator, VoteResultNavigator, VoteStorageNavigator, @@ -131,4 +134,8 @@ class CommonNavGraphNavigator( override fun navigateToIndividualVote(args: IndividualVoteArgs) { navController.navigate(IndividualVoteScreenDestination(args) within navGraph) } + + override fun navigateToBlockListScreen() { + navController.navigate(BlockListScreenDestination within navGraph) + } } diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt index 91b96eb4..13342f20 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt @@ -26,6 +26,7 @@ interface SettingNavigator { fun navigateUp() fun navigateToNotificationSetting() fun navigateToAccountSetting() + fun navigateToBlockListScreen() } @OptIn(ExperimentalMaterial3Api::class) @@ -83,6 +84,7 @@ fun SettingScreen( ) EntireListItem(text = stringResource(R.string.block_list)) { + navigator.navigateToBlockListScreen() } EntireListItem(text = stringResource(R.string.account_setting)) { From 6aaf6598fcd902d738cabae6fab06258f70eb718 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sat, 3 Aug 2024 15:44:46 +0900 Subject: [PATCH 09/27] =?UTF-8?q?[FEATURE]#74=20:=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=ED=95=84=ED=84=B0=EB=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usecase/GetBlockedMessageListUseCase.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt diff --git a/domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt b/domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt new file mode 100644 index 00000000..3c9643c9 --- /dev/null +++ b/domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt @@ -0,0 +1,15 @@ +package com.bff.wespot.domain.usecase + +import com.bff.wespot.domain.repository.message.MessageRepository +import com.bff.wespot.model.message.request.MessageType +import com.bff.wespot.model.message.response.Message +import javax.inject.Inject + +class GetBlockedMessageListUseCase @Inject constructor( + private val messageRepository: MessageRepository, +) { + suspend operator fun invoke(cursorId: Int): Result> = + messageRepository.getMessageList(MessageType.RECEIVED, cursorId).mapCatching { + it.messages.filter { it.isBlocked } + } +} From fce753427afc0dfbd25272d09d00b32d2133aafd Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:08:54 +0900 Subject: [PATCH 10/27] =?UTF-8?q?[FEATURE]#74=20:=20Sender=20Model=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bff/wespot/model/message/Sender.kt | 9 +++++++++ .../remote/model/message/response/SenderDto.kt | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 core/model/src/main/kotlin/com/bff/wespot/model/message/Sender.kt create mode 100644 data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/SenderDto.kt diff --git a/core/model/src/main/kotlin/com/bff/wespot/model/message/Sender.kt b/core/model/src/main/kotlin/com/bff/wespot/model/message/Sender.kt new file mode 100644 index 00000000..1ef7d0db --- /dev/null +++ b/core/model/src/main/kotlin/com/bff/wespot/model/message/Sender.kt @@ -0,0 +1,9 @@ +package com.bff.wespot.model.message + +data class Sender( + val id: Int, + val backgroundColor: String, + val iconUrl: String, +) { + constructor() : this(-1, "", "") +} diff --git a/data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/SenderDto.kt b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/SenderDto.kt new file mode 100644 index 00000000..8227af7c --- /dev/null +++ b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/SenderDto.kt @@ -0,0 +1,17 @@ +package com.bff.wespot.data.remote.model.message.response + +import com.bff.wespot.model.message.Sender +import kotlinx.serialization.Serializable + +@Serializable +data class SenderDto ( + val id: Int, + val backgroundColor: String, + val iconUrl: String, +) { + fun toSender(): Sender = Sender( + id = id, + backgroundColor = backgroundColor, + iconUrl = iconUrl, + ) +} \ No newline at end of file From 2652e7c00bc8723a044137f50599d642e3d7ee0b Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:09:02 +0900 Subject: [PATCH 11/27] =?UTF-8?q?[FEATURE]#74=20:=20BlockedMessage=20Model?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/message/response/BlockedMessage.kt | 19 ++++++++++ .../message/response/BlockedMessageDto.kt | 36 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 core/model/src/main/kotlin/com/bff/wespot/model/message/response/BlockedMessage.kt create mode 100644 data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/BlockedMessageDto.kt diff --git a/core/model/src/main/kotlin/com/bff/wespot/model/message/response/BlockedMessage.kt b/core/model/src/main/kotlin/com/bff/wespot/model/message/response/BlockedMessage.kt new file mode 100644 index 00000000..7039e67e --- /dev/null +++ b/core/model/src/main/kotlin/com/bff/wespot/model/message/response/BlockedMessage.kt @@ -0,0 +1,19 @@ +package com.bff.wespot.model.message.response + +import com.bff.wespot.model.message.Sender +import com.bff.wespot.model.user.response.User +import java.time.LocalDateTime + +data class BlockedMessage( + val id: Int, + val senderName: String, + val senderProfile: Sender, + val receiver: User, + val content: String, + val receivedAt: LocalDateTime?, + val isRead: Boolean, + val isReported: Boolean, + val isBlocked: Boolean, +) { + constructor() : this(-1, "", Sender(), User(), "", LocalDateTime.MIN, false, false, false) +} diff --git a/data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/BlockedMessageDto.kt b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/BlockedMessageDto.kt new file mode 100644 index 00000000..6dfc88d5 --- /dev/null +++ b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/model/message/response/BlockedMessageDto.kt @@ -0,0 +1,36 @@ +package com.bff.wespot.data.remote.model.message.response + +import com.bff.wespot.data.remote.extensions.toISOLocalDateTime +import com.bff.wespot.data.remote.model.user.response.UserDto +import com.bff.wespot.model.message.response.BlockedMessage +import kotlinx.serialization.Serializable + +@Serializable +data class BlockedMessageListDto( + val messages: List, +) + +@Serializable +data class BlockedMessageDto( + val id: Int, + val senderName: String, + val senderProfile: SenderDto, + val receiver: UserDto, + val content: String, + val receivedAt: String?, + val isRead: Boolean, + val isReported: Boolean, + val isBlocked: Boolean, +) { + fun toBlockedMessage(): BlockedMessage = BlockedMessage( + id = id, + senderName = senderName, + senderProfile = senderProfile.toSender(), + receiver = receiver.toUser(), + content = content, + receivedAt = receivedAt?.toISOLocalDateTime(), + isRead = isRead, + isReported = isReported, + isBlocked = isBlocked, + ) +} From 8c00846338b6916a6483a7c543bb727ec5b455a6 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:09:31 +0900 Subject: [PATCH 12/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8?= =?UTF-8?q?=EB=90=9C=20=EC=AA=BD=EC=A7=80=20=EB=AA=A9=EB=A1=9D=20API=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/remote/source/message/MessageDataSource.kt | 4 ++++ .../remote/source/message/MessageDataSourceImpl.kt | 10 ++++++++++ .../data/repository/message/MessageRepositoryImpl.kt | 6 ++++++ .../domain/repository/message/MessageRepository.kt | 3 +++ 4 files changed, 23 insertions(+) diff --git a/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSource.kt b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSource.kt index 3e1aa7bc..4f99f112 100644 --- a/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSource.kt +++ b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSource.kt @@ -3,10 +3,12 @@ package com.bff.wespot.data.remote.source.message import com.bff.wespot.data.remote.model.message.request.MessageContentDto import com.bff.wespot.data.remote.model.message.request.MessageTypeDto import com.bff.wespot.data.remote.model.message.request.SentMessageDto +import com.bff.wespot.data.remote.model.message.response.BlockedMessageListDto import com.bff.wespot.data.remote.model.message.response.MessageDto import com.bff.wespot.data.remote.model.message.response.MessageIdDto import com.bff.wespot.data.remote.model.message.response.MessageListDto import com.bff.wespot.data.remote.model.message.response.MessageStatusDto +import com.bff.wespot.model.message.response.Message interface MessageDataSource { suspend fun getMessageList( @@ -23,4 +25,6 @@ interface MessageDataSource { suspend fun editMessage(messageId: Int, sentMessageDto: SentMessageDto): Result suspend fun getMessage(messageId: Int): Result + + suspend fun getBlockedMessage(cursorId: Int): Result } diff --git a/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSourceImpl.kt b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSourceImpl.kt index ad76dc12..c9505966 100644 --- a/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSourceImpl.kt +++ b/data-remote/src/main/kotlin/com/bff/wespot/data/remote/source/message/MessageDataSourceImpl.kt @@ -4,6 +4,7 @@ import com.bff.wespot.data.remote.model.message.request.MessageContentDto import com.bff.wespot.data.remote.model.message.request.MessageTypeDto import com.bff.wespot.data.remote.model.message.request.SentMessageDto import com.bff.wespot.data.remote.model.message.request.type +import com.bff.wespot.data.remote.model.message.response.BlockedMessageListDto import com.bff.wespot.data.remote.model.message.response.MessageDto import com.bff.wespot.data.remote.model.message.response.MessageIdDto import com.bff.wespot.data.remote.model.message.response.MessageListDto @@ -75,4 +76,13 @@ class MessageDataSourceImpl @Inject constructor( path("messages/$messageId") } } + + override suspend fun getBlockedMessage(cursorId: Int): Result = + httpClient.safeRequest { + url { + method = HttpMethod.Get + path("messages/blocked") + parameter("cursorId", cursorId) + } + } } diff --git a/data/src/main/kotlin/com/bff/wespot/data/repository/message/MessageRepositoryImpl.kt b/data/src/main/kotlin/com/bff/wespot/data/repository/message/MessageRepositoryImpl.kt index 5c82186b..42c0c97e 100644 --- a/data/src/main/kotlin/com/bff/wespot/data/repository/message/MessageRepositoryImpl.kt +++ b/data/src/main/kotlin/com/bff/wespot/data/repository/message/MessageRepositoryImpl.kt @@ -9,6 +9,7 @@ import com.bff.wespot.model.message.request.MessageType import com.bff.wespot.model.message.request.SentMessage import com.bff.wespot.model.message.response.MessageStatus import com.bff.wespot.data.remote.source.message.MessageDataSource +import com.bff.wespot.model.message.response.BlockedMessage import com.bff.wespot.model.message.response.Message import javax.inject.Inject @@ -47,4 +48,9 @@ class MessageRepositoryImpl @Inject constructor( messageDataSource.getMessage(messageId).mapCatching { messageDto -> messageDto.toMessage() } + + override suspend fun getBlockedMessage(cursorId: Int): Result> = + messageDataSource.getBlockedMessage(cursorId).mapCatching { listDto -> + listDto.messages.map { it.toBlockedMessage() } + } } diff --git a/domain/src/main/kotlin/com/bff/wespot/domain/repository/message/MessageRepository.kt b/domain/src/main/kotlin/com/bff/wespot/domain/repository/message/MessageRepository.kt index 8a2cd753..7d4ed20f 100644 --- a/domain/src/main/kotlin/com/bff/wespot/domain/repository/message/MessageRepository.kt +++ b/domain/src/main/kotlin/com/bff/wespot/domain/repository/message/MessageRepository.kt @@ -2,6 +2,7 @@ package com.bff.wespot.domain.repository.message import com.bff.wespot.model.message.request.MessageType import com.bff.wespot.model.message.request.SentMessage +import com.bff.wespot.model.message.response.BlockedMessage import com.bff.wespot.model.message.response.Message import com.bff.wespot.model.message.response.MessageList import com.bff.wespot.model.message.response.MessageStatus @@ -18,4 +19,6 @@ interface MessageRepository { suspend fun editMessage(messageId: Int, sentMessage: SentMessage): Result suspend fun getMessage(messageId: Int): Result + + suspend fun getBlockedMessage(cursorId: Int): Result> } From 95100887f1d75809b3a5f3945de36316dacc646e Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:10:18 +0900 Subject: [PATCH 13/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8?= =?UTF-8?q?=EB=90=9C=20=EC=AA=BD=EC=A7=80=20=EB=AA=A9=EB=A1=9D=20=EC=9C=A0?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EC=86=8C=EA=B1=B0=20?= =?UTF-8?q?=EB=B0=8F=20MessageRepository=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 --- .../usecase/GetBlockedMessageListUseCase.kt | 15 --------------- .../entire/screen/viewmodel/EntireViewModel.kt | 10 +++++----- 2 files changed, 5 insertions(+), 20 deletions(-) delete mode 100644 domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt diff --git a/domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt b/domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt deleted file mode 100644 index 3c9643c9..00000000 --- a/domain/src/main/kotlin/com/bff/wespot/domain/usecase/GetBlockedMessageListUseCase.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.bff.wespot.domain.usecase - -import com.bff.wespot.domain.repository.message.MessageRepository -import com.bff.wespot.model.message.request.MessageType -import com.bff.wespot.model.message.response.Message -import javax.inject.Inject - -class GetBlockedMessageListUseCase @Inject constructor( - private val messageRepository: MessageRepository, -) { - suspend operator fun invoke(cursorId: Int): Result> = - messageRepository.getMessageList(MessageType.RECEIVED, cursorId).mapCatching { - it.messages.filter { it.isBlocked } - } -} 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 c52df2ab..8fe4d304 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 @@ -3,9 +3,9 @@ package com.bff.wespot.entire.screen.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.bff.wespot.domain.repository.auth.AuthRepository +import com.bff.wespot.domain.repository.message.MessageRepository import com.bff.wespot.domain.repository.message.MessageStorageRepository import com.bff.wespot.domain.repository.user.UserRepository -import com.bff.wespot.domain.usecase.GetBlockedMessageListUseCase import com.bff.wespot.entire.screen.state.EntireAction import com.bff.wespot.entire.screen.state.EntireSideEffect import com.bff.wespot.entire.screen.state.EntireUiState @@ -24,7 +24,7 @@ import javax.inject.Inject class EntireViewModel @Inject constructor( private val userRepository: UserRepository, private val authRepository: AuthRepository, - private val getBlockedMessageListUseCase: GetBlockedMessageListUseCase, + private val messageRepository: MessageRepository, private val messageStorageRepository: MessageStorageRepository, private val navigator: Navigator, ) : ViewModel(), ContainerHost { @@ -76,9 +76,9 @@ class EntireViewModel @Inject constructor( private fun getUnBlockedMessage() = intent { viewModelScope.launch { - getBlockedMessageListUseCase(cursorId = 0) - .onSuccess { messageList -> - reduce { state.copy(blockList = messageList) } + messageRepository.getBlockedMessage(cursorId = 0) // TODO Cursor Paging + .onSuccess { blockedMessageList -> + reduce { state.copy(blockedMessageList = blockedMessageList) } } .onFailure { Timber.e(it) From 31b0025c00b3f483b1dc7aeaad167704742c7db2 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:10:37 +0900 Subject: [PATCH 14/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8?= =?UTF-8?q?=EB=90=9C=20=EB=A9=94=EC=84=B8=EC=A7=80=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?BlockedMessageList=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bff/wespot/entire/screen/state/EntireUiState.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 14cbb35c..93146076 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 @@ -1,12 +1,12 @@ package com.bff.wespot.entire.screen.state -import com.bff.wespot.model.message.response.Message +import com.bff.wespot.model.message.response.BlockedMessage import com.bff.wespot.model.user.response.Profile data class EntireUiState( val profile: Profile = Profile(), val revokeReasonList: List = listOf(), val revokeConfirmed: Boolean = false, - val blockList: List = listOf(), + val blockedMessageList: List = listOf(), val unBlockList: List = listOf(), ) From e9c051db468a478bb717cf985e0a3baedd687830 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:12:17 +0900 Subject: [PATCH 15/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=AA=BD=EC=A7=80=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EA=B3=B5?= =?UTF-8?q?=ED=86=B5=20UI=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0,=20Messag?= =?UTF-8?q?e=20->=20=EA=B0=81=20=ED=83=80=EC=9D=B4=ED=8B=80=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bff/wespot/ui/ReservedMessageItem.kt | 18 +++++++++--------- .../entire/screen/screen/BlockListScreen.kt | 13 +++++++------ .../message/screen/ReservedMessageScreen.kt | 5 ++++- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt index 8ca9fc4d..d8c9ffde 100644 --- a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt +++ b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt @@ -24,13 +24,15 @@ import coil.compose.AsyncImage import coil.request.ImageRequest import com.bff.wespot.designsystem.theme.StaticTypeScale import com.bff.wespot.designsystem.theme.WeSpotThemeManager -import com.bff.wespot.model.message.response.Message @Composable fun ReservedMessageItem( - reservedMessage: Message, + title: String, + subTitle: String, + backgroundColor: String, + iconUrl: String, chipText: String, - chipEnabled: Boolean = false, + chipEnabled: Boolean = true, chipDisabledText: String = "", onClick: () -> Unit, ) { @@ -39,22 +41,20 @@ fun ReservedMessageItem( modifier = Modifier.padding(start = 18.dp, end = 18.dp, top = 12.dp), verticalAlignment = Alignment.CenterVertically, ) { - val profile = reservedMessage.receiver.profileCharacter - Box( modifier = Modifier .size(42.dp) .clip(CircleShape) .background( runCatching { - Color(parseColor(profile.backgroundColor)) + Color(parseColor(backgroundColor)) }.getOrDefault(WeSpotThemeManager.colors.cardBackgroundColor), ), contentAlignment = Alignment.Center, ) { AsyncImage( model = ImageRequest.Builder(LocalContext.current) - .data(profile.iconUrl) + .data(iconUrl) .crossfade(true) .build(), contentDescription = stringResource(com.bff.wespot.ui.R.string.user_character_image), @@ -67,13 +67,13 @@ fun ReservedMessageItem( .weight(1f), ) { Text( - text = stringResource(com.bff.wespot.designsystem.R.string.letter_receiver), + text = title, style = StaticTypeScale.Default.body6, color = WeSpotThemeManager.colors.txtSubColor, ) Text( - text = reservedMessage.receiver.toDescription(), + text = subTitle, style = StaticTypeScale.Default.body6, color = WeSpotThemeManager.colors.txtTitleColor, ) 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 3a4ae656..d7c7e5fe 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 @@ -58,14 +58,15 @@ fun BlockListScreen( color = WeSpotThemeManager.colors.txtTitleColor, ) - LazyColumn( - verticalArrangement = Arrangement.spacedBy(12.dp), - ) { - items(state.blockList, key = { message -> message.id }) { item -> + LazyColumn(verticalArrangement = Arrangement.spacedBy(12.dp)) { + items(state.blockedMessageList, key = { message -> message.id }) { item -> ReservedMessageItem( - reservedMessage = item, + title = stringResource(com.bff.wespot.designsystem.R.string.letter_sender), + subTitle = item.senderName, + backgroundColor = item.senderProfile.backgroundColor, + iconUrl = item.senderProfile.iconUrl, chipText = stringResource(R.string.unblock), - chipEnabled = item.id in state.unBlockList, + chipEnabled = item.id !in state.unBlockList, chipDisabledText = stringResource(R.string.unblock_done), onClick = { action(EntireAction.UnBlockMessage(item.id)) diff --git a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt index 439b8601..d3ce58c0 100644 --- a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt +++ b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/ReservedMessageScreen.kt @@ -91,7 +91,10 @@ fun ReservedMessageScreen( ) { items(state.reservedMessageList, key = { message -> message.id }) { item -> ReservedMessageItem( - reservedMessage = item, + title = stringResource(string.letter_receiver), + subTitle = item.receiver.toDescription(), + backgroundColor = item.receiver.profileCharacter.backgroundColor, + iconUrl = item.receiver.profileCharacter.iconUrl, chipText = stringResource(R.string.message_edit), onClick = { navigator.navigateMessageEditScreen( From 5d5decdc2b0647c8c9a59502789a1693100518d0 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:25:08 +0900 Subject: [PATCH 16/27] =?UTF-8?q?[FEATURE]#74=20:=20Navigator=20=EC=A0=84?= =?UTF-8?q?=EC=97=AD=20=EC=A3=BC=EC=9E=85=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bff/wespot/entire/screen/screen/AccountSettingScreen.kt | 4 +++- .../entire/screen/screen/revoke/RevokeConfirmScreen.kt | 4 +++- .../com/bff/wespot/entire/screen/state/EntireSideEffect.kt | 4 +--- .../bff/wespot/entire/screen/viewmodel/EntireViewModel.kt | 6 ++---- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt index 057a36c4..d939e692 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt @@ -27,6 +27,7 @@ import com.bff.wespot.entire.R import com.bff.wespot.entire.screen.state.EntireAction import com.bff.wespot.entire.screen.state.EntireSideEffect import com.bff.wespot.entire.screen.viewmodel.EntireViewModel +import com.bff.wespot.navigation.Navigator import com.ramcosta.composedestinations.annotation.Destination import org.orbitmvi.orbit.compose.collectSideEffect @@ -40,6 +41,7 @@ interface AccountSettingNavigator { @Composable fun AccountSettingScreen( navigator: AccountSettingNavigator, + activityNavigator: Navigator, viewModel: EntireViewModel = hiltViewModel(), ) { val context = LocalContext.current @@ -50,7 +52,7 @@ fun AccountSettingScreen( viewModel.collectSideEffect { when (it) { is EntireSideEffect.NavigateToAuth -> { - val intent = it.navigator.navigateToAuth(context) + val intent = activityNavigator.navigateToAuth(context) context.startActivity(intent) } } diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt index a754b5f0..1d6d2262 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt @@ -38,6 +38,7 @@ import com.bff.wespot.entire.R import com.bff.wespot.entire.screen.state.EntireAction import com.bff.wespot.entire.screen.state.EntireSideEffect import com.bff.wespot.entire.screen.viewmodel.EntireViewModel +import com.bff.wespot.navigation.Navigator import com.bff.wespot.navigation.util.EXTRA_TOAST_MESSAGE import com.bff.wespot.ui.WSBottomSheet import com.ramcosta.composedestinations.annotation.Destination @@ -54,6 +55,7 @@ interface RevokeConfirmNavigator { @Composable fun RevokeConfirmScreen( navigator: RevokeConfirmNavigator, + activityNavigator: Navigator, viewModel: EntireViewModel = hiltViewModel(), ) { val context = LocalContext.current @@ -66,7 +68,7 @@ fun RevokeConfirmScreen( viewModel.collectSideEffect { when (it) { is EntireSideEffect.NavigateToAuth -> { - val intent = it.navigator.navigateToAuth(context) + val intent = activityNavigator.navigateToAuth(context) intent.putExtra(EXTRA_TOAST_MESSAGE, context.getString(R.string.revoke_done)) context.startActivity(intent) } diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireSideEffect.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireSideEffect.kt index c54521de..521ee8d4 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireSideEffect.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireSideEffect.kt @@ -1,7 +1,5 @@ package com.bff.wespot.entire.screen.state -import com.bff.wespot.navigation.Navigator - sealed class EntireSideEffect { - data class NavigateToAuth(val navigator: Navigator) : EntireSideEffect() + data object NavigateToAuth : EntireSideEffect() } 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 8fe4d304..3afea8ac 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 @@ -9,7 +9,6 @@ import com.bff.wespot.domain.repository.user.UserRepository import com.bff.wespot.entire.screen.state.EntireAction import com.bff.wespot.entire.screen.state.EntireSideEffect import com.bff.wespot.entire.screen.state.EntireUiState -import com.bff.wespot.navigation.Navigator import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import org.orbitmvi.orbit.ContainerHost @@ -26,7 +25,6 @@ class EntireViewModel @Inject constructor( private val authRepository: AuthRepository, private val messageRepository: MessageRepository, private val messageStorageRepository: MessageStorageRepository, - private val navigator: Navigator, ) : ViewModel(), ContainerHost { override val container = container(EntireUiState()) @@ -59,7 +57,7 @@ class EntireViewModel @Inject constructor( // TODO Token 삭제 authRepository.revoke(state.revokeReasonList) .onSuccess { - postSideEffect(EntireSideEffect.NavigateToAuth(navigator)) + postSideEffect(EntireSideEffect.NavigateToAuth) } .onFailure { Timber.e(it) @@ -70,7 +68,7 @@ class EntireViewModel @Inject constructor( private fun signOut() = intent { viewModelScope.launch { // TODO Token 삭제 - postSideEffect(EntireSideEffect.NavigateToAuth(navigator)) + postSideEffect(EntireSideEffect.NavigateToAuth) } } From 761c911b4d88a24c9065c7ba33824925ca0a9890 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:35:48 +0900 Subject: [PATCH 17/27] =?UTF-8?q?[FEATURE]#74=20:=20Navigator=20=EC=A0=84?= =?UTF-8?q?=EC=97=AD=20=EC=A3=BC=EC=9E=85=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/kotlin/com/bff/wespot/AppNavGraphs.kt | 3 +++ .../main/kotlin/com/bff/wespot/MainActivity.kt | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt b/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt index d6d9dd16..ea4a0b1a 100644 --- a/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt +++ b/app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt @@ -26,6 +26,7 @@ import com.bff.wespot.message.screen.destinations.MessageWriteScreenDestination import com.bff.wespot.message.screen.destinations.ReceiverSelectionScreenDestination import com.bff.wespot.message.screen.destinations.ReservedMessageScreenDestination import com.bff.wespot.message.viewmodel.SendViewModel +import com.bff.wespot.navigation.Navigator import com.bff.wespot.vote.screen.destinations.IndividualVoteScreenDestination import com.bff.wespot.vote.screen.destinations.VoteHomeScreenDestination import com.bff.wespot.vote.screen.destinations.VoteResultScreenDestination @@ -142,6 +143,7 @@ fun DestinationScopeWithNoDependencies<*>.currentNavigator(): CommonNavGraphNavi @Composable internal fun AppNavigation( navController: NavHostController, + navigator: Navigator, modifier: Modifier = Modifier, ) { val engine = rememberNavHostEngine( @@ -161,6 +163,7 @@ internal fun AppNavigation( modifier = modifier, dependenciesContainerBuilder = { dependency(currentNavigator()) + dependency(navigator) dependency(sendViewModel) dependency(votingViewModel) }, diff --git a/app/src/main/kotlin/com/bff/wespot/MainActivity.kt b/app/src/main/kotlin/com/bff/wespot/MainActivity.kt index db8fcc9c..b09503f5 100644 --- a/app/src/main/kotlin/com/bff/wespot/MainActivity.kt +++ b/app/src/main/kotlin/com/bff/wespot/MainActivity.kt @@ -40,19 +40,24 @@ import com.bff.wespot.designsystem.component.header.WSTopBar import com.bff.wespot.designsystem.theme.StaticTypeScale import com.bff.wespot.designsystem.theme.WeSpotTheme import com.bff.wespot.designsystem.theme.WeSpotThemeManager +import com.bff.wespot.navigation.Navigator import com.ramcosta.composedestinations.navigation.navigate import com.ramcosta.composedestinations.spec.NavGraphSpec import dagger.hilt.android.AndroidEntryPoint import timber.log.Timber +import javax.inject.Inject @AndroidEntryPoint class MainActivity : ComponentActivity() { + @Inject + lateinit var navigator: Navigator + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { WeSpotTheme { - MainScreen() + MainScreen(navigator) } } } @@ -60,7 +65,7 @@ class MainActivity : ComponentActivity() { @OptIn(ExperimentalMaterial3Api::class) @Composable -private fun MainScreen() { +private fun MainScreen(navigator: Navigator) { val navController = rememberNavController() val checkScreen by navController.checkCurrentScreen() @@ -118,7 +123,11 @@ private fun MainScreen() { } }, ) { - AppNavigation(navController = navController, modifier = Modifier.padding(it)) + AppNavigation( + navController = navController, + modifier = Modifier.padding(it), + navigator = navigator, + ) } } From e349bcda18475e91727a38f68e63e3205fcdc92a Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Sun, 4 Aug 2024 23:38:27 +0900 Subject: [PATCH 18/27] =?UTF-8?q?[FEATURE]#74=20:=20Navigator=20=EC=A0=84?= =?UTF-8?q?=EC=97=AD=20=EC=A3=BC=EC=9E=85=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/kotlin/com/bff/wespot/MainActivity.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/bff/wespot/MainActivity.kt b/app/src/main/kotlin/com/bff/wespot/MainActivity.kt index b09503f5..5142cd18 100644 --- a/app/src/main/kotlin/com/bff/wespot/MainActivity.kt +++ b/app/src/main/kotlin/com/bff/wespot/MainActivity.kt @@ -123,11 +123,7 @@ private fun MainScreen(navigator: Navigator) { } }, ) { - AppNavigation( - navController = navController, - modifier = Modifier.padding(it), - navigator = navigator, - ) + AppNavigation(navController = navController, navigator, modifier = Modifier.padding(it)) } } From 76d05f9da2fa4f00766e6266d087c4033fab8b20 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Mon, 5 Aug 2024 00:26:25 +0900 Subject: [PATCH 19/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=ED=95=B4=EC=A0=9C=20=EB=B2=84=ED=8A=BC=20=ED=81=B4=EB=A6=AD?= =?UTF-8?q?=EC=8B=9C=20=EB=AA=A8=EB=8B=AC=20=ED=8C=9D=EC=97=85=20=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entire/screen/screen/BlockListScreen.kt | 24 ++++++++++++++++++- .../entire/screen/state/EntireAction.kt | 3 ++- .../entire/screen/state/EntireUiState.kt | 1 + .../entire/src/main/res/values/strings.xml | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) 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 d7c7e5fe..419f7170 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 @@ -11,11 +11,15 @@ import androidx.compose.material3.Text 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.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.bff.wespot.designsystem.component.header.WSTopBar +import com.bff.wespot.designsystem.component.modal.WSDialog import com.bff.wespot.designsystem.theme.StaticTypeScale import com.bff.wespot.designsystem.theme.WeSpotThemeManager import com.bff.wespot.entire.R @@ -36,6 +40,8 @@ fun BlockListScreen( navigator: BlockListNavigator, viewModel: EntireViewModel = hiltViewModel(), ) { + var showDialog by remember { mutableStateOf(false) } + val action = viewModel::onAction val state by viewModel.collectAsState() @@ -69,12 +75,28 @@ fun BlockListScreen( chipEnabled = item.id !in state.unBlockList, chipDisabledText = stringResource(R.string.unblock_done), onClick = { - action(EntireAction.UnBlockMessage(item.id)) + action(EntireAction.OnUnBlockButtonClicked(item.id)) + showDialog = true }, ) } } } + + if (showDialog) { + WSDialog( + title = stringResource(R.string.unblock_dialog_title), + subTitle = "", + okButtonText = stringResource(R.string.unblock), + cancelButtonText = stringResource(R.string.close), + okButtonClick = { + action(EntireAction.UnBlockMessage) + showDialog = false + }, + cancelButtonClick = { showDialog = false }, + onDismissRequest = { showDialog = false }, + ) + } } LaunchedEffect(Unit) { diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt index 30c814b2..d136f602 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/state/EntireAction.kt @@ -7,6 +7,7 @@ sealed class EntireAction { data object OnRevokeConfirmed : EntireAction() data object OnSignOutButtonClicked : EntireAction() data object OnRevokeButtonClicked : EntireAction() + data object UnBlockMessage : EntireAction() + data class OnUnBlockButtonClicked(val messageId: Int) : EntireAction() data class OnRevokeReasonSelected(val reason: String) : EntireAction() - data class UnBlockMessage(val messageId: Int) : EntireAction() } 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 93146076..522f6bda 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 @@ -9,4 +9,5 @@ data class EntireUiState( val revokeConfirmed: Boolean = false, val blockedMessageList: List = listOf(), val unBlockList: List = listOf(), + val unBlockMessageId: Int = -1, ) diff --git a/feature/entire/src/main/res/values/strings.xml b/feature/entire/src/main/res/values/strings.xml index 8b06c474..6e19b471 100644 --- a/feature/entire/src/main/res/values/strings.xml +++ b/feature/entire/src/main/res/values/strings.xml @@ -50,4 +50,5 @@ 탈퇴하기 차단 해제 해제 완료 + 차단 해제하시나요? \ No newline at end of file From 69b74f4d4453d62011837147ec4c2c3d5ec85b84 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Mon, 5 Aug 2024 00:26:49 +0900 Subject: [PATCH 20/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=ED=95=B4=EC=A0=9C=20=EB=B2=84=ED=8A=BC=20=ED=81=B4=EB=A6=AD?= =?UTF-8?q?=EC=8B=9C=20=EB=B2=84=ED=8A=BC=20disabled=20=ED=9B=84=20API=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/viewmodel/EntireViewModel.kt | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) 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 3afea8ac..3690150e 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 @@ -35,8 +35,9 @@ class EntireViewModel @Inject constructor( EntireAction.OnSignOutButtonClicked -> signOut() EntireAction.OnRevokeConfirmed -> handleRevokeConfirmed() EntireAction.OnBlockListScreenEntered -> getUnBlockedMessage() + EntireAction.UnBlockMessage -> unblockMessage() + is EntireAction.OnUnBlockButtonClicked -> handleUnBlockButtonClicked(action.messageId) is EntireAction.OnRevokeReasonSelected -> handleRevokeReasonSelected(action.reason) - is EntireAction.UnBlockMessage -> unblockMessage(action.messageId) } } @@ -84,19 +85,28 @@ class EntireViewModel @Inject constructor( } } - private fun unblockMessage(messageId: Int) = intent { + private fun handleUnBlockButtonClicked(messageId: Int) = intent { + reduce { state.copy(unBlockMessageId = messageId) } + } + + 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) } + } + viewModelScope.launch { messageStorageRepository.blockMessage(messageId) - .onSuccess { - val updatedList = state.unBlockList.toMutableList().apply { - if (contains(messageId).not()) { - add(messageId) - } - } - reduce { state.copy(unBlockList = updatedList) } - } .onFailure { Timber.e(it) + // 차단 해제 실패 시, 차단 해제된 목록에서 삭제 + if (state.unBlockList.contains(messageId)) { + val updatedList = state.unBlockList.toMutableList().apply { + remove(messageId) + } + reduce { state.copy(unBlockList = updatedList) } + } } } } From 8e3f506c5bc3af0ae2eff8fcdbf0e2b29fd4ade3 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Mon, 5 Aug 2024 00:27:07 +0900 Subject: [PATCH 21/27] =?UTF-8?q?[FEATURE]#74=20:=20DisabledChip=20?= =?UTF-8?q?=EC=83=89=EC=83=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt index d8c9ffde..88793936 100644 --- a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt +++ b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt @@ -22,6 +22,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import coil.compose.AsyncImage import coil.request.ImageRequest +import com.bff.wespot.designsystem.theme.Gray400 +import com.bff.wespot.designsystem.theme.Gray600 import com.bff.wespot.designsystem.theme.StaticTypeScale import com.bff.wespot.designsystem.theme.WeSpotThemeManager @@ -94,6 +96,8 @@ fun ReservedMessageItem( colors = FilterChipDefaults.filterChipColors( containerColor = WeSpotThemeManager.colors.secondaryBtnColor, labelColor = Color(0xFFF7F7F8), + disabledContainerColor = Gray600, + disabledLabelColor = Gray400, ), ) } From 76143012f11eb1535db049b8c4f336b650c17374 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Mon, 5 Aug 2024 01:35:41 +0900 Subject: [PATCH 22/27] =?UTF-8?q?[FEATURE]#74=20:=20Dialog=20=EC=99=B8?= =?UTF-8?q?=EA=B3=BD=20=EB=88=8C=EB=A0=80=EC=9D=84=20=EB=95=8C=20=EB=8B=AB?= =?UTF-8?q?=ED=9E=88=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entire/screen/screen/AccountSettingScreen.kt | 2 +- .../bff/wespot/entire/screen/screen/BlockListScreen.kt | 10 +++++----- .../entire/screen/screen/revoke/RevokeConfirmScreen.kt | 2 +- .../wespot/message/screen/send/MessageEditScreen.kt | 6 +++--- .../wespot/message/screen/send/MessageWriteScreen.kt | 2 +- .../message/screen/send/ReceiverSelectionScreen.kt | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt index d939e692..69c20623 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/AccountSettingScreen.kt @@ -92,7 +92,7 @@ fun AccountSettingScreen( cancelButtonText = stringResource(id = R.string.sign_out), okButtonClick = { showDialog = false }, cancelButtonClick = { action(EntireAction.OnSignOutButtonClicked) }, - onDismissRequest = { showDialog = false }, + onDismissRequest = { }, ) } } 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 419f7170..5c1534e4 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 @@ -87,14 +87,14 @@ fun BlockListScreen( WSDialog( title = stringResource(R.string.unblock_dialog_title), subTitle = "", - okButtonText = stringResource(R.string.unblock), - cancelButtonText = stringResource(R.string.close), - okButtonClick = { + okButtonText = stringResource(R.string.close), + cancelButtonText = stringResource(R.string.unblock), + okButtonClick = { showDialog = false }, + cancelButtonClick = { action(EntireAction.UnBlockMessage) showDialog = false }, - cancelButtonClick = { showDialog = false }, - onDismissRequest = { showDialog = false }, + onDismissRequest = { }, ) } } diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt index 1d6d2262..d18421fa 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/revoke/RevokeConfirmScreen.kt @@ -146,7 +146,7 @@ fun RevokeConfirmScreen( cancelButtonClick = { action(EntireAction.OnRevokeButtonClicked) }, - onDismissRequest = { showDialog = false }, + onDismissRequest = { }, ) } } diff --git a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageEditScreen.kt b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageEditScreen.kt index 4121bb1a..b13d556e 100644 --- a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageEditScreen.kt +++ b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageEditScreen.kt @@ -229,7 +229,7 @@ fun MessageEditScreen( navigator.navigateMessageScreen(args = MessageScreenArgs(false)) }, cancelButtonClick = { exitDialog = false }, - onDismissRequest = { exitDialog = false }, + onDismissRequest = { }, ) } @@ -241,7 +241,7 @@ fun MessageEditScreen( cancelButtonText = stringResource(R.string.cancel), okButtonClick = { action(SendAction.OnSendButtonClicked) }, cancelButtonClick = { reserveDialog = false }, - onDismissRequest = { reserveDialog = false }, + onDismissRequest = { }, ) } @@ -255,7 +255,7 @@ fun MessageEditScreen( navigator.navigateMessageScreen(args = MessageScreenArgs(false)) }, cancelButtonClick = { timeoutDialog = false }, - onDismissRequest = { timeoutDialog = false }, + onDismissRequest = { }, ) } } diff --git a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageWriteScreen.kt b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageWriteScreen.kt index 1341aa81..92e00cd5 100644 --- a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageWriteScreen.kt +++ b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/MessageWriteScreen.kt @@ -176,7 +176,7 @@ fun MessageWriteScreen( navigator.navigateMessageScreen(args = MessageScreenArgs(false)) }, cancelButtonClick = { dialogState = false }, - onDismissRequest = { dialogState = false }, + onDismissRequest = { }, ) } diff --git a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/ReceiverSelectionScreen.kt b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/ReceiverSelectionScreen.kt index 1c9358fc..2f22dab7 100644 --- a/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/ReceiverSelectionScreen.kt +++ b/feature/message/src/main/kotlin/com/bff/wespot/message/screen/send/ReceiverSelectionScreen.kt @@ -229,7 +229,7 @@ fun ReceiverSelectionScreen( navigator.navigateMessageScreen(args = MessageScreenArgs(false)) }, cancelButtonClick = { dialogState = false }, - onDismissRequest = { dialogState = false }, + onDismissRequest = { }, ) } From 233afe5350897579ef40f05fef6446e9eae694d7 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Mon, 5 Aug 2024 20:13:49 +0900 Subject: [PATCH 23/27] =?UTF-8?q?[FEATURE]#74=20:=20hexColor=20=EA=B3=B5?= =?UTF-8?q?=EC=9A=A9=20=ED=95=A8=EC=88=98=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt | 4 ++-- core/ui/src/main/kotlin/com/bff/wespot/ui/WSListItem.kt | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt index 88793936..46cae4e5 100644 --- a/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt +++ b/core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt @@ -1,6 +1,5 @@ package com.bff.wespot.ui -import android.graphics.Color.parseColor import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -26,6 +25,7 @@ import com.bff.wespot.designsystem.theme.Gray400 import com.bff.wespot.designsystem.theme.Gray600 import com.bff.wespot.designsystem.theme.StaticTypeScale import com.bff.wespot.designsystem.theme.WeSpotThemeManager +import com.bff.wespot.util.hexToColor @Composable fun ReservedMessageItem( @@ -49,7 +49,7 @@ fun ReservedMessageItem( .clip(CircleShape) .background( runCatching { - Color(parseColor(backgroundColor)) + hexToColor(backgroundColor) }.getOrDefault(WeSpotThemeManager.colors.cardBackgroundColor), ), contentAlignment = Alignment.Center, diff --git a/core/ui/src/main/kotlin/com/bff/wespot/ui/WSListItem.kt b/core/ui/src/main/kotlin/com/bff/wespot/ui/WSListItem.kt index 8ac5f73e..abb8275d 100644 --- a/core/ui/src/main/kotlin/com/bff/wespot/ui/WSListItem.kt +++ b/core/ui/src/main/kotlin/com/bff/wespot/ui/WSListItem.kt @@ -1,6 +1,5 @@ package com.bff.wespot.ui -import android.graphics.Color.parseColor import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable @@ -21,7 +20,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -32,6 +30,7 @@ import com.bff.wespot.designsystem.theme.StaticTypeScale import com.bff.wespot.designsystem.theme.WeSpotTheme import com.bff.wespot.designsystem.theme.WeSpotThemeManager import com.bff.wespot.designsystem.util.OrientationPreviews +import com.bff.wespot.util.hexToColor @Composable fun WSListItem( @@ -69,7 +68,7 @@ fun WSListItem( .clip(CircleShape) .background( if (backgroundColor.isNotEmpty()) { - Color(parseColor(backgroundColor)) + hexToColor(backgroundColor) } else { WeSpotThemeManager.colors.cardBackgroundColor }, From ef495a0053cc7f472681dcb6bf0119edbd572a54 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Mon, 5 Aug 2024 20:22:51 +0900 Subject: [PATCH 24/27] =?UTF-8?q?[FEATURE]#74=20:=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=EC=8B=9C=20=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=EB=B0=94=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entire/screen/screen/BlockListScreen.kt | 10 +++++++++ .../entire/screen/state/EntireUiState.kt | 1 + .../screen/viewmodel/EntireViewModel.kt | 22 +++++++++---------- 3 files changed, 21 insertions(+), 12 deletions(-) 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) + } } } From 4e604f7361b37729187e8516f917c25e28463900 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Tue, 6 Aug 2024 23:48:35 +0900 Subject: [PATCH 25/27] [FEATURE]#74 : setting icon rename --- .../entire/src/main/res/drawable/{setting.xml => ic_setting.xml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename feature/entire/src/main/res/drawable/{setting.xml => ic_setting.xml} (100%) diff --git a/feature/entire/src/main/res/drawable/setting.xml b/feature/entire/src/main/res/drawable/ic_setting.xml similarity index 100% rename from feature/entire/src/main/res/drawable/setting.xml rename to feature/entire/src/main/res/drawable/ic_setting.xml From b30a37794baded76f3d012345465b811ab62452f Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Tue, 6 Aug 2024 23:48:47 +0900 Subject: [PATCH 26/27] =?UTF-8?q?[FEATURE]#74=20:=20setting=20icon=20?= =?UTF-8?q?=EC=99=BC=EC=AA=BD=20=ED=8C=A8=EB=94=A9=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bff/wespot/entire/screen/screen/EntireScreen.kt | 6 ++++-- .../com/bff/wespot/entire/screen/screen/SettingScreen.kt | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/EntireScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/EntireScreen.kt index 8d70721d..9f09e6bf 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/EntireScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/EntireScreen.kt @@ -73,8 +73,10 @@ internal fun EntireScreen( navigateUp = { navigator.navigateUp() }, action = { Icon( - modifier = Modifier.clickable { navigator.navigateToSetting() }, - imageVector = ImageVector.vectorResource(R.drawable.setting), + modifier = Modifier + .clickable { navigator.navigateToSetting() } + .padding(end = 16.dp), + imageVector = ImageVector.vectorResource(R.drawable.ic_setting), contentDescription = stringResource(R.string.setting_icon), tint = WeSpotThemeManager.colors.secondaryBtnColor, ) diff --git a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt index 13342f20..b0ae74fe 100644 --- a/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt +++ b/feature/entire/src/main/java/com/bff/wespot/entire/screen/screen/SettingScreen.kt @@ -43,8 +43,10 @@ fun SettingScreen( navigateUp = { navigator.navigateUp() }, action = { Icon( - modifier = Modifier.clickable { navigator.navigateToNotificationSetting() }, - imageVector = ImageVector.vectorResource(R.drawable.setting), + modifier = Modifier + .padding(end = 16.dp) + .clickable { navigator.navigateToNotificationSetting() }, + imageVector = ImageVector.vectorResource(R.drawable.ic_setting), contentDescription = stringResource(R.string.setting_icon), tint = WeSpotThemeManager.colors.secondaryBtnColor, ) From f55a9e47b03a7ff3233f2954521cf251a1907873 Mon Sep 17 00:00:00 2001 From: jeongjaino Date: Tue, 6 Aug 2024 23:49:06 +0900 Subject: [PATCH 27/27] =?UTF-8?q?[FEATURE]#74=20:=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EB=9E=98=EC=8A=A4=EB=B0=94=20=ED=9A=8C=EC=A0=84=20?= =?UTF-8?q?=EC=8B=9C,=20=ED=81=B4=EB=A6=AD=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bff/wespot/entire/screen/screen/BlockListScreen.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 19e6669d..023096a0 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,5 +1,6 @@ package com.bff.wespot.entire.screen.screen +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -104,7 +105,12 @@ fun BlockListScreen( } if (state.isLoading) { - Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Box( + modifier = Modifier + .fillMaxSize() + .clickable(enabled = false) { }, + contentAlignment = Alignment.Center, + ) { CircularProgressIndicator() } }