diff --git a/src/app/components/MenuOtherSpaces.svelte b/src/app/components/MenuOtherSpaces.svelte
index 2f7c3469..7159a183 100644
--- a/src/app/components/MenuOtherSpaces.svelte
+++ b/src/app/components/MenuOtherSpaces.svelte
@@ -1,5 +1,7 @@
diff --git a/src/app/core/commands.ts b/src/app/core/commands.ts
index b33ec4d9..2ea604a8 100644
--- a/src/app/core/commands.ts
+++ b/src/app/core/commands.ts
@@ -37,6 +37,7 @@ import {
makeList,
addToListPublicly,
removeFromListByPredicate,
+ updateList,
getTag,
getListTags,
getRelayTagValues,
@@ -148,6 +149,20 @@ export const removeSpaceMembership = async (url: string) => {
return publishThunk({event, relays})
}
+export const setSpaceMembershipOrder = async (urls: string[]) => {
+ const list = get(userGroupList) || makeList({kind: ROOMS})
+ const orderedUrls = uniq(urls.map(normalizeRelayUrl))
+ const relayTags = list.publicTags.filter(t => t[0] === "r")
+ const otherPublicTags = list.publicTags.filter(t => t[0] !== "r")
+ const relayTagByUrl = new Map(relayTags.map(t => [normalizeRelayUrl(t[1]), t]))
+ const orderedRelayTags = orderedUrls.map(url => relayTagByUrl.get(url) || ["r", url])
+ const publicTags = [...orderedRelayTags, ...otherPublicTags]
+ const event = await updateList(list, {publicTags}).reconcile(nip44EncryptToSelf)
+ const relays = uniq([...Router.get().FromUser().getUrls(), ...getRelayTagValues(event.tags)])
+
+ return publishThunk({event, relays})
+}
+
export const addRoomMembership = async (url: string, h: string) => {
const list = get(userGroupList) || makeList({kind: ROOMS})
const newTags = [
diff --git a/src/routes/spaces/+page.svelte b/src/routes/spaces/+page.svelte
index d9b53c4e..48e0875e 100644
--- a/src/routes/spaces/+page.svelte
+++ b/src/routes/spaces/+page.svelte
@@ -1,4 +1,5 @@