From 7fc344df3442237c9129822244db64cae16f2dbd Mon Sep 17 00:00:00 2001 From: Nik Graf Date: Fri, 26 Sep 2025 18:49:43 +0200 Subject: [PATCH] fix invitations --- apps/connect/src/routes/login.lazy.tsx | 9 ++--- .../events/src/components/invite-to-space.tsx | 36 +++++++++++++++++++ apps/events/src/routes/index.tsx | 7 ++-- .../src/routes/space/$spaceId/index.tsx | 24 ++----------- .../src/routes/space/$spaceId/playground.tsx | 5 ++- .../src/routes/space/$spaceId/index.tsx | 24 ++----------- apps/server/src/websocket.ts | 13 ++----- docs/docs/space-invitations.md | 4 +-- .../src/HypergraphAppContext.tsx | 36 +++++++++++-------- .../src/connect/parse-auth-params.ts | 1 - packages/hypergraph/src/messages/types.ts | 8 +++++ packages/hypergraph/src/store.ts | 7 ++++ 12 files changed, 93 insertions(+), 81 deletions(-) create mode 100644 apps/events/src/components/invite-to-space.tsx diff --git a/apps/connect/src/routes/login.lazy.tsx b/apps/connect/src/routes/login.lazy.tsx index 94ef016a..fd0d4a81 100644 --- a/apps/connect/src/routes/login.lazy.tsx +++ b/apps/connect/src/routes/login.lazy.tsx @@ -1,11 +1,11 @@ +import GeoLogo from '@/assets/images/geo-logo-branded.svg?react'; +import { AppTitle } from '@/components/ui/AppTitle'; +import { Loading } from '@/components/ui/Loading'; import { Connect, type Identity } from '@graphprotocol/hypergraph'; import { type ConnectedWallet, useIdentityToken, usePrivy, useWallets } from '@privy-io/react-auth'; import { createLazyFileRoute, useRouter } from '@tanstack/react-router'; import { useCallback, useEffect, useState } from 'react'; import { createWalletClient, custom, type WalletClient } from 'viem'; -import GeoLogo from '@/assets/images/geo-logo-branded.svg?react'; -import { AppTitle } from '@/components/ui/AppTitle'; -import { Loading } from '@/components/ui/Loading'; const CHAIN = import.meta.env.VITE_HYPERGRAPH_CHAIN === 'geogenesis' ? Connect.GEOGENESIS : Connect.GEO_TESTNET; const syncServerUri = import.meta.env.VITE_HYPERGRAPH_SYNC_SERVER_ORIGIN; @@ -25,7 +25,6 @@ function Login() { const hypergraphLogin = useCallback( async (walletClient: WalletClient, embeddedWallet: ConnectedWallet) => { - console.log('hypergraphLogin'); if (!identityToken) { return; } @@ -69,14 +68,12 @@ function Login() { ); useEffect(() => { - console.log('useEffect in login.lazy.tsx'); if ( !hypergraphLoginStarted && // avoid re-running the effect too often privyAuthenticated && // privy must be authenticated to run it walletsReady && // wallets must be ready to run it wallets.length > 0 // wallets must have at least one wallet to run it ) { - console.log('running login effect'); setHypergraphLoginStarted(true); (async () => { try { diff --git a/apps/events/src/components/invite-to-space.tsx b/apps/events/src/components/invite-to-space.tsx new file mode 100644 index 00000000..7cc21b7b --- /dev/null +++ b/apps/events/src/components/invite-to-space.tsx @@ -0,0 +1,36 @@ +import { useHypergraphApp, useSpace } from '@graphprotocol/hypergraph-react'; +import { Button } from './ui/button'; +import { Input } from './ui/input'; + +export function InviteToSpace() { + const { inviteToSpace } = useHypergraphApp(); + const { ready: spaceReady, id: spaceId } = useSpace({ mode: 'private' }); + + if (!spaceReady) { + return
Loading space...
; + } + + return ( +
{ + event.preventDefault(); + try { + console.log((event.target as HTMLFormElement).inviteeAddress.value); + const inviteeAddress = (event.target as HTMLFormElement).inviteeAddress.value; + await inviteToSpace({ + space: spaceId, + inviteeAccountAddress: inviteeAddress, + }); + alert('Invited to space'); + (event.target as HTMLFormElement).inviteeAddress.value = ''; + } catch (error) { + alert('Failed to invite to space'); + console.error(error); + } + }} + > + + +
+ ); +} diff --git a/apps/events/src/routes/index.tsx b/apps/events/src/routes/index.tsx index c504c645..faeed8db 100644 --- a/apps/events/src/routes/index.tsx +++ b/apps/events/src/routes/index.tsx @@ -1,11 +1,11 @@ +import { Button } from '@/components/ui/button'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Input } from '@/components/ui/input'; import { store } from '@graphprotocol/hypergraph'; import { useHypergraphApp, useSpaces } from '@graphprotocol/hypergraph-react'; import { createFileRoute, Link } from '@tanstack/react-router'; import { useSelector } from '@xstate/store/react'; import { useEffect, useState } from 'react'; -import { Button } from '@/components/ui/button'; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; -import { Input } from '@/components/ui/input'; export const Route = createFileRoute('/')({ component: Index, @@ -44,6 +44,7 @@ function Index() { return (

Invitations

+ {invitations.length === 0 &&
No invitations
}