Add landlubber link if user is admin

This commit is contained in:
Jon Staab 2025-11-04 16:55:26 -08:00
parent 2d89ca6c0e
commit 5c5c130700
2 changed files with 23 additions and 1 deletions

View file

@ -12,6 +12,7 @@
import Letter from "@assets/icons/letter.svg?dataurl" import Letter from "@assets/icons/letter.svg?dataurl"
import Login from "@assets/icons/login-3.svg?dataurl" import Login from "@assets/icons/login-3.svg?dataurl"
import History from "@assets/icons/history.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 StarFallMinimalistic from "@assets/icons/star-fall-minimalistic-2.svg?dataurl"
import NotesMinimalistic from "@assets/icons/notes-minimalistic.svg?dataurl" import NotesMinimalistic from "@assets/icons/notes-minimalistic.svg?dataurl"
import CalendarMinimalistic from "@assets/icons/calendar-minimalistic.svg?dataurl" import CalendarMinimalistic from "@assets/icons/calendar-minimalistic.svg?dataurl"
@ -47,6 +48,7 @@
hasNip29, hasNip29,
alerts, alerts,
deriveUserCanCreateRoom, deriveUserCanCreateRoom,
deriveUserIsSpaceAdmin,
} from "@app/core/state" } from "@app/core/state"
import {notifications} from "@app/util/notifications" import {notifications} from "@app/util/notifications"
import {pushModal} from "@app/util/modal" import {pushModal} from "@app/util/modal"
@ -63,6 +65,7 @@
const otherRooms = deriveOtherRooms(url) const otherRooms = deriveOtherRooms(url)
const members = deriveSpaceMembers(url) const members = deriveSpaceMembers(url)
const hasAlerts = $derived($alerts.some(a => getTagValue("feed", a.tags)?.includes(url))) const hasAlerts = $derived($alerts.some(a => getTagValue("feed", a.tags)?.includes(url)))
const userIsAdmin = deriveUserIsSpaceAdmin(url)
const spaceKinds = derived( const spaceKinds = derived(
deriveEventsForUrl(url, [{kinds: CONTENT_KINDS}]), deriveEventsForUrl(url, [{kinds: CONTENT_KINDS}]),
@ -149,7 +152,14 @@
View Members ({$members.length}) View Members ({$members.length})
</Button> </Button>
</li> </li>
{#if $relay?.pubkey} {#if $userIsAdmin}
<li>
<Link external href="https://landlubber.coracle.social">
<Icon icon={Tuning2} />
Manage Space
</Link>
</li>
{:else if $relay?.pubkey}
<li> <li>
<Link href={makeChatPath([$relay.pubkey])}> <Link href={makeChatPath([$relay.pubkey])}>
<Icon icon={Letter} /> <Icon icon={Letter} />

View file

@ -93,6 +93,7 @@ import {
verifyEvent, verifyEvent,
readRoomMeta, readRoomMeta,
makeRoomMeta, makeRoomMeta,
ManagementMethod,
} from "@welshman/util" } from "@welshman/util"
import type { import type {
TrustedEvent, TrustedEvent,
@ -126,6 +127,7 @@ import {
deriveRelay, deriveRelay,
makeUserData, makeUserData,
makeUserLoader, makeUserLoader,
manageRelay,
} from "@welshman/app" } from "@welshman/app"
import type {Thunk} 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) => export const deriveUserIsRoomAdmin = (url: string, h: string) =>
derived([pubkey, deriveRoomAdmins(url, h)], ([$pubkey, $admins]) => $admins.includes($pubkey!)) 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 // Other utils
export const encodeRelay = (url: string) => export const encodeRelay = (url: string) =>