Make voice rooms in sidebar reactive

This commit is contained in:
mplorentz
2026-03-02 17:49:13 -05:00
parent f06ae4b105
commit ceed94f669
2 changed files with 30 additions and 6 deletions
+8 -6
View File
@@ -47,6 +47,8 @@
deriveSpaceMembers,
deriveUserRooms,
deriveOtherRooms,
deriveRoomsWithLivekit,
deriveRoomsNoText,
userSpaceUrls,
hasNip29,
deriveUserCanCreateRoom,
@@ -55,8 +57,6 @@
notificationSettings,
deriveShouldNotify,
displayRoom,
roomHasLivekit,
roomIsNoText,
} from "@app/core/state"
import {setSpaceNotifications} from "@app/core/commands"
import {pushModal} from "@app/util/modal"
@@ -72,6 +72,8 @@
const calendarPath = makeSpacePath(url, "calendar")
const userRooms = deriveUserRooms(url)
const otherRooms = deriveOtherRooms(url)
const roomsWithLivekit = deriveRoomsWithLivekit(url)
const roomsNoText = deriveRoomsNoText(url)
const members = deriveSpaceMembers(url)
const userIsAdmin = deriveUserIsSpaceAdmin(url)
const reports = deriveEventsForUrl(url, [{kinds: [REPORT]}])
@@ -260,10 +262,10 @@
<SecondaryNavHeader>Your Rooms</SecondaryNavHeader>
{/if}
{#each $userRooms as h (h)}
{#if !roomIsNoText(url, h)}
{#if !$roomsNoText.has(h)}
<SpaceMenuRoomItem notify {replaceState} {url} {h} />
{/if}
{#if roomHasLivekit(url, h)}
{#if $roomsWithLivekit.has(h)}
<VoiceRoomItem {url} {h} />
{/if}
{/each}
@@ -284,10 +286,10 @@
</label>
{/if}
{#each $roomSearch.searchValues(term) as h (h)}
{#if !roomIsNoText(url, h)}
{#if !$roomsNoText.has(h)}
<SpaceMenuRoomItem {replaceState} {url} {h} />
{/if}
{#if roomHasLivekit(url, h)}
{#if $roomsWithLivekit.has(h)}
<VoiceRoomItem {url} {h} />
{/if}
{/each}
+22
View File
@@ -663,6 +663,28 @@ export const displayRoom = (url: string, h: string) => getRoom(makeRoomId(url, h
export const roomComparator = (url: string) => (h: string) => displayRoom(url, h).toLowerCase()
export const deriveRoomsWithLivekit = (url: string) =>
derived(roomsById, $roomsById => {
const set = new Set<string>()
for (const room of $roomsById.values()) {
if (room.url === url && room.event?.tags?.some(t => t[0] === "livekit")) {
set.add(room.h)
}
}
return set
})
export const deriveRoomsNoText = (url: string) =>
derived(roomsById, $roomsById => {
const set = new Set<string>()
for (const room of $roomsById.values()) {
if (room.url === url && room.event?.tags?.some(t => t[0] === "no-text")) {
set.add(room.h)
}
}
return set
})
export const roomHasLivekit = (url: string, h: string) => {
const room = getRoom(makeRoomId(url, h))
return room?.event?.tags?.some(t => t[0] === "livekit") ?? false