1
0
Fork 0
mirror of https://github.com/anyproto/anytype-kotlin.git synced 2025-06-08 05:47:05 +09:00

DROID-2249 Mutiplayer | Fix | User-as-owner-of-space fixes (#993)

This commit is contained in:
Evgenii Kozlov 2024-03-07 19:36:37 +01:00 committed by GitHub
parent 14eea20df2
commit 92d8d53705
Signed by: github
GPG key ID: B5690EEEBB952194
3 changed files with 18 additions and 15 deletions

View file

@ -49,7 +49,7 @@ class ShareSpaceFragment : BaseBottomSheetComposeFragment() {
) {
ShareSpaceScreen(
shareLinkViewState = vm.shareLinkViewState.collectAsStateWithLifecycle().value,
canStopSharing = vm.canStopSharing.collectAsStateWithLifecycle().value,
isCurrentUserOwner = vm.isCurrentUserOwner.collectAsStateWithLifecycle().value,
onRegenerateInviteLinkClicked = vm::onRegenerateInviteLinkClicked,
onShareInviteLinkClicked = vm::onShareInviteLinkClicked,
members = vm.members.collectAsStateWithLifecycle().value,

View file

@ -65,7 +65,7 @@ import com.anytypeio.anytype.presentation.objects.SpaceMemberIconView
@Composable
fun ShareSpaceScreen(
canStopSharing: Boolean,
isCurrentUserOwner: Boolean,
members: List<ShareSpaceMemberView>,
shareLinkViewState: ShareSpaceViewModel.ShareLinkViewState,
onRegenerateInviteLinkClicked: () -> Unit,
@ -97,7 +97,7 @@ fun ShareSpaceScreen(
.align(Alignment.CenterEnd)
.padding(end = 16.dp)
) {
if (canStopSharing) {
if (isCurrentUserOwner) {
Image(
painter = painterResource(id = R.drawable.ic_action_more),
contentDescription = "Menu button",
@ -143,6 +143,7 @@ fun ShareSpaceScreen(
is ShareSpaceMemberView.Config.Member -> {
SpaceMember(
member = member.obj,
isCurrentUserOwner = isCurrentUserOwner,
config = config,
onCanEditClicked = {
onCanEditClicked(member)
@ -199,6 +200,7 @@ fun ShareSpaceScreen(
@Composable
private fun SpaceMember(
isCurrentUserOwner: Boolean,
member: ObjectWrapper.SpaceMember,
icon: SpaceMemberIconView,
config: ShareSpaceMemberView.Config.Member,
@ -246,7 +248,7 @@ private fun SpaceMember(
color = colorResource(id = R.color.text_secondary)
)
}
if (config !is ShareSpaceMemberView.Config.Member.Owner) {
if (isCurrentUserOwner && config !is ShareSpaceMemberView.Config.Member.Owner) {
Box(modifier = Modifier.align(Alignment.CenterVertically)) {
Image(
painter = painterResource(id = R.drawable.ic_action_more),
@ -558,7 +560,7 @@ fun ShareSpaceScreenPreview() {
onRemoveMemberClicked = {},
onCanViewClicked = {},
onCanEditClicked = {},
canStopSharing = false,
isCurrentUserOwner = false,
onStopSharingClicked = {}
)
}
@ -577,7 +579,8 @@ private fun SpaceOwnerMemberPreview() {
config = ShareSpaceMemberView.Config.Member.Owner,
onCanEditClicked = {},
onCanViewClicked = {},
onRemoveMemberClicked = {}
onRemoveMemberClicked = {},
isCurrentUserOwner = true
)
}
@ -595,6 +598,7 @@ private fun SpaceEditorMemberPreview() {
config = ShareSpaceMemberView.Config.Member.Writer,
onCanEditClicked = {},
onCanViewClicked = {},
onRemoveMemberClicked = {}
onRemoveMemberClicked = {},
isCurrentUserOwner = true
)
}

View file

@ -45,7 +45,7 @@ class ShareSpaceViewModel(
val members = MutableStateFlow<List<ShareSpaceMemberView>>(emptyList())
val shareLinkViewState = MutableStateFlow<ShareLinkViewState>(ShareLinkViewState.Init)
val commands = MutableSharedFlow<Command>()
val canStopSharing = MutableStateFlow(false)
val isCurrentUserOwner = MutableStateFlow(false)
init {
proceedWithGeneratingInviteLink()
@ -54,6 +54,7 @@ class ShareSpaceViewModel(
private fun proceedWithSpaceMemberSubscription() {
viewModelScope.launch {
val account = getAccount.async(Unit).getOrNull()
container.subscribe(
StoreSearchParams(
subscription = SHARE_SPACE_SUBSCRIPTION,
@ -71,12 +72,10 @@ class ShareSpaceViewModel(
)
}
}.onEach { results ->
val account = getAccount.async(Unit).getOrNull()?.id
canStopSharing.value = results.any { result ->
val member = result.obj
member.identity == account && member.permissions == OWNER
}.also { isOwnerFound ->
if (!isOwnerFound) Timber.w("Owner not found")
isCurrentUserOwner.value = results.any { result ->
with(result.obj) {
identity.isNotEmpty() && identity == account?.id && permissions == OWNER
}
}
}.collect {
members.value = it
@ -225,7 +224,7 @@ class ShareSpaceViewModel(
fun onStopSharingSpaceClicked() {
Timber.d("onStopSharingClicked")
viewModelScope.launch {
if (canStopSharing.value) {
if (isCurrentUserOwner.value) {
stopSharingSpace.async(
params = params.space
).fold(