From d3136f009879f57000fbe4dc9408c8775e5b1e2e Mon Sep 17 00:00:00 2001 From: akesi seli Date: Thu, 31 Oct 2024 12:57:51 +0100 Subject: [PATCH] refactor: remove BlockBottomSheet (#60) --- .../core/commonui/modals/BlockBottomSheet.kt | 157 ------------------ .../unit/postlist/PostListScreen.kt | 117 +++++++++++-- 2 files changed, 102 insertions(+), 172 deletions(-) delete mode 100644 core/commonui/modals/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt diff --git a/core/commonui/modals/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt b/core/commonui/modals/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt deleted file mode 100644 index 9c7bdc816..000000000 --- a/core/commonui/modals/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/core/commonui/modals/BlockBottomSheet.kt +++ /dev/null @@ -1,157 +0,0 @@ -package com.livefast.eattrash.raccoonforlemmy.core.commonui.modals - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBars -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import cafe.adriel.voyager.core.screen.Screen -import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.CornerSize -import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing -import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.BottomSheetHeader -import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.BlockActionType -import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.toReadableName -import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings -import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator -import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent -import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter -import com.livefast.eattrash.raccoonforlemmy.core.utils.compose.onClick - -class BlockBottomSheet( - private val userName: String? = null, - private val userId: Long? = null, - private val communityName: String? = null, - private val communityId: Long? = null, - private val instanceName: String? = null, - private val instanceId: Long? = null, - private val userInstanceName: String? = null, - private val userInstanceId: Long? = null, -) : Screen { - @Composable - override fun Content() { - val navigationCoordinator = remember { getNavigationCoordinator() } - val notificationCenter = remember { getNotificationCenter() } - - Surface { - Column( - modifier = - Modifier - .windowInsetsPadding(WindowInsets.navigationBars) - .padding( - top = Spacing.s, - start = Spacing.s, - end = Spacing.s, - bottom = Spacing.m, - ), - verticalArrangement = Arrangement.spacedBy(Spacing.s), - ) { - BottomSheetHeader(LocalStrings.current.communityDetailBlock) - Column( - modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), - verticalArrangement = Arrangement.spacedBy(Spacing.xxs), - ) { - val values: List> = - buildList { - if (userName != null && userId != null) { - this += - Triple( - BlockActionType.User, - userId, - userName, - ) - } - if (communityName != null && communityId != null) { - this += - Triple( - BlockActionType.Community, - communityId, - communityName, - ) - } - if (instanceName != null && instanceId != null) { - this += - Triple( - BlockActionType.Instance, - instanceId, - instanceName, - ) - } - if (userInstanceName != null && userInstanceId != null && userInstanceName != instanceName) { - this += - Triple( - BlockActionType.Instance, - userInstanceId, - userInstanceName, - ) - } - } - for (value in values) { - Row( - modifier = - Modifier - .clip(RoundedCornerShape(CornerSize.xxl)) - .onClick( - onClick = { - val event = - when (value.first) { - BlockActionType.Community -> - NotificationCenterEvent.BlockActionSelected( - communityId = value.second, - ) - - BlockActionType.Instance -> - NotificationCenterEvent.BlockActionSelected( - instanceId = value.second, - ) - - BlockActionType.User -> - NotificationCenterEvent.BlockActionSelected( - userId = value.second, - ) - } - notificationCenter.send(event) - navigationCoordinator.hideBottomSheet() - }, - ).padding( - horizontal = Spacing.s, - vertical = Spacing.s, - ).fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically, - ) { - val valueText = - buildString { - append(value.first.toReadableName()) - val additionalText = value.third - if (additionalText.isNotEmpty()) { - append("\n") - append("(") - append(additionalText) - append(")") - } - } - Text( - text = valueText, - style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.onBackground, - ) - } - } - } - } - } - } -} diff --git a/unit/postlist/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/unit/postlist/PostListScreen.kt b/unit/postlist/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/unit/postlist/PostListScreen.kt index b98c65b5b..d7559c43d 100644 --- a/unit/postlist/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/unit/postlist/PostListScreen.kt +++ b/unit/postlist/src/commonMain/kotlin/com/livefast/eattrash/raccoonforlemmy/unit/postlist/PostListScreen.kt @@ -72,12 +72,13 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.FloatingAc import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.SwipeAction import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.SwipeActionCard import com.livefast.eattrash.raccoonforlemmy.core.commonui.detailopener.api.getDetailOpener +import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.BlockActionType import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.Option import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.OptionId import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCard import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCardPlaceholder import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.di.getFabNestedScrollConnection -import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.BlockBottomSheet +import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.toReadableName import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CopyPostBottomSheet import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem @@ -147,6 +148,9 @@ class PostListScreen : Screen { var itemIdToDelete by remember { mutableStateOf(null) } var listingTypeBottomSheetOpened by remember { mutableStateOf(false) } var shareBottomSheetUrls by remember { mutableStateOf?>(null) } + var blockBottomSheetItems by remember { + mutableStateOf>?>(null) + } LaunchedEffect(navigationCoordinator) { navigationCoordinator.onDoubleTabSelection @@ -668,24 +672,61 @@ class PostListScreen : Screen { } OptionId.Block -> { - val screen = - BlockBottomSheet( - userName = + blockBottomSheetItems = + buildList { + val userName = post.creator?.readableName( uiState.preferNicknames, - ), - userId = post.creator?.id, - communityName = + ) + val userId = post.creator?.id + val communityName = post.community?.readableName( uiState.preferNicknames, - ), - communityId = post.community?.id, - instanceName = post.community?.host, - instanceId = post.community?.instanceId, - userInstanceName = post.creator?.host, - userInstanceId = post.creator?.instanceId, - ) - navigationCoordinator.showBottomSheet(screen) + ) + val communityId = post.community?.id + val instanceName = post.community?.host + val instanceId = + post.community?.instanceId + val userInstanceName = + post.creator?.host + val userInstanceId = + post.creator?.instanceId + if (userName != null && userId != null) { + this += + Triple( + first = BlockActionType.User, + second = userId, + third = userName, + ) + } + if (communityName != null && communityId != null) { + this += + Triple( + first = BlockActionType.Community, + second = communityId, + third = communityName, + ) + } + if (instanceName != null && instanceId != null) { + this += + Triple( + first = BlockActionType.Instance, + second = instanceId, + third = instanceName, + ) + } + if (userInstanceName != null && + userInstanceId != null && + userInstanceName != instanceName + ) { + this += + Triple( + first = BlockActionType.Instance, + second = userInstanceId, + third = userInstanceName, + ) + } + } } OptionId.Copy -> { @@ -918,5 +959,51 @@ class PostListScreen : Screen { }, ) } + + blockBottomSheetItems?.also { values -> + CustomModalBottomSheet( + title = LocalStrings.current.communityDetailBlock, + items = + values.map { value -> + CustomModalBottomSheetItem( + label = + buildString { + append(value.first.toReadableName()) + val additionalText = value.third + if (!additionalText.isNullOrEmpty()) { + append("\n") + append("(") + append(additionalText) + append(")") + } + }, + ) + }, + onSelected = { index -> + shareBottomSheetUrls = null + if (index != null) { + val value = values[index] + val event = + when (value.first) { + BlockActionType.Community -> + NotificationCenterEvent.BlockActionSelected( + communityId = value.second, + ) + + BlockActionType.Instance -> + NotificationCenterEvent.BlockActionSelected( + instanceId = value.second, + ) + + BlockActionType.User -> + NotificationCenterEvent.BlockActionSelected( + userId = value.second, + ) + } + notificationCenter.send(event) + } + }, + ) + } } }