diff --git a/src/Header.svelte b/src/Header.svelte
index 82ade281a..52217f5dd 100644
--- a/src/Header.svelte
+++ b/src/Header.svelte
@@ -34,6 +34,22 @@
display: flex;
align-items: center;
}
+ header .nav {
+ display: inline-block;
+ height: 100%;
+ margin-left: 1.5rem;
+ white-space: nowrap;
+ }
+ header .nav a {
+ display: inline-block;
+ padding: 0.5rem 0.5rem;
+ margin-right: 1.5rem;
+ font-weight: 500;
+ color: var(--color-foreground-6);
+ }
+ header .nav a:hover {
+ color: var(--color-foreground);
+ }
.logo {
display: flex;
}
@@ -54,7 +70,7 @@
.search {
height: 42px;
width: 16rem;
- margin-left: 1rem;
+ margin-left: 1.5rem;
display: inline-block;
}
.address {
@@ -122,6 +138,10 @@
diff --git a/src/base/home/Index.svelte b/src/base/home/Index.svelte
index c65fe4a94..2b2fbc09a 100644
--- a/src/base/home/Index.svelte
+++ b/src/base/home/Index.svelte
@@ -17,6 +17,6 @@
-
+
diff --git a/src/base/orgs/Index.svelte b/src/base/orgs/Index.svelte
index 18eced083..6b6dc3918 100644
--- a/src/base/orgs/Index.svelte
+++ b/src/base/orgs/Index.svelte
@@ -9,7 +9,11 @@
import List from './List.svelte';
export let config: Config;
+ export let pinned = false;
+ const getOrgs = pinned && (config.orgs.pinned.length > 0)
+ ? Org.getMulti(config.orgs.pinned, config)
+ : Org.getAll(config);
const onCreate = () => modal = Create;
let modal: typeof SvelteComponent | null = null;
@@ -32,14 +36,14 @@
}
.padding {
- padding: 0 3rem 3rem 3rem;
+ padding: 0 2rem 2rem 2rem;
}
.my-orgs {
- margin-bottom: 3rem;
+ margin-bottom: 2rem;
}
.orgs-empty {
- margin-left: 3rem;
+ margin-left: 2rem;
padding: 1rem 0 2rem 0;
font-style: italic;
color: var(--color-foreground-faded);
@@ -50,7 +54,7 @@
}
.loading {
- padding: 3rem 0;
+ padding: 2rem 0;
}
@@ -90,7 +94,7 @@
Orgs of the Radicle network
- {#await Org.getAll(config)}
+ {#await getOrgs}
diff --git a/src/base/orgs/List.svelte b/src/base/orgs/List.svelte
index e70b0a256..466db060d 100644
--- a/src/base/orgs/List.svelte
+++ b/src/base/orgs/List.svelte
@@ -1,4 +1,6 @@
-{#await Profile.getMulti(orgsAddresses, config)}
+{#await getProfiles}
{:then profiles}
{#each profiles as profile}
-
-
+
+
@@ -72,8 +89,15 @@
{formatAddress(profile.address)}
{/if}
-
-
+
+ {#if orgMembers[profile.address]?.length}
+ {orgMembers[profile.address].length} members
+ {:else}
+ {formatAddress(profile.address)}
+ {/if}
+
+
+
{:else}
{/each}
diff --git a/src/base/orgs/Org.ts b/src/base/orgs/Org.ts
index 50d206680..35a31cbb2 100644
--- a/src/base/orgs/Org.ts
+++ b/src/base/orgs/Org.ts
@@ -172,6 +172,13 @@ export class Org {
}
}
+ static async getMulti(ids: string[], config: Config): Promise
> {
+ const results = await Promise.all(ids.map(addr => Org.get(addr, config)));
+ const orgs = results.filter((org): org is Org => org != null);
+
+ return orgs;
+ }
+
static async getAll(config: Config): Promise> {
const result = await utils.querySubgraph(config.orgs.subgraph, GetOrgs, {});
const orgs: Org[] = [];
diff --git a/src/config.json b/src/config.json
index 74af9c89b..dc762d97d 100644
--- a/src/config.json
+++ b/src/config.json
@@ -12,7 +12,14 @@
},
"orgs": {
"subgraph": "https://gateway.thegraph.com/api/1758a78ae257ad4906f9c638e4a68c19/subgraphs/id/0x2f0963e77ca6ac0c2dad1bf4147b6b40e0dd8728-0",
- "contractHash": "0x5c34bb0755876de98e801805e6685456eea739ad0abba1cc450a7ee0f2a70b74"
+ "contractHash": "0x5c34bb0755876de98e801805e6685456eea739ad0abba1cc450a7ee0f2a70b74",
+ "pinned": [
+ "alt-clients.radicle.eth",
+ "community.radicle.eth",
+ "upstream.radicle.eth",
+ "gnosisguild.radicle.eth",
+ "dxdao.radicle.eth"
+ ]
},
"safe": {
"api": "https://safe-transaction.gnosis.io",
@@ -37,7 +44,8 @@
},
"orgs": {
"subgraph": "https://api.thegraph.com/subgraphs/name/radicle-dev/radicle-orgs-rinkeby",
- "contractHash": "0x5c34bb0755876de98e801805e6685456eea739ad0abba1cc450a7ee0f2a70b74"
+ "contractHash": "0x5c34bb0755876de98e801805e6685456eea739ad0abba1cc450a7ee0f2a70b74",
+ "pinned": []
},
"safe": {
"api": "https://safe-transaction.rinkeby.gnosis.io",
diff --git a/src/config.ts b/src/config.ts
index af7c717de..5df27569b 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -31,7 +31,7 @@ export class Config {
radToken: { address: string };
orgFactory: { address: string };
reverseRegistrar: { address: string };
- orgs: { subgraph: string; contractHash: string };
+ orgs: { subgraph: string; contractHash: string; pinned: string[] };
gasLimits: { createOrg: number };
provider: ethers.providers.JsonRpcProvider;
signer: ethers.Signer & TypedDataSigner | WalletConnectSigner | null;
diff --git a/src/utils.ts b/src/utils.ts
index bca92343c..178101196 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -264,6 +264,9 @@ export async function resolveEnsProfile(addressOrName: string, profileType: Prof
if (name) {
const resolver = await config.provider.getResolver(name);
+ if (! resolver) {
+ return null;
+ }
if (profileType === ProfileType.Full) {
const registration = await getRegistration(name, config, resolver);