diff --git a/src/app/components/MenuSpace.svelte b/src/app/components/MenuSpace.svelte index 2e4746bc..ec7b4e9f 100644 --- a/src/app/components/MenuSpace.svelte +++ b/src/app/components/MenuSpace.svelte @@ -38,10 +38,12 @@ deriveOtherRooms, hasNip29, alerts, + deriveUserCanCreateRoom, } from "@app/core/state" import {notifications} from "@app/util/notifications" import {pushModal} from "@app/util/modal" import {makeSpacePath} from "@app/util/routes" + import {get} from "svelte/store" const {url} = $props() @@ -69,6 +71,8 @@ {replaceState}, ) + const canCreateRoom = get(deriveUserCanCreateRoom(url)) + const createInvite = () => pushModal(SpaceInvite, {url}, {replaceState}) const leaveSpace = () => pushModal(SpaceExit, {url}, {replaceState}) @@ -185,10 +189,12 @@ {#each $otherRooms as room, i (room)} {/each} - - - Create room - + {#if canCreateRoom} + + + Create room + + {/if} {:else} (deriveUserCanCreateRoom(url)) - const create = async () => { loading = true @@ -102,10 +99,7 @@ Go back - diff --git a/src/app/core/state.ts b/src/app/core/state.ts index 4a4e97d4..7fe66f55 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -53,6 +53,7 @@ import { ROOM_JOIN, ROOM_ADD_USER, ROOM_REMOVE_USER, + ROOM_CREATE_PERMISSION, ALERT_EMAIL, ALERT_WEB, ALERT_IOS, @@ -762,15 +763,18 @@ export const deriveUserMembershipStatus = (url: string, room: string) => ) export const deriveUserCanCreateRoom = (url: string) => - derived([pubkey, deriveEventsForUrl(url, [{kinds: [39004]}])], ([$pubkey, $events]) => { - const latest = last($events) + derived( + [pubkey, deriveEventsForUrl(url, [{kinds: [ROOM_CREATE_PERMISSION]}])], + ([$pubkey, $events]) => { + const latest = last($events) - if (!latest) { - return true - } + if (!latest) { + return true + } - return getTagValues("p", latest.tags).includes($pubkey!) - }) + return getTagValues("p", latest.tags).includes($pubkey!) + }, + ) // Other utils