diff --git a/src/app/components/MenuSpace.svelte b/src/app/components/MenuSpace.svelte index 9db7c9713..7e80ba7ac 100644 --- a/src/app/components/MenuSpace.svelte +++ b/src/app/components/MenuSpace.svelte @@ -12,6 +12,7 @@ import Letter from "@assets/icons/letter.svg?dataurl" import Login from "@assets/icons/login-3.svg?dataurl" import History from "@assets/icons/history.svg?dataurl" + import Tuning2 from "@assets/icons/tuning-2.svg?dataurl" import StarFallMinimalistic from "@assets/icons/star-fall-minimalistic-2.svg?dataurl" import NotesMinimalistic from "@assets/icons/notes-minimalistic.svg?dataurl" import CalendarMinimalistic from "@assets/icons/calendar-minimalistic.svg?dataurl" @@ -47,6 +48,7 @@ hasNip29, alerts, deriveUserCanCreateRoom, + deriveUserIsSpaceAdmin, } from "@app/core/state" import {notifications} from "@app/util/notifications" import {pushModal} from "@app/util/modal" @@ -63,6 +65,7 @@ const otherRooms = deriveOtherRooms(url) const members = deriveSpaceMembers(url) const hasAlerts = $derived($alerts.some(a => getTagValue("feed", a.tags)?.includes(url))) + const userIsAdmin = deriveUserIsSpaceAdmin(url) const spaceKinds = derived( deriveEventsForUrl(url, [{kinds: CONTENT_KINDS}]), @@ -149,7 +152,14 @@ View Members ({$members.length}) - {#if $relay?.pubkey} + {#if $userIsAdmin} +
  • + + + Manage Space + +
  • + {:else if $relay?.pubkey}
  • diff --git a/src/app/core/state.ts b/src/app/core/state.ts index 906283c1e..99b4adb4e 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -93,6 +93,7 @@ import { verifyEvent, readRoomMeta, makeRoomMeta, + ManagementMethod, } from "@welshman/util" import type { TrustedEvent, @@ -126,6 +127,7 @@ import { deriveRelay, makeUserData, makeUserLoader, + manageRelay, } from "@welshman/app" import type {Thunk} from "@welshman/app" @@ -873,6 +875,16 @@ export const deriveUserCanCreateRoom = (url: string) => export const deriveUserIsRoomAdmin = (url: string, h: string) => derived([pubkey, deriveRoomAdmins(url, h)], ([$pubkey, $admins]) => $admins.includes($pubkey!)) +export const deriveUserIsSpaceAdmin = (url: string) => { + const store = writable(false) + + manageRelay(url, {method: ManagementMethod.SupportedMethods, params: []}).then(res => + store.set(Boolean(res.result?.length)), + ) + + return store +} + // Other utils export const encodeRelay = (url: string) =>