From 0eb65be4271ec2a82ecb5058b79f195a331f3be7 Mon Sep 17 00:00:00 2001
From: Jon Staab
Date: Fri, 16 Aug 2024 12:42:00 -0700
Subject: [PATCH] Add ability to join a space
---
src/app/commands.ts | 23 +++++-
src/app/components/InfoNip29.svelte | 7 +-
src/app/components/LogIn.svelte | 5 +-
src/app/components/PrimaryNav.svelte | 6 +-
src/app/components/SpaceAdd.svelte | 4 +-
src/app/components/SpaceInviteAccept.svelte | 92 +++++++++++++++++++++
src/app/components/SpaceJoin.svelte | 88 ++++++++------------
src/app/state.ts | 2 +
src/lib/components/SecondaryNavItem.svelte | 2 +-
src/routes/+layout.svelte | 7 +-
src/routes/discover/+layout.svelte | 4 +-
src/routes/discover/+page.svelte | 6 +-
src/routes/spaces/+layout.svelte | 76 -----------------
src/routes/spaces/[nom]/+layout.svelte | 90 ++++++++++++++++++++
14 files changed, 264 insertions(+), 148 deletions(-)
create mode 100644 src/app/components/SpaceInviteAccept.svelte
delete mode 100644 src/routes/spaces/+layout.svelte
create mode 100644 src/routes/spaces/[nom]/+layout.svelte
diff --git a/src/app/commands.ts b/src/app/commands.ts
index 94cf167..dd1fe50 100644
--- a/src/app/commands.ts
+++ b/src/app/commands.ts
@@ -1,7 +1,24 @@
-import {uniqBy, now} from "@welshman/lib"
-import {GROUPS, asDecryptedEvent, readList, editList, makeList, createList} from "@welshman/util"
+import {uniqBy, uniq, now} from "@welshman/lib"
+import {GROUPS, asDecryptedEvent, getGroupTags, getRelayTagValues, readList, editList, makeList, createList} from "@welshman/util"
import {pk, signer, repository, INDEXER_RELAYS} from "@app/base"
-import {getWriteRelayUrls, loadRelaySelections, publish, ensurePlaintext} from "@app/state"
+import {getWriteRelayUrls, loadGroup, loadGroupMembership, loadProfile, loadFollows, loadMutes, loadRelaySelections, publish, ensurePlaintext} from "@app/state"
+
+export const loadUserData = async (pubkey: string, hints: string[] = []) => {
+ const relaySelections = await loadRelaySelections(pubkey, INDEXER_RELAYS)
+ const relays = uniq([...getRelayTagValues(relaySelections?.tags || []), ...INDEXER_RELAYS, ...hints])
+ const membership = await loadGroupMembership(pubkey, relays)
+ const promises = [
+ loadProfile(pubkey, relays),
+ loadFollows(pubkey, relays),
+ loadMutes(pubkey, relays),
+ ]
+
+ for (const [_, nom, url] of getGroupTags(membership?.event.tags || [])) {
+ promises.push(loadGroup(nom, [url]))
+ }
+
+ await Promise.all(promises)
+}
export type ModifyTags = (tags: string[][]) => string[][]
diff --git a/src/app/components/InfoNip29.svelte b/src/app/components/InfoNip29.svelte
index 65de2d5..c466c7e 100644
--- a/src/app/components/InfoNip29.svelte
+++ b/src/app/components/InfoNip29.svelte
@@ -21,8 +21,11 @@
>. If you do decide to join someone else's, make sure to follow their directions for registering
as a user.
-
- groups.fiatjaf.com
+
+
+
+ groups.fiatjaf.com
+
diff --git a/src/app/components/LogIn.svelte b/src/app/components/LogIn.svelte
index 14babd5..178278e 100644
--- a/src/app/components/LogIn.svelte
+++ b/src/app/components/LogIn.svelte
@@ -9,6 +9,7 @@
import {pushToast} from "@app/toast"
import {addSession} from "@app/base"
import {loadHandle} from "@app/state"
+ import {loadUserData} from "@app/commands"
const back = () => history.back()
@@ -23,9 +24,11 @@
})
}
- const {pubkey} = handle
+ const {pubkey, relays = []} = handle
const broker = Nip46Broker.get(pubkey, secret, handler)
+ loadUserData(pubkey, relays)
+
if (await broker.connect()) {
addSession({method: "nip46", pubkey, secret, handler})
pushToast({message: "Successfully logged in!"})
diff --git a/src/app/components/PrimaryNav.svelte b/src/app/components/PrimaryNav.svelte
index 28c242d..2bcf821 100644
--- a/src/app/components/PrimaryNav.svelte
+++ b/src/app/components/PrimaryNav.svelte
@@ -13,7 +13,7 @@
import Avatar from "@lib/components/Avatar.svelte"
import PrimaryNavItem from "@lib/components/PrimaryNavItem.svelte"
import SpaceAdd from "@app/components/SpaceAdd.svelte"
- import {userProfile, userGroupsByNom} from "@app/state"
+ import {userProfile, displayGroup, userGroupsByNom} from "@app/state"
import {pushModal} from "@app/modal"
import {getPrimaryNavItemIndex} from "@app/routes"
@@ -51,9 +51,9 @@
{#each $userGroupsByNom.entries() as [nom, qualifiedGroups] (nom)}
{@const qualifiedGroup = qualifiedGroups[0]}
-
+
-

+
{/each}
diff --git a/src/app/components/SpaceAdd.svelte b/src/app/components/SpaceAdd.svelte
index e78fbb3..044a63c 100644
--- a/src/app/components/SpaceAdd.svelte
+++ b/src/app/components/SpaceAdd.svelte
@@ -2,12 +2,12 @@
import Button from "@lib/components/Button.svelte"
import CardButton from "@lib/components/CardButton.svelte"
import SpaceCreate from "@app/components/SpaceCreate.svelte"
- import SpaceJoin from "@app/components/SpaceJoin.svelte"
+ import SpaceInviteAccept from "@app/components/SpaceInviteAccept.svelte"
import {pushModal} from "@app/modal"
const startCreate = () => pushModal(SpaceCreate)
- const startJoin = () => pushModal(SpaceJoin)
+ const startJoin = () => pushModal(SpaceInviteAccept)
diff --git a/src/app/components/SpaceInviteAccept.svelte b/src/app/components/SpaceInviteAccept.svelte
new file mode 100644
index 0000000..e13b19a
--- /dev/null
+++ b/src/app/components/SpaceInviteAccept.svelte
@@ -0,0 +1,92 @@
+
+
+
diff --git a/src/app/components/SpaceJoin.svelte b/src/app/components/SpaceJoin.svelte
index e13b19a..abe4998 100644
--- a/src/app/components/SpaceJoin.svelte
+++ b/src/app/components/SpaceJoin.svelte
@@ -1,90 +1,70 @@