change(roles and permissions): clean code
This commit is contained in:
parent
288171ba90
commit
fca62a333e
8 changed files with 22 additions and 23 deletions
|
|
@ -96,7 +96,7 @@ class HomeFlowNode(
|
||||||
val isNewOwnerSelected = changeRoomMemberRolesNode.waitForCompletion()
|
val isNewOwnerSelected = changeRoomMemberRolesNode.waitForCompletion()
|
||||||
withContext(NonCancellable) {
|
withContext(NonCancellable) {
|
||||||
backstack.pop()
|
backstack.pop()
|
||||||
if(isNewOwnerSelected) {
|
if (isNewOwnerSelected) {
|
||||||
onNewOwnersSelected(changeRoomMemberRolesNode.roomId)
|
onNewOwnersSelected(changeRoomMemberRolesNode.roomId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ package io.element.android.features.rolesandpermissions.api
|
||||||
import com.bumble.appyx.core.modality.BuildContext
|
import com.bumble.appyx.core.modality.BuildContext
|
||||||
import com.bumble.appyx.core.node.Node
|
import com.bumble.appyx.core.node.Node
|
||||||
import io.element.android.libraries.architecture.FeatureEntryPoint
|
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.core.RoomId
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class RolesAndPermissionsFlowNode(
|
||||||
data object ChangeModerators : NavTarget
|
data object ChangeModerators : NavTarget
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data object ChangeRoomPermissions: NavTarget
|
data object ChangeRoomPermissions : NavTarget
|
||||||
}
|
}
|
||||||
|
|
||||||
private val asyncIndicatorState = AsyncIndicatorState()
|
private val asyncIndicatorState = AsyncIndicatorState()
|
||||||
|
|
@ -101,7 +101,6 @@ class RolesAndPermissionsFlowNode(
|
||||||
override fun openEditPermissions() {
|
override fun openEditPermissions() {
|
||||||
backstack.push(NavTarget.ChangeRoomPermissions)
|
backstack.push(NavTarget.ChangeRoomPermissions)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
createNode<RolesAndPermissionsNode>(
|
createNode<RolesAndPermissionsNode>(
|
||||||
buildContext = buildContext,
|
buildContext = buildContext,
|
||||||
|
|
@ -127,8 +126,6 @@ class RolesAndPermissionsFlowNode(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun View(modifier: Modifier) {
|
override fun View(modifier: Modifier) {
|
||||||
Box(modifier = modifier) {
|
Box(modifier = modifier) {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ class ChangeRoomPermissionsNode(
|
||||||
@Assisted plugins: List<Plugin>,
|
@Assisted plugins: List<Plugin>,
|
||||||
private val presenter: ChangeRoomPermissionsPresenter,
|
private val presenter: ChangeRoomPermissionsPresenter,
|
||||||
) : Node(buildContext, plugins = plugins) {
|
) : Node(buildContext, plugins = plugins) {
|
||||||
|
|
||||||
interface Callback : Plugin {
|
interface Callback : Plugin {
|
||||||
fun onComplete(changesSaved: Boolean)
|
fun onComplete(changesSaved: Boolean)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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.libraries.matrix.api.room.powerlevels.RoomPowerLevelsValues
|
||||||
import io.element.android.services.analytics.api.AnalyticsService
|
import io.element.android.services.analytics.api.AnalyticsService
|
||||||
import kotlinx.collections.immutable.persistentListOf
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.collections.immutable.persistentMapOf
|
import kotlinx.collections.immutable.toImmutableMap
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
|
|
@ -51,14 +51,22 @@ class ChangeRoomPermissionsPresenter(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun buildItems(forSpace: Boolean) = persistentMapOf(
|
private fun RoomPermissionsSection.shouldShow(isSpace: Boolean): Boolean {
|
||||||
RoomPermissionsSection.RoomDetails to itemsForSection(RoomPermissionsSection.RoomDetails),
|
return when (this) {
|
||||||
RoomPermissionsSection.MessagesAndContent to itemsForSection(RoomPermissionsSection.MessagesAndContent),
|
RoomPermissionsSection.RoomDetails -> true
|
||||||
RoomPermissionsSection.MembershipModeration to itemsForSection(RoomPermissionsSection.MembershipModeration),
|
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 initialPermissions by mutableStateOf<RoomPowerLevelsValues?>(null)
|
||||||
private var currentPermissions by mutableStateOf<RoomPowerLevelsValues?>(null)
|
private var currentPermissions by mutableStateOf<RoomPowerLevelsValues?>(null)
|
||||||
|
|
@ -112,7 +120,7 @@ class ChangeRoomPermissionsPresenter(
|
||||||
}
|
}
|
||||||
return ChangeRoomPermissionsState(
|
return ChangeRoomPermissionsState(
|
||||||
currentPermissions = currentPermissions,
|
currentPermissions = currentPermissions,
|
||||||
itemsBySection = items,
|
itemsBySection = itemsBySection,
|
||||||
hasChanges = hasChanges,
|
hasChanges = hasChanges,
|
||||||
saveAction = saveAction,
|
saveAction = saveAction,
|
||||||
confirmExitAction = confirmExitAction,
|
confirmExitAction = confirmExitAction,
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,9 @@ data class ChangeRoomPermissionsState(
|
||||||
val saveAction: AsyncAction<Unit>,
|
val saveAction: AsyncAction<Unit>,
|
||||||
val confirmExitAction: AsyncAction<Unit>,
|
val confirmExitAction: AsyncAction<Unit>,
|
||||||
val eventSink: (ChangeRoomPermissionsEvent) -> Unit,
|
val eventSink: (ChangeRoomPermissionsEvent) -> Unit,
|
||||||
){
|
) {
|
||||||
fun selectedRoleForType(type: RoomPermissionType): SelectableRole? {
|
fun selectedRoleForType(type: RoomPermissionType): SelectableRole? {
|
||||||
if(currentPermissions == null) return null
|
if (currentPermissions == null) return null
|
||||||
val role = when (type) {
|
val role = when (type) {
|
||||||
RoomPermissionType.BAN -> RoomMember.Role.forPowerLevel(currentPermissions.ban)
|
RoomPermissionType.BAN -> RoomMember.Role.forPowerLevel(currentPermissions.ban)
|
||||||
RoomPermissionType.INVITE -> RoomMember.Role.forPowerLevel(currentPermissions.invite)
|
RoomPermissionType.INVITE -> RoomMember.Role.forPowerLevel(currentPermissions.invite)
|
||||||
|
|
@ -38,14 +38,13 @@ data class ChangeRoomPermissionsState(
|
||||||
RoomPermissionType.ROOM_AVATAR -> RoomMember.Role.forPowerLevel(currentPermissions.roomAvatar)
|
RoomPermissionType.ROOM_AVATAR -> RoomMember.Role.forPowerLevel(currentPermissions.roomAvatar)
|
||||||
RoomPermissionType.ROOM_TOPIC -> RoomMember.Role.forPowerLevel(currentPermissions.roomTopic)
|
RoomPermissionType.ROOM_TOPIC -> RoomMember.Role.forPowerLevel(currentPermissions.roomTopic)
|
||||||
}
|
}
|
||||||
return when(role){
|
return when (role) {
|
||||||
is RoomMember.Role.Owner,
|
is RoomMember.Role.Owner,
|
||||||
RoomMember.Role.Admin -> SelectableRole.Admin
|
RoomMember.Role.Admin -> SelectableRole.Admin
|
||||||
RoomMember.Role.Moderator -> SelectableRole.Moderator
|
RoomMember.Role.Moderator -> SelectableRole.Moderator
|
||||||
RoomMember.Role.User -> SelectableRole.Everyone
|
RoomMember.Role.User -> SelectableRole.Everyone
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class RoomPermissionsSection {
|
enum class RoomPermissionsSection {
|
||||||
|
|
@ -54,7 +53,7 @@ enum class RoomPermissionsSection {
|
||||||
MembershipModeration,
|
MembershipModeration,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class SelectableRole: DropdownOption {
|
enum class SelectableRole : DropdownOption {
|
||||||
Admin {
|
Admin {
|
||||||
@Composable
|
@Composable
|
||||||
@ReadOnlyComposable
|
@ReadOnlyComposable
|
||||||
|
|
@ -72,7 +71,6 @@ enum class SelectableRole: DropdownOption {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
enum class RoomPermissionType {
|
enum class RoomPermissionType {
|
||||||
BAN,
|
BAN,
|
||||||
INVITE,
|
INVITE,
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
|
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.core.UserId
|
||||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
import io.element.android.libraries.matrix.api.room.RoomMember
|
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.MenuAnchorType
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue