Refactor: use relay-provided member lists as source of truth #191

Merged
hodlbod merged 8 commits from :dev into dev 2026-04-13 21:12:51 +00:00
6 changed files with 17 additions and 11 deletions
Showing only changes of commit 3e41ad469f - Show all commits
+2 -2
View File
@@ -20,7 +20,7 @@
import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte"
import {pushToast} from "@app/util/toast"
import {pushModal} from "@app/util/modal"
import {deriveRoom, getSpaceMembers} from "@app/core/state"
import {deriveRoom, deriveSpaceMembers} from "@app/core/state"
import {addRoomMembers} from "@app/core/commands"
interface Props {
@@ -31,7 +31,7 @@
const {url, h}: Props = $props()
const room = deriveRoom(url, h)
const spaceMembers = getSpaceMembers(url)
const spaceMembers = deriveSpaceMembers(url)
const back = () => history.back()
1
+2 -2
View File
@@ -22,7 +22,7 @@
import SpaceMembersAdd from "@app/components/SpaceMembersAdd.svelte"
import SpaceMembersBanned from "@app/components/SpaceMembersBanned.svelte"
import {
getSpaceMembers,
deriveSpaceMembers,
deriveSpaceBannedPubkeyItems,
deriveUserIsSpaceAdmin,
deriveSupportedMethods,
@@ -36,7 +36,7 @@
const {url}: Props = $props()
const members = getSpaceMembers(url)
const members = deriveSpaceMembers(url)
const bans = deriveSpaceBannedPubkeyItems(url)
const userIsAdmin = deriveUserIsSpaceAdmin(url)
const supportedMethods = deriveSupportedMethods(url)
1
+2 -2
View File
@@ -44,7 +44,7 @@
import {
ENABLE_ZAPS,
CONTENT_KINDS,
getSpaceMembers,
deriveSpaceMembers,
deriveUserRooms,
deriveOtherRooms,
deriveOtherVoiceRooms,
@@ -76,7 +76,7 @@
const userRooms = deriveUserRooms(url)
const otherRooms = deriveOtherRooms(url)
const otherVoiceRooms = deriveOtherVoiceRooms(url)
const members = getSpaceMembers(url)
const members = deriveSpaceMembers(url)
const userIsAdmin = deriveUserIsSpaceAdmin(url)
const actionItems = deriveSpaceActionItems(url)
1
+2 -2
View File
@@ -95,7 +95,7 @@ import {
stripPrefix,
relaysMostlyRestricted,
deriveSocket,
getSpaceMembers,
deriveSpaceMembers,
} from "@app/core/state"
// Utils
@@ -765,7 +765,7 @@ export const addSpaceMembers = async (
url: string,
pubkeys: string[],
): Promise<string | undefined> => {
const spaceMembers = get(getSpaceMembers(url))
const spaceMembers = get(deriveSpaceMembers(url))
const results = await Promise.all(
pubkeys
1
+1 -1
View File
@@ -808,7 +808,7 @@ export const deriveOtherRooms = (url: string) =>
// Space/room memberships
hodlbod marked this conversation as resolved Outdated
Outdated
Review

Let's just keep calling this getSpaceMembers. I was thinking of using the list directly, but it's more convenient to return the uniqe list of pubkeys. However, you might change the body to:

([event]) => uniq(getTagValues("member", event?.tags ?? []))

Same thing in deriveRoomMemberList (which should be deriveRoomMembers).

Let's just keep calling this `getSpaceMembers`. I was thinking of using the list directly, but it's more convenient to return the uniqe list of pubkeys. However, you might change the body to: ```typescript ([event]) => uniq(getTagValues("member", event?.tags ?? [])) ``` Same thing in deriveRoomMemberList (which should be deriveRoomMembers).
export const getSpaceMembers = (url: string) =>
export const deriveSpaceMembers = (url: string) =>
hodlbod marked this conversation as resolved Outdated
Outdated
Review

This should be renamed to deriveSpaceMembers since it returns a svelte store, not the value itself.

This should be renamed to deriveSpaceMembers since it returns a svelte store, not the value itself.
derived(deriveRelaySignedEvents(url, [{kinds: [RELAY_MEMBERS]}]), ([event]) =>
uniq(getTagValues("member", event?.tags ?? [])),
)
+8 -2
View File
@@ -28,7 +28,13 @@ import {RoomReferenceExtension} from "@app/editor/RoomReferenceExtension"
import RoomSuggestion from "@app/editor/RoomSuggestion.svelte"
import {NativeClipboardPasteExtension} from "@app/editor/clipboard"
import {uploadFile} from "@app/core/commands"
import {getSpaceMembers, makeRoomId, splitRoomId, userSpaceUrls, roomsByUrl} from "@app/core/state"
import {
deriveSpaceMembers,
makeRoomId,
splitRoomId,
userSpaceUrls,
roomsByUrl,
} from "@app/core/state"
import {pushToast} from "@app/util/toast"
export const makeEditor = async ({
@@ -58,7 +64,7 @@ export const makeEditor = async ({
[
throttled(800, profiles),
throttled(800, handlesByNip05),
throttled(800, getSpaceMembers(url || "")),
throttled(800, deriveSpaceMembers(url || "")),
Outdated
Review

Remove the comment

Remove the comment
],
([$profiles, $handlesByNip05, $spaceMembers]) => {
// Remove invalid nip05's from profiles