feat: add share option to community and user detail (#549)

This commit is contained in:
Diego Beraldin 2024-02-25 09:53:43 +01:00 committed by GitHub
parent ccacbe2d13
commit 7892b0ccf6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 46 additions and 0 deletions

View File

@ -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
}
},

View File

@ -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
}
},