change(roles and permissions): clean code

This commit is contained in:
ganfra
2025-11-05 15:31:48 +01:00
parent 288171ba90
commit fca62a333e
8 changed files with 22 additions and 23 deletions

View File

@@ -96,7 +96,7 @@ class HomeFlowNode(
val isNewOwnerSelected = changeRoomMemberRolesNode.waitForCompletion()
withContext(NonCancellable) {
backstack.pop()
if(isNewOwnerSelected) {
if (isNewOwnerSelected) {
onNewOwnersSelected(changeRoomMemberRolesNode.roomId)
}
}

View File

@@ -10,7 +10,6 @@ package io.element.android.features.rolesandpermissions.api
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import io.element.android.libraries.architecture.FeatureEntryPoint
import io.element.android.libraries.architecture.NodeInputs
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.room.JoinedRoom

View File

@@ -62,7 +62,7 @@ class RolesAndPermissionsFlowNode(
data object ChangeModerators : NavTarget
@Parcelize
data object ChangeRoomPermissions: NavTarget
data object ChangeRoomPermissions : NavTarget
}
private val asyncIndicatorState = AsyncIndicatorState()
@@ -101,7 +101,6 @@ class RolesAndPermissionsFlowNode(
override fun openEditPermissions() {
backstack.push(NavTarget.ChangeRoomPermissions)
}
}
createNode<RolesAndPermissionsNode>(
buildContext = buildContext,
@@ -127,8 +126,6 @@ class RolesAndPermissionsFlowNode(
}
}
@Composable
override fun View(modifier: Modifier) {
Box(modifier = modifier) {

View File

@@ -25,7 +25,6 @@ class ChangeRoomPermissionsNode(
@Assisted plugins: List<Plugin>,
private val presenter: ChangeRoomPermissionsPresenter,
) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin {
fun onComplete(changesSaved: Boolean)
}

View File

@@ -24,7 +24,7 @@ import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPowerLevelsValues
import io.element.android.services.analytics.api.AnalyticsService
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.persistentMapOf
import kotlinx.collections.immutable.toImmutableMap
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@@ -51,14 +51,22 @@ class ChangeRoomPermissionsPresenter(
)
}
internal fun buildItems(forSpace: Boolean) = persistentMapOf(
RoomPermissionsSection.RoomDetails to itemsForSection(RoomPermissionsSection.RoomDetails),
RoomPermissionsSection.MessagesAndContent to itemsForSection(RoomPermissionsSection.MessagesAndContent),
RoomPermissionsSection.MembershipModeration to itemsForSection(RoomPermissionsSection.MembershipModeration),
)
private fun RoomPermissionsSection.shouldShow(isSpace: Boolean): Boolean {
return when (this) {
RoomPermissionsSection.RoomDetails -> true
RoomPermissionsSection.MembershipModeration -> true
RoomPermissionsSection.MessagesAndContent -> !isSpace
}
}
internal fun buildItems(isSpace: Boolean) =
RoomPermissionsSection.entries
.filter { section -> section.shouldShow(isSpace) }
.associateWith { itemsForSection(it) }
.toImmutableMap()
}
private val items = buildItems(forSpace = room.info().isSpace)
private val itemsBySection = buildItems(isSpace = room.info().isSpace)
private var initialPermissions by mutableStateOf<RoomPowerLevelsValues?>(null)
private var currentPermissions by mutableStateOf<RoomPowerLevelsValues?>(null)
@@ -112,7 +120,7 @@ class ChangeRoomPermissionsPresenter(
}
return ChangeRoomPermissionsState(
currentPermissions = currentPermissions,
itemsBySection = items,
itemsBySection = itemsBySection,
hasChanges = hasChanges,
saveAction = saveAction,
confirmExitAction = confirmExitAction,

View File

@@ -25,9 +25,9 @@ data class ChangeRoomPermissionsState(
val saveAction: AsyncAction<Unit>,
val confirmExitAction: AsyncAction<Unit>,
val eventSink: (ChangeRoomPermissionsEvent) -> Unit,
){
) {
fun selectedRoleForType(type: RoomPermissionType): SelectableRole? {
if(currentPermissions == null) return null
if (currentPermissions == null) return null
val role = when (type) {
RoomPermissionType.BAN -> RoomMember.Role.forPowerLevel(currentPermissions.ban)
RoomPermissionType.INVITE -> RoomMember.Role.forPowerLevel(currentPermissions.invite)
@@ -38,14 +38,13 @@ data class ChangeRoomPermissionsState(
RoomPermissionType.ROOM_AVATAR -> RoomMember.Role.forPowerLevel(currentPermissions.roomAvatar)
RoomPermissionType.ROOM_TOPIC -> RoomMember.Role.forPowerLevel(currentPermissions.roomTopic)
}
return when(role){
return when (role) {
is RoomMember.Role.Owner,
RoomMember.Role.Admin -> SelectableRole.Admin
RoomMember.Role.Moderator -> SelectableRole.Moderator
RoomMember.Role.User -> SelectableRole.Everyone
}
}
}
enum class RoomPermissionsSection {
@@ -54,7 +53,7 @@ enum class RoomPermissionsSection {
MembershipModeration,
}
enum class SelectableRole: DropdownOption {
enum class SelectableRole : DropdownOption {
Admin {
@Composable
@ReadOnlyComposable
@@ -72,7 +71,6 @@ enum class SelectableRole: DropdownOption {
}
}
enum class RoomPermissionType {
BAN,
INVITE,

View File

@@ -27,7 +27,6 @@ import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
import io.element.android.libraries.di.annotations.SessionCoroutineScope
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.JoinedRoom
import io.element.android.libraries.matrix.api.room.RoomMember

View File

@@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MenuAnchorType
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf