diff --git a/src/app/components/RoomItemMenu.svelte b/src/app/components/RoomItemMenu.svelte
index e03e47c8..0d4f18eb 100644
--- a/src/app/components/RoomItemMenu.svelte
+++ b/src/app/components/RoomItemMenu.svelte
@@ -13,7 +13,7 @@
import EventDeleteConfirm from "@app/components/EventDeleteConfirm.svelte"
import {pushModal} from "@app/util/modal"
import {pushToast} from "@app/util/toast"
- import {deriveUserIsSpaceAdmin} from "@app/core/state"
+ import {deriveUserIsSpaceAdmin} from "@app/core/roles"
type Props = {
url: string
diff --git a/src/app/components/RoomMembers.svelte b/src/app/components/RoomMembers.svelte
index 8ff478b9..5ddbbdb2 100644
--- a/src/app/components/RoomMembers.svelte
+++ b/src/app/components/RoomMembers.svelte
@@ -16,9 +16,17 @@
import ModalTitle from "@lib/components/ModalTitle.svelte"
import ModalSubtitle from "@lib/components/ModalSubtitle.svelte"
import Profile from "@app/components/Profile.svelte"
+ import RoleBadge from "@app/components/RoleBadge.svelte"
import RoomName from "@app/components/RoomName.svelte"
import RoomMembersAdd from "@app/components/RoomMembersAdd.svelte"
- import {deriveRoom, deriveRoomMembers, deriveUserIsRoomAdmin} from "@app/core/state"
+ import {
+ deriveRoomMembers,
+ deriveGroupedRoomMembers,
+ deriveHasPermission,
+ ROOM_PERMISSION_ADD_MEMBER,
+ ROOM_PERMISSION_REMOVE_MEMBER,
+ } from "@app/core/roles"
+ import {deriveRoom} from "@app/core/state"
import {pushModal} from "@app/util/modal"
import {pushToast} from "@app/util/toast"
@@ -31,7 +39,9 @@
const room = deriveRoom(url, h)
const members = deriveRoomMembers(url, h)
- const userIsAdmin = deriveUserIsRoomAdmin(url, h)
+ const memberGroups = deriveGroupedRoomMembers(url, h)
+ const canAddMembers = deriveHasPermission(url, h, ROOM_PERMISSION_ADD_MEMBER)
+ const canRemoveMembers = deriveHasPermission(url, h, ROOM_PERMISSION_REMOVE_MEMBER)
const back = () => history.back()
@@ -73,42 +83,58 @@
- {#if $members === undefined}
-
- Member list not available from this relay
-
- {:else if $members.length === 0}
+ {#if $members.length === 0}
No members yet
{:else}
- {#each $members as pubkey (pubkey)}
-
-
-
-
-
- {#if menuPubkey === pubkey}
-
-
- -
-
-
-
-
+ {#each $memberGroups as group (group.key)}
+
+ {#if group.role}
+
+ {:else}
+ Members
+ {/if}
+
+ {#each group.members as member (member.pubkey)}
+
+
+
+
+ {#if member.roles.length > 0}
+
+ {#each member.roles as role (role.name)}
+
+ {/each}
+
+ {/if}
+
+ {#if $canRemoveMembers}
+
+
+ {#if menuPubkey === member.pubkey}
+
+
+ -
+
+
+
+
+ {/if}
+
{/if}
-
+ {/each}
{/each}
{/if}
@@ -118,7 +144,7 @@
Go back
- {#if $userIsAdmin}
+ {#if $canAddMembers}
- {#if $userIsAdmin}
+ {#if $canEdit}