diff --git a/README.md b/README.md index 6ca6cb3..8442cd8 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Instate is an conceptual protocol created to build localized applications with l ## @instate/kit -ConnectButton exports Rainbowkit's original ConnectButton with an additional LocalAccountButton that let user's pick the local account they would like to use for your application. Just like for networks, you can require a certain location and +This kit exports Rainbowkit's original ConnectButton with an additional LocalAccountButton that let user's pick the local account they would like to use for your application. Just like for networks, you can require a certain location and propose a local account switch to your user, or (soon) a move if the user doesn't have a local account in your application vicinity. diff --git a/apps/subgraph/generated/schema.ts b/apps/subgraph/generated/schema.ts index 0b2897b..97b699d 100644 --- a/apps/subgraph/generated/schema.ts +++ b/apps/subgraph/generated/schema.ts @@ -505,6 +505,19 @@ export class NetworkStateTravel extends Entity { set nextGeohash(value: string) { this.set("nextGeohash", Value.fromString(value)); } + + get transactionHash(): Bytes { + let value = this.get("transactionHash"); + if (!value || value.kind == ValueKind.NULL) { + throw new Error("Cannot return null for a required field."); + } else { + return value.toBytes(); + } + } + + set transactionHash(value: Bytes) { + this.set("transactionHash", Value.fromBytes(value)); + } } export class LocalRecord extends Entity { diff --git a/apps/subgraph/schema.graphql b/apps/subgraph/schema.graphql index 0082630..796b78c 100644 --- a/apps/subgraph/schema.graphql +++ b/apps/subgraph/schema.graphql @@ -40,6 +40,7 @@ type NetworkStateTravel @entity(immutable: true) { account: Bytes! # address previousGeohash: String! # string nextGeohash: String! # string + transactionHash: Bytes! } # --------------------- RECORD --------------------- diff --git a/apps/subgraph/src/state.ts b/apps/subgraph/src/state.ts index 1425c4d..ad81910 100644 --- a/apps/subgraph/src/state.ts +++ b/apps/subgraph/src/state.ts @@ -16,6 +16,7 @@ export function handleNetworkStateTravel(event: StateMoveEvent): void { travel.account = event.params.account; travel.previousGeohash = event.params.previousGeohash; travel.nextGeohash = event.params.nextGeohash; + travel.transactionHash = event.transaction.hash; let agent = Agent.load(event.params.account); diff --git a/apps/web/app/map/layout.tsx b/apps/web/app/map/layout.tsx index 3e7c472..81c02b2 100644 --- a/apps/web/app/map/layout.tsx +++ b/apps/web/app/map/layout.tsx @@ -5,7 +5,6 @@ import { commonLocations } from '@/services/constants' import AccountMarker from '@/components/Map/AccountMarker' import FogLayer from '@/components/Map/Fog' import AppNavigationBar from '@/components/AppNavigationBar' -import AppMapControls from '@/components/AppMapControls' import usePath from '@/hooks/usePath' import NetworkStateLayers from '@/components/Map/NetworkStateLayers' import { ConnectButton } from '@instate/kit' @@ -44,9 +43,6 @@ const Home = ({ children }: HomeProps) => { {isProfile && } {isLocalDrops && } {isTile && } -
- -
diff --git a/apps/web/app/map/profile/page.tsx b/apps/web/app/map/profile/page.tsx index c1d5e93..90982df 100644 --- a/apps/web/app/map/profile/page.tsx +++ b/apps/web/app/map/profile/page.tsx @@ -2,14 +2,14 @@ import type { NextPage } from 'next' import useAppAgent from '@/hooks/useAppAgent' -import { truncateAddress } from '@/services/utils' import StateHeader from '@/components/StateHeader' import Tabs from '@/components/Tabs' -import { NetworkState } from '@instate/kit' -import AccountNFTs from '@/components/LocalAccountNFTs' +import { NetworkState, useLocalAccount } from '@instate/kit' +import ConnectedLocalAccount from '@/components/ConnectedLocalAccount' const Home: NextPage = () => { const { agent } = useAppAgent() + const { switchLocalAccount } = useLocalAccount() return ( <> @@ -21,25 +21,29 @@ const Home: NextPage = () => { (agent?.records.length ? ` (${agent?.records.length})` : ''), content: (
- {agent?.records.map(({ geohash, id }) => { - return ( -
-
-

- Local Account:{' '} - {geohash} -

-

- {truncateAddress(id, 6)} -

+ +
+ {agent?.records.map((record) => { + return ( +
{ + switchLocalAccount(record.geohash) + }} + key={record.geohash} + className="flex flex-col gap-2 p-2 text-base-content rounded-md select-none bg-neutral-900 hover:cursor-pointer hover:bg-neutral-700" + > +
+

+ Local Account:{' '} + + {record.geohash} + +

+
- -
- ) - })} + ) + })} +
), }, diff --git a/apps/web/components/ConnectedLocalAccount.tsx b/apps/web/components/ConnectedLocalAccount.tsx new file mode 100644 index 0000000..5e3dc87 --- /dev/null +++ b/apps/web/components/ConnectedLocalAccount.tsx @@ -0,0 +1,49 @@ +import { useLocalAccount } from '@instate/kit' +import AccountNFTs from './LocalAccountNFTs' +import { truncateAddress } from '@/services/utils' +import useChain from '@/hooks/useChain' +import Link from 'next/link' + +const ConnectedLocalAccount = ({}) => { + const { localAccount } = useLocalAccount() + const { chain } = useChain() + + return ( +
+
+

+ Connected Local Account:{' '} + {localAccount?.geohash} +

+ {localAccount && ( + +
+ + + + +
+

{truncateAddress(localAccount?.id, 6)}

+ + )} +
+ +
+ ) +} + +export default ConnectedLocalAccount diff --git a/apps/web/components/LocalAccountNFTs.tsx b/apps/web/components/LocalAccountNFTs.tsx index 4704003..7991779 100644 --- a/apps/web/components/LocalAccountNFTs.tsx +++ b/apps/web/components/LocalAccountNFTs.tsx @@ -3,16 +3,23 @@ import { OwnedNft } from 'alchemy-sdk' import { useEffect, useState } from 'react' import { getAlchemyNFT } from 'shared-config' -const AccountNFTs = ({ account }: { account: string }) => { +const AccountNFTs = ({ account }: { account?: string }) => { const { chainId } = useChain() const [nfts, setNfts] = useState(null) + const [nftsLoading, setNftsLoading] = useState(false) const fetchNFTs = async () => { + if (!account) return + + setNftsLoading(true) + const nfts = getAlchemyNFT(chainId) const { ownedNfts } = await nfts.getNftsForOwner(account) setNfts(ownedNfts) + + setNftsLoading(false) } useEffect(() => { @@ -36,6 +43,10 @@ const AccountNFTs = ({ account }: { account: string }) => {
) }) + ) : nftsLoading ? ( +
+ +
) : (

Nothing here yet

)} diff --git a/apps/web/components/Map/AccountMarker.tsx b/apps/web/components/Map/AccountMarker.tsx index fea0184..abdaed0 100644 --- a/apps/web/components/Map/AccountMarker.tsx +++ b/apps/web/components/Map/AccountMarker.tsx @@ -4,14 +4,12 @@ import { useEffect } from 'react' import { MapPinIcon } from '@heroicons/react/24/outline' import { useAccount } from 'wagmi' import classNames from 'classnames' -import { emojiAvatarForAddress, useLocalAccount } from '@instate/kit' +import { emojiAvatarForAddress } from '@instate/kit' import usePath from '@/hooks/usePath' -import useMapUtils from '@/hooks/useMapUtils' +import AccountZoomEffects from './AccountZoomEffects' const AccountMarker = () => { const { isProfile } = usePath() - const { localAccount } = useLocalAccount() - const { flyToGeohash } = useMapUtils() const { address } = useAccount() const { @@ -23,13 +21,6 @@ const AccountMarker = () => { updatePosition(latitude, longitude) }, []) - useEffect(() => { - const { geohash } = localAccount || {} - if (geohash) { - flyToGeohash(geohash, 3) - } - }, [localAccount]) - if (!isProfile) return null return ( @@ -57,6 +48,7 @@ const AccountMarker = () => { )}
+ ) } diff --git a/apps/web/components/Map/AccountZoomEffects.tsx b/apps/web/components/Map/AccountZoomEffects.tsx index cad8e73..2532f21 100644 --- a/apps/web/components/Map/AccountZoomEffects.tsx +++ b/apps/web/components/Map/AccountZoomEffects.tsx @@ -1,23 +1,15 @@ import { usePosition } from '@/hooks/usePosition' import { commonLocations } from '@/services/constants' -import { precisionToZoom } from '@/services/map_utils' import { useEffect } from 'react' import { useMap } from 'react-map-gl' const AccountZoomEffects = () => { const { - position: { precision, latitude, longitude }, + position: { precision }, } = usePosition() const { mainMap } = useMap() useEffect(() => { - if (precision) { - mainMap?.flyTo({ - center: [longitude, latitude], - zoom: precisionToZoom[precision], - speed: 5, - }) - } return () => { mainMap?.flyTo({ center: [ diff --git a/apps/web/components/AppMapControls.tsx b/apps/web/components/NetworkStateMotion.tsx similarity index 64% rename from apps/web/components/AppMapControls.tsx rename to apps/web/components/NetworkStateMotion.tsx index e291c09..9b9c0fa 100644 --- a/apps/web/components/AppMapControls.tsx +++ b/apps/web/components/NetworkStateMotion.tsx @@ -3,24 +3,29 @@ import classNames from 'classnames' import MoveButton from './MoveButton' import { useAccount } from 'wagmi' import useAppAgent from '@/hooks/useAppAgent' -import useAppAddresses from '@/hooks/useAppAddresses' -import { usePathname } from 'next/navigation' -import AccountZoomEffects from './Map/AccountZoomEffects' +import { NetworkStateQuery } from '@instate/kit' +import { useEffect } from 'react' +import useMapUtils from '@/hooks/useMapUtils' -const AppMapControls = () => { - const { stateTile } = useAppAddresses() +type NetworkStateMotionProps = { + currentNetworkState: NetworkStateQuery['networkState'] +} + +const NetworkStateMotion = ({ + currentNetworkState, +}: NetworkStateMotionProps) => { + const { flyToGeohash } = useMapUtils() const { address } = useAccount() const { setPrecision, position } = usePosition() const { geohashes, refetch } = useAppAgent() + useEffect(() => { + flyToGeohash(position.geohash) + }, [position.precision]) + return ( -
- -
-
-

{position.geohash}

-
-
+
+

Motion:

{
{ @@ -61,14 +66,4 @@ const AppMapControls = () => { ) } -/** - * NOTE: Could move to vite app, NextJS slot routing is a hellhole - * @returns - */ -const AppMapControlsRouted = () => { - const pathName = usePathname() - - return pathName.includes('/profile') ? : null -} - -export default AppMapControlsRouted +export default NetworkStateMotion diff --git a/apps/web/components/SelectedLocalDrop.tsx b/apps/web/components/SelectedLocalDrop.tsx index 619a3be..d6bf4dc 100644 --- a/apps/web/components/SelectedLocalDrop.tsx +++ b/apps/web/components/SelectedLocalDrop.tsx @@ -107,10 +107,12 @@ const LocalDropButtons = ({
{!canMint && ( <> -

- You've never visted this location, create your local account - now: -

+ {localCase === 'create-account' && ( +

+ You've never visted this location, create your local + account now: +

+ )}
+
+
) diff --git a/apps/web/hooks/useAppAgent.ts b/apps/web/hooks/useAppAgent.ts index 9281697..14d3aff 100644 --- a/apps/web/hooks/useAppAgent.ts +++ b/apps/web/hooks/useAppAgent.ts @@ -1,5 +1,5 @@ import { useAccount } from 'wagmi' -import { useAgentQuery } from '@instate/kit' +import { useAgentQuery, useLocalAccount } from '@instate/kit' import { useEffect, useMemo } from 'react' import { geohashToFeature } from '@/services/map_utils' import useChain from './useChain' @@ -8,7 +8,7 @@ import { usePosition } from './usePosition' const useAppAgent = () => { const { flyToGeohash } = useMapUtils() - const { updatePositionWithGeohash } = usePosition() + const { localAccount } = useLocalAccount() const { chainId } = useChain() const { address } = useAccount() @@ -24,13 +24,10 @@ const useAppAgent = () => { ) useEffect(() => { - if (data?.agent) { - const currentGeohash = data.agent.currentGeohash - - flyToGeohash(currentGeohash) - updatePositionWithGeohash(currentGeohash) + if (localAccount) { + flyToGeohash(localAccount.geohash) } - }, [flyToGeohash, data?.agent]) + }, [localAccount]) return useMemo(() => { const geohashes = data?.agent?.records.map((record) => record.geohash) ?? [] diff --git a/apps/web/hooks/useChain.ts b/apps/web/hooks/useChain.ts index b7afcc0..960c28e 100644 --- a/apps/web/hooks/useChain.ts +++ b/apps/web/hooks/useChain.ts @@ -11,6 +11,7 @@ const useChain = () => { return { isLocal: chainId === localhost.id, chainId, + chain, } } diff --git a/packages/kit/rtk/generated.ts b/packages/kit/rtk/generated.ts index 555d1f4..107bce1 100644 --- a/packages/kit/rtk/generated.ts +++ b/packages/kit/rtk/generated.ts @@ -635,6 +635,7 @@ export type NetworkStateTravel = { nextGeohash: Scalars['String']['output']; previousGeohash: Scalars['String']['output']; state: NetworkState; + transactionHash: Scalars['Bytes']['output']; }; export type NetworkStateTravel_Filter = { @@ -723,6 +724,16 @@ export type NetworkStateTravel_Filter = { state_not_starts_with_nocase?: InputMaybe; state_starts_with?: InputMaybe; state_starts_with_nocase?: InputMaybe; + transactionHash?: InputMaybe; + transactionHash_contains?: InputMaybe; + transactionHash_gt?: InputMaybe; + transactionHash_gte?: InputMaybe; + transactionHash_in?: InputMaybe>; + transactionHash_lt?: InputMaybe; + transactionHash_lte?: InputMaybe; + transactionHash_not?: InputMaybe; + transactionHash_not_contains?: InputMaybe; + transactionHash_not_in?: InputMaybe>; }; export enum NetworkStateTravel_OrderBy { @@ -735,7 +746,8 @@ export enum NetworkStateTravel_OrderBy { StateCreator = 'state__creator', StateId = 'state__id', StatePopulation = 'state__population', - StateVerifier = 'state__verifier' + StateVerifier = 'state__verifier', + TransactionHash = 'transactionHash' } export type NetworkState_Filter = { @@ -2152,7 +2164,7 @@ export type AgentQueryVariables = Exact<{ }>; -export type AgentQuery = { __typename?: 'Query', agent?: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }>, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> } }> } | null }; +export type AgentQuery = { __typename?: 'Query', agent?: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }>, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> } }> } | null }; export type AgentsQueryVariables = Exact<{ skip?: InputMaybe; @@ -2179,7 +2191,7 @@ export type AgentsQueryVariables = Exact<{ }>; -export type AgentsQuery = { __typename?: 'Query', agents: Array<{ __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }>, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> } }> }> }; +export type AgentsQuery = { __typename?: 'Query', agents: Array<{ __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }>, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> } }> }> }; export type StateAgentQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -2197,7 +2209,7 @@ export type StateAgentQueryVariables = Exact<{ }>; -export type StateAgentQuery = { __typename?: 'Query', stateAgent?: { __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> }, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } } | null }; +export type StateAgentQuery = { __typename?: 'Query', stateAgent?: { __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> }, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } } | null }; export type StateAgentsQueryVariables = Exact<{ skip?: InputMaybe; @@ -2219,7 +2231,7 @@ export type StateAgentsQueryVariables = Exact<{ }>; -export type StateAgentsQuery = { __typename?: 'Query', stateAgents: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> }, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }> }; +export type StateAgentsQuery = { __typename?: 'Query', stateAgents: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> }, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }> }; export type NetworkStateQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -2242,7 +2254,7 @@ export type NetworkStateQueryVariables = Exact<{ }>; -export type NetworkStateQuery = { __typename?: 'Query', networkState?: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }>, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> } | null }; +export type NetworkStateQuery = { __typename?: 'Query', networkState?: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }>, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> } | null }; export type NetworkStatesQueryVariables = Exact<{ skip?: InputMaybe; @@ -2269,7 +2281,7 @@ export type NetworkStatesQueryVariables = Exact<{ }>; -export type NetworkStatesQuery = { __typename?: 'Query', networkStates: Array<{ __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }>, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> }> }; +export type NetworkStatesQuery = { __typename?: 'Query', networkStates: Array<{ __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }>, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> }> }; export type NetworkStateMetadataQueryVariables = Exact<{ skip?: InputMaybe; @@ -2299,7 +2311,7 @@ export type NetworkStateTravelQueryVariables = Exact<{ }>; -export type NetworkStateTravelQuery = { __typename?: 'Query', networkStateTravel?: { __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }> } } | null }; +export type NetworkStateTravelQuery = { __typename?: 'Query', networkStateTravel?: { __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }> } } | null }; export type NetworkStateTravelsQueryVariables = Exact<{ skip?: InputMaybe; @@ -2321,7 +2333,7 @@ export type NetworkStateTravelsQueryVariables = Exact<{ }>; -export type NetworkStateTravelsQuery = { __typename?: 'Query', networkStateTravels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }> } }> }; +export type NetworkStateTravelsQuery = { __typename?: 'Query', networkStateTravels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, agents: Array<{ __typename?: 'StateAgent', id: any, agent: { __typename?: 'Agent', id: any, currentGeohash: string, records: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any }> } }> } }> }; export type LocalRecordQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -2339,7 +2351,7 @@ export type LocalRecordQueryVariables = Exact<{ }>; -export type LocalRecordQuery = { __typename?: 'Query', localRecord?: { __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any, owner: { __typename?: 'Agent', id: any, currentGeohash: string, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> } }> } } | null }; +export type LocalRecordQuery = { __typename?: 'Query', localRecord?: { __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any, owner: { __typename?: 'Agent', id: any, currentGeohash: string, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> } }> } } | null }; export type LocalRecordsQueryVariables = Exact<{ skip?: InputMaybe; @@ -2361,7 +2373,7 @@ export type LocalRecordsQueryVariables = Exact<{ }>; -export type LocalRecordsQuery = { __typename?: 'Query', localRecords: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any, owner: { __typename?: 'Agent', id: any, currentGeohash: string, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string }> } }> } }> }; +export type LocalRecordsQuery = { __typename?: 'Query', localRecords: Array<{ __typename?: 'LocalRecord', id: any, geohash: string, localRecordERC721: string, transactionHash: any, owner: { __typename?: 'Agent', id: any, currentGeohash: string, states: Array<{ __typename?: 'StateAgent', id: any, state: { __typename?: 'NetworkState', id: any, verifier: any, creator: any, baseURI: string, population: any, metadata?: { __typename?: 'NetworkStateMetadata', id: string, name: string, description: string, image: string, imageGateway: string, manifesto: string, manifestoGateway: string } | null, travels: Array<{ __typename?: 'NetworkStateTravel', id: any, account: any, previousGeohash: string, nextGeohash: string, transactionHash: any }> } }> } }> }; export type LocalTokenQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -2567,6 +2579,7 @@ export const AgentDocument = ` account previousGeohash nextGeohash + transactionHash } } } @@ -2631,6 +2644,7 @@ export const AgentsDocument = ` account previousGeohash nextGeohash + transactionHash } } } @@ -2667,6 +2681,7 @@ export const StateAgentDocument = ` account previousGeohash nextGeohash + transactionHash } } agent { @@ -2725,6 +2740,7 @@ export const StateAgentsDocument = ` account previousGeohash nextGeohash + transactionHash } } agent { @@ -2799,6 +2815,7 @@ export const NetworkStateDocument = ` account previousGeohash nextGeohash + transactionHash } } } @@ -2863,6 +2880,7 @@ export const NetworkStatesDocument = ` account previousGeohash nextGeohash + transactionHash } } } @@ -2935,6 +2953,7 @@ export const NetworkStateTravelDocument = ` account previousGeohash nextGeohash + transactionHash } } `; @@ -2993,6 +3012,7 @@ export const NetworkStateTravelsDocument = ` account previousGeohash nextGeohash + transactionHash } } `; @@ -3037,6 +3057,7 @@ export const LocalRecordDocument = ` account previousGeohash nextGeohash + transactionHash } } } @@ -3095,6 +3116,7 @@ export const LocalRecordsDocument = ` account previousGeohash nextGeohash + transactionHash } } } diff --git a/packages/kit/src/LocalAccountButton.tsx b/packages/kit/src/LocalAccountButton.tsx index 93d71e7..91e0671 100644 --- a/packages/kit/src/LocalAccountButton.tsx +++ b/packages/kit/src/LocalAccountButton.tsx @@ -15,21 +15,7 @@ import { } from "react"; import { Address, useAccount, useNetwork } from "wagmi"; import { useMapCreateRecord } from "wagmi-config"; - -type LocalAccount = LocalRecord | LocalRecordsQuery["localRecords"][0]; - -type LocalAccountStore = { - localAccount: LocalAccount | null; - localAccounts: LocalAccount[]; - setLocalAccount: (account: LocalAccount) => void; - createLocalAccount: (geohash: string) => void; - createAccountLoading: boolean; - switchLocalAccount: (geohash: string) => void; - isHere: (geohash: string) => boolean; - hasBeenHere: (geohash: string) => boolean; - open: boolean; - setOpen: (open: boolean) => void; -}; +import { LocalAccount, LocalAccountStore } from "../types"; export const LocalAccountContext = createContext({ localAccount: null, @@ -212,6 +198,7 @@ export const LocalAccountDialog = () => { return (
{ setLocalAccount(account); setTimeout(() => { diff --git a/packages/kit/types.ts b/packages/kit/types.ts new file mode 100644 index 0000000..14e27c3 --- /dev/null +++ b/packages/kit/types.ts @@ -0,0 +1,16 @@ +import { LocalRecord, LocalRecordsQuery } from "./rtk/generated"; + +export type LocalAccount = LocalRecord | LocalRecordsQuery["localRecords"][0]; + +export type LocalAccountStore = { + localAccount: LocalAccount | null; + localAccounts: LocalAccount[]; + setLocalAccount: (account: LocalAccount) => void; + createLocalAccount: (geohash: string) => void; + createAccountLoading: boolean; + switchLocalAccount: (geohash: string) => void; + isHere: (geohash: string) => boolean; + hasBeenHere: (geohash: string) => boolean; + open: boolean; + setOpen: (open: boolean) => void; +}; diff --git a/packages/shared-config/nfts.ts b/packages/shared-config/nfts.ts index 52b4359..4068998 100644 --- a/packages/shared-config/nfts.ts +++ b/packages/shared-config/nfts.ts @@ -1,5 +1,5 @@ import { Alchemy, Network } from "alchemy-sdk"; -import { alchemy_key } from "./variables"; +import { nft_alchemy_key } from "./variables"; const chainIdToNetwork: Record = { 1: Network.ETH_MAINNET, @@ -9,12 +9,12 @@ const chainIdToNetwork: Record = { 137: Network.MATIC_MAINNET, 80001: Network.MATIC_MUMBAI, 8453: Network.BASE_MAINNET, - 84531: Network.BASE_GOERLI + 84531: Network.BASE_GOERLI, }; export const getAlchemyNFT = (chainId: number) => { return new Alchemy({ - apiKey: alchemy_key, + apiKey: nft_alchemy_key, network: chainIdToNetwork[chainId], }).nft; }; diff --git a/packages/shared-config/variables.ts b/packages/shared-config/variables.ts index db5ff33..58e99e1 100644 --- a/packages/shared-config/variables.ts +++ b/packages/shared-config/variables.ts @@ -1,4 +1,6 @@ export const alchemy_key = process.env.NEXT_PUBLIC_ALCHEMY_KEY as string; +export const nft_alchemy_key = process.env + .NEXT_PUBLIC_NFT_ALCHEMY_KEY as string; if (!alchemy_key) { throw new Error("Missing: alchemy_key");