From 7568827d713ae523106a130fd34e9a275828d1a1 Mon Sep 17 00:00:00 2001 From: 1amKhush Date: Tue, 21 Apr 2026 03:19:21 +0530 Subject: [PATCH] Refactor role view models and member grouping --- src/app/components/ProfileDetail.svelte | 12 ++- src/app/components/RoleBadge.svelte | 15 +++- src/app/components/RoomDetail.svelte | 38 +++----- src/app/components/RoomMembers.svelte | 77 ++-------------- src/app/components/SpaceMembers.svelte | 90 ++----------------- src/app/core/roles.ts | 113 +++++++++++++++++++++--- 6 files changed, 144 insertions(+), 201 deletions(-) diff --git a/src/app/components/ProfileDetail.svelte b/src/app/components/ProfileDetail.svelte index 5cf4a61d..f5b28346 100644 --- a/src/app/components/ProfileDetail.svelte +++ b/src/app/components/ProfileDetail.svelte @@ -33,7 +33,7 @@ import {pubkeyLink, deriveSpaceBannedPubkeyItems} from "@app/core/state" import { deriveUserHasSpacePermission, - deriveSpaceMemberRoleInfo, + deriveSpaceMemberRoles, ROOM_PERMISSION_ADD_MEMBER, ROOM_PERMISSION_BAN_USER, } from "@app/core/roles" @@ -59,9 +59,7 @@ const bannedPubkeys = url ? deriveSpaceBannedPubkeyItems(url) : undefined - const spaceMemberRoles = url ? deriveSpaceMemberRoleInfo(url) : readable(new Map()) - - const assignedRoles = $derived($spaceMemberRoles.get(pubkey)?.roles || []) + const assignedRoles = url ? deriveSpaceMemberRoles(url, pubkey) : readable([]) const isBanned = $derived($bannedPubkeys?.some(item => item.pubkey === pubkey) ?? false) @@ -163,12 +161,12 @@ {/if} - {#if assignedRoles.length > 0} + {#if $assignedRoles.length > 0}

Roles

- {#each assignedRoles as role (role.name)} - + {#each $assignedRoles as role (role.name)} + {/each}
diff --git a/src/app/components/RoleBadge.svelte b/src/app/components/RoleBadge.svelte index 3f7e1945..75db3f7d 100644 --- a/src/app/components/RoleBadge.svelte +++ b/src/app/components/RoleBadge.svelte @@ -1,9 +1,10 @@ - {label || role} + {roleLabel} diff --git a/src/app/components/RoomDetail.svelte b/src/app/components/RoomDetail.svelte index 889d4bf1..ab9df8cf 100644 --- a/src/app/components/RoomDetail.svelte +++ b/src/app/components/RoomDetail.svelte @@ -34,10 +34,11 @@ import RoomImage from "@app/components/RoomImage.svelte" import { deriveRoomMembers, - deriveRoomRoles, + deriveRoomRoleDefinitions, deriveUserIsRoomAdmin, deriveHasPermission, - sortRolesDesc, + getRolePermissionsLabel, + getRoleAccessLabel, ROOM_PERMISSION_EDIT_META, } from "@app/core/roles" import { @@ -65,7 +66,7 @@ const room = deriveRoom(url, h) const members = deriveRoomMembers(url, h) - const roomRoles = deriveRoomRoles(url, h) + const roleDefinitions = deriveRoomRoleDefinitions(url, h) const userIsAdmin = deriveUserIsRoomAdmin(url, h) const canEditMetadata = deriveHasPermission(url, h, ROOM_PERMISSION_EDIT_META) const membershipStatus = deriveUserRoomMembershipStatus(url, h) @@ -74,19 +75,6 @@ const isFavorite = $derived($userRooms.includes(h)) const shouldNotify = deriveShouldNotify(url, h) - const roleRows = $derived.by(() => - sortRolesDesc( - Array.from($roomRoles.roles.values()).map(role => ({ - name: role.name, - label: role.label, - color: role.color, - order: role.order, - permissionsLabel: role.permissions.join(", "), - accessLabel: Array.from(role.access).join(", "), - })), - ), - ) - const back = () => history.back() const toggleMenu = () => { @@ -278,27 +266,23 @@ Member list not available from this relay {/if} - {#if $userIsAdmin && roleRows.length > 0} + {#if $userIsAdmin && $roleDefinitions.length > 0}
Role Definitions
- {#each roleRows as role (role.name)} + {#each $roleDefinitions as role (role.name)}
- + {#if role.order !== undefined} Order {role.order} {/if}
- {#if role.permissionsLabel} -

Permissions: {role.permissionsLabel}

+ {#if role.permissions.length > 0} +

Permissions: {getRolePermissionsLabel(role)}

{/if} - {#if role.accessLabel} -

Access: {role.accessLabel}

+ {#if role.access.size > 0} +

Access: {getRoleAccessLabel(role)}

{/if}
{/each} diff --git a/src/app/components/RoomMembers.svelte b/src/app/components/RoomMembers.svelte index 160256a7..d96495f6 100644 --- a/src/app/components/RoomMembers.svelte +++ b/src/app/components/RoomMembers.svelte @@ -1,5 +1,4 @@