From 439806b85ef415be552efc8f44d42b880dddd0ee Mon Sep 17 00:00:00 2001 From: Ignacio Date: Tue, 26 Mar 2024 17:49:01 +0800 Subject: [PATCH] feat: add refactors and stake accounts display --- public/icons/external.svg | 13 ++++++ .../components/network_card/index.tsx | 4 +- .../network_card/staking_data_box.module.scss | 13 ++++++ .../network_card/staking_data_box.tsx | 40 +++++++++++++++---- .../staking/lib/staking_sdk/core/base.ts | 3 ++ .../staking/lib/staking_sdk/core/index.ts | 1 + .../staking/lib/staking_sdk/core/solana.ts | 3 +- .../staking/lib/staking_sdk/utils/accounts.ts | 13 +++++- .../staking/lib/staking_sdk/utils/coins.ts | 1 + .../staking_sdk/wallet_operations/solana.ts | 7 +++- src/utils/network_info.ts | 13 ++++-- 11 files changed, 97 insertions(+), 14 deletions(-) create mode 100644 public/icons/external.svg diff --git a/public/icons/external.svg b/public/icons/external.svg new file mode 100644 index 00000000..e9c35eea --- /dev/null +++ b/public/icons/external.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/screens/staking/components/networks/components/network_grid/components/network_card/index.tsx b/src/screens/staking/components/networks/components/network_grid/components/network_card/index.tsx index c5f77b4a..27d2b57c 100644 --- a/src/screens/staking/components/networks/components/network_grid/components/network_card/index.tsx +++ b/src/screens/staking/components/networks/components/network_grid/components/network_card/index.tsx @@ -71,8 +71,10 @@ const NetworkCard = ({ ); + const forceDisplay = network.key === process.env.NEXT_PUBLIC_STAKING_POPOVER; + const popover = - isEmptyPopover || network.name !== showPopover ? null : ( + !forceDisplay && (isEmptyPopover || network.name !== showPopover) ? null : ( { Accounts {stakeAccounts?.length}
- {stakeAccounts?.map((account, accountIdx) => ( -
-
{account.address}
-
{formatCoin(account)}
-
{account.status}
-
- ))} + {stakeAccounts?.map((account) => { + const shortenedAddress = `${account.address.slice(0, 8)}...`; + + const explorerLink = getExplorerLink( + account.address, + stakingNetworkId, + ); + + return ( +
+
+
+ {shortenedAddress} + {!!explorerLink && ( + <> + {" "} + + + + + )} +
+
{account.status}
+
+
{formatCoin(account)}
+
+ ); + })}
); diff --git a/src/screens/staking/lib/staking_sdk/core/base.ts b/src/screens/staking/lib/staking_sdk/core/base.ts index f63897bf..9a83471e 100644 --- a/src/screens/staking/lib/staking_sdk/core/base.ts +++ b/src/screens/staking/lib/staking_sdk/core/base.ts @@ -42,6 +42,7 @@ export enum StakingNetworkId { Osmosis = "osmosis-1", Regen = "regen-1", Solana = "solana", + SolanaDevnet = "solana-devnet", SolanaTestnet = "solana-testnet", Stargaze = "stargaze-1", StargazeTestnet = "elgafar-1", @@ -60,6 +61,7 @@ export const mainNetworkDenom: Record = { [StakingNetworkId.Osmosis]: CoinDenom.OSMO, [StakingNetworkId.Regen]: CoinDenom.REGEN, [StakingNetworkId.Solana]: CoinDenom.SOL, + [StakingNetworkId.SolanaDevnet]: CoinDenom.SOL, [StakingNetworkId.SolanaTestnet]: CoinDenom.SOL, [StakingNetworkId.Stargaze]: CoinDenom.STARS, [StakingNetworkId.StargazeTestnet]: CoinDenom.STARS, @@ -70,5 +72,6 @@ export const testnetNetworks = new Set([ StakingNetworkId.CosmosHubTestnet, StakingNetworkId.KavaTestnet, StakingNetworkId.SolanaTestnet, + StakingNetworkId.SolanaDevnet, StakingNetworkId.StargazeTestnet, ]); diff --git a/src/screens/staking/lib/staking_sdk/core/index.ts b/src/screens/staking/lib/staking_sdk/core/index.ts index 980cb93f..465699d1 100644 --- a/src/screens/staking/lib/staking_sdk/core/index.ts +++ b/src/screens/staking/lib/staking_sdk/core/index.ts @@ -32,6 +32,7 @@ export const networkIdToNetworkKey: Record = { [StakingNetworkId.Osmosis]: "osmosis", [StakingNetworkId.Regen]: "regen", [StakingNetworkId.Solana]: "solana", + [StakingNetworkId.SolanaDevnet]: "solana-devnet", [StakingNetworkId.SolanaTestnet]: "solana-testnet", [StakingNetworkId.Stargaze]: "stargaze", [StakingNetworkId.StargazeTestnet]: "stargaze-testnet", diff --git a/src/screens/staking/lib/staking_sdk/core/solana.ts b/src/screens/staking/lib/staking_sdk/core/solana.ts index ffbf1738..d5e655da 100644 --- a/src/screens/staking/lib/staking_sdk/core/solana.ts +++ b/src/screens/staking/lib/staking_sdk/core/solana.ts @@ -8,7 +8,8 @@ import { export const solanaNetworks = new Set( [ // StakingNetworkId.Solana, - StakingNetworkId.SolanaTestnet, + // StakingNetworkId.SolanaTestnet, + StakingNetworkId.SolanaDevnet, ].filter( ENABLE_TESTNETS ? () => true : (network) => !testnetNetworks.has(network), ), diff --git a/src/screens/staking/lib/staking_sdk/utils/accounts.ts b/src/screens/staking/lib/staking_sdk/utils/accounts.ts index e26c299e..735b206a 100644 --- a/src/screens/staking/lib/staking_sdk/utils/accounts.ts +++ b/src/screens/staking/lib/staking_sdk/utils/accounts.ts @@ -5,7 +5,7 @@ import { getNetworkInfo } from "@src/utils/network_info"; import type { Account } from "../core"; import { networkIdToNetworkKey } from "../core"; -import { testnetNetworks } from "../core/base"; +import { StakingNetworkId, testnetNetworks } from "../core/base"; import { normaliseCoin, sumAllCoins, sumCoins } from "./coins"; import { sortNetworksByName } from "./networks"; @@ -102,3 +102,14 @@ export const sortAccountsByNetworkName = (a: Account, b: Account) => { return sortNetworksByName(networkA, networkB); }; + +export const getExplorerLink = (address: string, network?: string) => { + switch (network) { + case StakingNetworkId.Solana: + case StakingNetworkId.SolanaTestnet: + case StakingNetworkId.SolanaDevnet: + return `https://explorer.solana.com/address/${address}?cluster=devnet`; + default: + return null; + } +}; diff --git a/src/screens/staking/lib/staking_sdk/utils/coins.ts b/src/screens/staking/lib/staking_sdk/utils/coins.ts index c2e7be35..ba7bb6f4 100644 --- a/src/screens/staking/lib/staking_sdk/utils/coins.ts +++ b/src/screens/staking/lib/staking_sdk/utils/coins.ts @@ -16,6 +16,7 @@ export const networkToUnnormalisedDenom = { [StakingNetworkId.Osmosis]: "UOSMO", [StakingNetworkId.Regen]: "UREGEN", [StakingNetworkId.Solana]: "LAMPORTS", + [StakingNetworkId.SolanaDevnet]: "LAMPORTS", [StakingNetworkId.SolanaTestnet]: "LAMPORTS", [StakingNetworkId.Stargaze]: "USTARS", [StakingNetworkId.StargazeTestnet]: "USTARS", diff --git a/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts b/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts index b6d3a56a..28532fa2 100644 --- a/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts +++ b/src/screens/staking/lib/staking_sdk/wallet_operations/solana.ts @@ -149,7 +149,12 @@ export const tryToConnectPhantom = async ( const publicKey = resp.publicKey.toString(); return [StakingNetworkId.Solana] - .concat(ENABLE_TESTNETS ? [StakingNetworkId.SolanaTestnet] : []) + .concat( + ENABLE_TESTNETS + ? [StakingNetworkId.SolanaTestnet, StakingNetworkId.SolanaDevnet] + : [], + ) + .filter((networkId) => solanaNetworks.has(networkId)) .reduce(async (promise, networkId) => { await promise; diff --git a/src/utils/network_info.ts b/src/utils/network_info.ts index 24dad493..69cae471 100644 --- a/src/utils/network_info.ts +++ b/src/utils/network_info.ts @@ -645,7 +645,6 @@ const networks = { name: "Sentinel", }, "solana": { - address: "76nwV8zz8tLz97SBRXH6uwHvgHXtqJDLQfF66jZhQ857", denom: "SOL", graphql: "solana", guide: "how-to-stake-sol-on-solana", @@ -654,8 +653,16 @@ const networks = { label: "Solana - SOL", name: "Solana", }, + "solana-devnet": { + denom: "SOL", + graphql: "solana", + guide: "how-to-stake-sol-on-solana", + image: "/images/network/solana.svg", + key: "solana-devnet", + label: "SolanaDevnet - SOL", + name: "Solana Devnet", + }, "solana-testnet": { - address: "76nwV8zz8tLz97SBRXH6uwHvgHXtqJDLQfF66jZhQ857", denom: "SOL", graphql: "solana", guide: "how-to-stake-sol-on-solana", @@ -804,7 +811,7 @@ const cosmosTestNetworkKeys = ENABLE_TESTNETS : []; const solanaTestNetworkKeys = ENABLE_TESTNETS - ? (["solana-testnet"] satisfies NetworkKey[]) + ? (["solana-testnet", "solana-devnet"] satisfies NetworkKey[]) : []; export const cosmosNetworkKeys = [