From e2cc61671b6887609db5717f7080baf1cd859232 Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Thu, 30 Sep 2021 14:03:55 +0200 Subject: [PATCH] Show pinned orgs on the front page Signed-off-by: Alexis Sellier --- src/Header.svelte | 22 ++++++++++++++++- src/base/home/Index.svelte | 2 +- src/base/orgs/Index.svelte | 14 +++++++---- src/base/orgs/List.svelte | 50 ++++++++++++++++++++++++++++---------- src/base/orgs/Org.ts | 7 ++++++ src/config.json | 12 +++++++-- src/config.ts | 2 +- src/utils.ts | 3 +++ 8 files changed, 89 insertions(+), 23 deletions(-) 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);