From 7892b0ccf61a4681fb0643fc9c02750d19034b65 Mon Sep 17 00:00:00 2001 From: Diego Beraldin Date: Sun, 25 Feb 2024 09:53:43 +0100 Subject: [PATCH] feat: add share option to community and user detail (#549) --- .../communitydetail/CommunityDetailScreen.kt | 23 +++++++++++++++++++ .../unit/userdetail/UserDetailScreen.kt | 23 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt index 72b86c2b8..40659bdf2 100644 --- a/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt +++ b/unit/communitydetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/communitydetail/CommunityDetailScreen.kt @@ -109,6 +109,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.containsId +import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.readableHandle import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toIcon import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toInt import com.github.diegoberaldin.raccoonforlemmy.unit.ban.BanUserScreen @@ -293,6 +294,9 @@ class CommunityDetailScreen( OptionId.InfoInstance, LocalXmlStrings.current.communityDetailInstanceInfo ) + this += Option( + OptionId.Share, LocalXmlStrings.current.postActionShare + ) if (uiState.isLogged) { this += Option( OptionId.Block, @@ -401,6 +405,25 @@ class CommunityDetailScreen( navigationCoordinator.pushScreen(screen) } + OptionId.Share -> { + val urls = buildList { + if (uiState.community.host != uiState.instance) { + this += "https://${uiState.instance}/c/${uiState.community.readableHandle}" + } + this += "https://${uiState.community.host}/c/${uiState.community.name}" + } + if (urls.size == 1) { + model.reduce( + CommunityDetailMviModel.Intent.Share( + urls.first() + ) + ) + } else { + val screen = ShareBottomSheet(urls = urls) + navigationCoordinator.showBottomSheet(screen) + } + } + else -> Unit } }, diff --git a/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt b/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt index 355edeb02..23e5af606 100644 --- a/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt +++ b/unit/userdetail/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/unit/userdetail/UserDetailScreen.kt @@ -105,6 +105,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallb import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PostModel +import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.readableHandle import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.readableName import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toIcon import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.toInt @@ -240,6 +241,9 @@ class UserDetailScreen( this += Option( OptionId.Info, LocalXmlStrings.current.userDetailInfo ) + this += Option( + OptionId.Share, LocalXmlStrings.current.postActionShare + ) if (uiState.isLogged) { this += Option( OptionId.Block, @@ -298,6 +302,25 @@ class UserDetailScreen( ) } + OptionId.Share -> { + val urls = buildList { + if (uiState.user.host != uiState.instance) { + this += "https://${uiState.instance}/u/${uiState.user.readableHandle}" + } + this += "https://${uiState.user.host}/u/${uiState.user.name}" + } + if (urls.size == 1) { + model.reduce( + UserDetailMviModel.Intent.Share( + urls.first() + ) + ) + } else { + val screen = ShareBottomSheet(urls = urls) + navigationCoordinator.showBottomSheet(screen) + } + } + else -> Unit } },