Use userRoomsByUrl

This commit is contained in:
Jon Staab
2024-12-16 17:07:52 -08:00
parent d0565e7c62
commit 166bd81310
10 changed files with 22 additions and 31 deletions
+3 -3
View File
@@ -65,7 +65,7 @@ import {
loadMembership, loadMembership,
loadSettings, loadSettings,
getDefaultPubkeys, getDefaultPubkeys,
getMembershipUrls, userRoomsByUrl,
} from "@app/state" } from "@app/state"
// Utils // Utils
@@ -301,7 +301,7 @@ export const setRelayPolicy = (url: string, read: boolean, write: boolean) => {
url, url,
...INDEXER_RELAYS, ...INDEXER_RELAYS,
...ctx.app.router.FromUser().getUrls(), ...ctx.app.router.FromUser().getUrls(),
...getMembershipUrls(userMembership.get()), ...userRoomsByUrl.get().keys(),
], ],
}) })
} }
@@ -322,7 +322,7 @@ export const setInboxRelayPolicy = (url: string, enabled: boolean) => {
relays: [ relays: [
...INDEXER_RELAYS, ...INDEXER_RELAYS,
...ctx.app.router.FromUser().getUrls(), ...ctx.app.router.FromUser().getUrls(),
...getMembershipUrls(userMembership.get()), ...userRoomsByUrl.get().keys(),
], ],
}) })
} }
+2 -3
View File
@@ -15,9 +15,8 @@
import RoomCreate from "@app/components/RoomCreate.svelte" import RoomCreate from "@app/components/RoomCreate.svelte"
import MenuSpaceRoomItem from "@app/components/MenuSpaceRoomItem.svelte" import MenuSpaceRoomItem from "@app/components/MenuSpaceRoomItem.svelte"
import { import {
getMembershipUrls, userRoomsByUrl,
hasMembershipUrl, hasMembershipUrl,
userMembership,
memberships, memberships,
deriveUserRooms, deriveUserRooms,
deriveOtherRooms, deriveOtherRooms,
@@ -93,7 +92,7 @@
</Button> </Button>
</li> </li>
<li> <li>
{#if getMembershipUrls($userMembership).includes(url)} {#if $userRoomsByUrl.has(url)}
<Button on:click={leaveSpace} class="text-error"> <Button on:click={leaveSpace} class="text-error">
<Icon icon="exit" /> <Icon icon="exit" />
Leave Space Leave Space
+3 -3
View File
@@ -5,7 +5,7 @@
import CardButton from "@lib/components/CardButton.svelte" import CardButton from "@lib/components/CardButton.svelte"
import MenuSpacesItem from "@app/components/MenuSpacesItem.svelte" import MenuSpacesItem from "@app/components/MenuSpacesItem.svelte"
import SpaceAdd from "@app/components/SpaceAdd.svelte" import SpaceAdd from "@app/components/SpaceAdd.svelte"
import {userMembership, getMembershipUrls, PLATFORM_RELAY} from "@app/state" import {userRoomsByUrl, PLATFORM_RELAY} from "@app/state"
import {pushModal} from "@app/modal" import {pushModal} from "@app/modal"
const addSpace = () => pushModal(SpaceAdd) const addSpace = () => pushModal(SpaceAdd)
@@ -15,8 +15,8 @@
{#if PLATFORM_RELAY} {#if PLATFORM_RELAY}
<MenuSpacesItem url={PLATFORM_RELAY} /> <MenuSpacesItem url={PLATFORM_RELAY} />
<Divider /> <Divider />
{:else if getMembershipUrls($userMembership).length > 0} {:else if $userRoomsByUrl.size > 0}
{#each getMembershipUrls($userMembership) as url (url)} {#each $userRoomsByUrl.keys() as url (url)}
<MenuSpacesItem {url} /> <MenuSpacesItem {url} />
{/each} {/each}
<Divider /> <Divider />
+2 -8
View File
@@ -10,13 +10,7 @@
import MenuSpaces from "@app/components/MenuSpaces.svelte" import MenuSpaces from "@app/components/MenuSpaces.svelte"
import MenuSettings from "@app/components/MenuSettings.svelte" import MenuSettings from "@app/components/MenuSettings.svelte"
import PrimaryNavItemSpace from "@app/components/PrimaryNavItemSpace.svelte" import PrimaryNavItemSpace from "@app/components/PrimaryNavItemSpace.svelte"
import { import {userRoomsByUrl, canDecrypt, PLATFORM_RELAY, PLATFORM_LOGO} from "@app/state"
userMembership,
getMembershipUrls,
canDecrypt,
PLATFORM_RELAY,
PLATFORM_LOGO,
} from "@app/state"
import {pushModal} from "@app/modal" import {pushModal} from "@app/modal"
import {makeSpacePath} from "@app/routes" import {makeSpacePath} from "@app/routes"
import {notifications} from "@app/notifications" import {notifications} from "@app/notifications"
@@ -31,7 +25,7 @@
const openChat = () => ($canDecrypt ? goto("/chat") : pushModal(ChatEnable, {next: "/chat"})) const openChat = () => ($canDecrypt ? goto("/chat") : pushModal(ChatEnable, {next: "/chat"}))
$: spaceUrls = getMembershipUrls($userMembership) $: spaceUrls = Array.from($userRoomsByUrl.keys())
$: spacePaths = spaceUrls.map(url => makeSpacePath(url)) $: spacePaths = spaceUrls.map(url => makeSpacePath(url))
$: anySpaceNotifications = spacePaths.some( $: anySpaceNotifications = spacePaths.some(
path => !$page.url.pathname.startsWith(path) && $notifications.has(path), path => !$page.url.pathname.startsWith(path) && $notifications.has(path),
+2 -2
View File
@@ -1,5 +1,5 @@
import type {Page} from "@sveltejs/kit" import type {Page} from "@sveltejs/kit"
import {userMembership, makeChatId, decodeRelay, encodeRelay, getMembershipUrls} from "@app/state" import {makeChatId, decodeRelay, encodeRelay, userRoomsByUrl} from "@app/state"
export const makeSpacePath = (url: string, ...extra: string[]) => { export const makeSpacePath = (url: string, ...extra: string[]) => {
let path = `/spaces/${encodeRelay(url)}` let path = `/spaces/${encodeRelay(url)}`
@@ -28,7 +28,7 @@ export const makeThreadPath = (url: string, eventId?: string) => {
export const getPrimaryNavItem = ($page: Page) => $page.route?.id?.split("/")[1] export const getPrimaryNavItem = ($page: Page) => $page.route?.id?.split("/")[1]
export const getPrimaryNavItemIndex = ($page: Page) => { export const getPrimaryNavItemIndex = ($page: Page) => {
const urls = getMembershipUrls(userMembership.get()) const urls = Array.from(userRoomsByUrl.get().keys())
switch (getPrimaryNavItem($page)) { switch (getPrimaryNavItem($page)) {
case "discover": case "discover":
+1 -1
View File
@@ -638,7 +638,7 @@ export const userRoomsByUrl = withGetter(
export const deriveUserRooms = (url: string) => export const deriveUserRooms = (url: string) =>
derived(userRoomsByUrl, $userRoomsByUrl => derived(userRoomsByUrl, $userRoomsByUrl =>
sortBy(roomComparator(url), uniq(Array.from($userRoomsByUrl.get(url) || []))), sortBy(roomComparator(url), uniq(Array.from($userRoomsByUrl.get(url) || [GENERAL]))),
) )
export const deriveOtherRooms = (url: string) => export const deriveOtherRooms = (url: string) =>
+3 -3
View File
@@ -185,11 +185,11 @@
} }
// Listen for space data, populate space-based notifications // Listen for space data, populate space-based notifications
let spacesSub: any let unsubSpaces: any
userMembership.subscribe($membership => { userMembership.subscribe($membership => {
spacesSub?.close() unsubSpaces?.()
spacesSub = listenForNotifications() unsubSpaces = listenForNotifications()
}) })
// Listen for chats, populate chat-based notifications // Listen for chats, populate chat-based notifications
+2 -2
View File
@@ -15,10 +15,10 @@
import SpaceCheck from "@app/components/SpaceCheck.svelte" import SpaceCheck from "@app/components/SpaceCheck.svelte"
import ProfileCircles from "@app/components/ProfileCircles.svelte" import ProfileCircles from "@app/components/ProfileCircles.svelte"
import { import {
userMembership,
memberships, memberships,
membershipByPubkey, membershipByPubkey,
getMembershipUrls, getMembershipUrls,
userRoomsByUrl,
getDefaultPubkeys, getDefaultPubkeys,
} from "@app/state" } from "@app/state"
import {discoverRelays} from "@app/commands" import {discoverRelays} from "@app/commands"
@@ -98,7 +98,7 @@
{/if} {/if}
</div> </div>
</div> </div>
{#if getMembershipUrls($userMembership).includes(relay.url)} {#if $userRoomsByUrl.has(relay.url)}
<div <div
class="tooltip absolute -right-1 -top-1 h-5 w-5 rounded-full bg-primary" class="tooltip absolute -right-1 -top-1 h-5 w-5 rounded-full bg-primary"
data-tip="You are already a member of this space."> data-tip="You are already a member of this space.">
+2 -3
View File
@@ -22,8 +22,7 @@
channelsById, channelsById,
deriveUserRooms, deriveUserRooms,
deriveOtherRooms, deriveOtherRooms,
userMembership, userRoomsByUrl,
getMembershipUrls,
} from "@app/state" } from "@app/state"
import {makeChatPath, makeRoomPath, makeSpacePath} from "@app/routes" import {makeChatPath, makeRoomPath, makeSpacePath} from "@app/routes"
import {notifications} from "@app/notifications" import {notifications} from "@app/notifications"
@@ -51,7 +50,7 @@
</div> </div>
<strong slot="title">Home</strong> <strong slot="title">Home</strong>
<div slot="action" class="row-2"> <div slot="action" class="row-2">
{#if !getMembershipUrls($userMembership).includes(url)} {#if !$userRoomsByUrl.has(url)}
<Button class="btn btn-primary btn-sm" on:click={joinSpace}> <Button class="btn btn-primary btn-sm" on:click={joinSpace}>
<Icon icon="login-2" /> <Icon icon="login-2" />
Join Space Join Space
@@ -24,13 +24,12 @@
import ChannelCompose from "@app/components/ChannelCompose.svelte" import ChannelCompose from "@app/components/ChannelCompose.svelte"
import { import {
userSettingValues, userSettingValues,
userMembership,
decodeRelay, decodeRelay,
deriveEventsForUrl, deriveEventsForUrl,
GENERAL, GENERAL,
tagRoom, tagRoom,
LEGACY_MESSAGE, LEGACY_MESSAGE,
getMembershipRoomsByUrl, userRoomsByUrl,
displayChannel, displayChannel,
} from "@app/state" } from "@app/state"
import {setChecked} from "@app/notifications" import {setChecked} from "@app/notifications"
@@ -160,7 +159,7 @@
</strong> </strong>
<div slot="action" class="row-2"> <div slot="action" class="row-2">
{#if room !== GENERAL} {#if room !== GENERAL}
{#if getMembershipRoomsByUrl(url, $userMembership).includes(room)} {#if $userRoomsByUrl.get(url)?.has(room)}
<Button class="btn btn-neutral btn-sm" on:click={leaveRoom}> <Button class="btn btn-neutral btn-sm" on:click={leaveRoom}>
<Icon icon="arrows-a-logout-2" /> <Icon icon="arrows-a-logout-2" />
Leave Room Leave Room