diff --git a/public/locales/en/staking.json b/public/locales/en/staking.json
index ef0d859b..a4cb1a5c 100644
--- a/public/locales/en/staking.json
+++ b/public/locales/en/staking.json
@@ -112,7 +112,8 @@
"status": {
"activating": "Activating",
"active": "Active",
- "deactivating": "Deactivating"
+ "deactivating": "Deactivating",
+ "inactive": "Inactive"
}
},
"stakeAccounts": "Accounts",
diff --git a/public/locales/zh-CN/staking.json b/public/locales/zh-CN/staking.json
index 86193b65..2b245e94 100644
--- a/public/locales/zh-CN/staking.json
+++ b/public/locales/zh-CN/staking.json
@@ -111,7 +111,8 @@
"status": {
"activating": "Active",
"active": "Active",
- "deactivating": "Deactivating"
+ "deactivating": "Deactivating",
+ "inactive": "Inactive"
}
},
"stakeAccounts": "Accounts",
diff --git a/public/locales/zh-HK/staking.json b/public/locales/zh-HK/staking.json
index 4ac4375d..e8052cba 100644
--- a/public/locales/zh-HK/staking.json
+++ b/public/locales/zh-HK/staking.json
@@ -111,7 +111,8 @@
"status": {
"activating": "Active",
"active": "Active",
- "deactivating": "Deactivating"
+ "deactivating": "Deactivating",
+ "inactive": "Inactive"
}
},
"stakeAccounts": "Accounts",
diff --git a/src/screens/staking/components/networks/components/network_grid/components/network_card/stake_accounts.tsx b/src/screens/staking/components/networks/components/network_grid/components/network_card/stake_accounts.tsx
index dc3b2466..a1658276 100644
--- a/src/screens/staking/components/networks/components/network_grid/components/network_card/stake_accounts.tsx
+++ b/src/screens/staking/components/networks/components/network_grid/components/network_card/stake_accounts.tsx
@@ -140,6 +140,7 @@ const StakeAccounts = ({ network, onClose }: Props) => {
activating: t("stakeAccount.status.activating"),
active: t("stakeAccount.status.active"),
deactivating: t("stakeAccount.status.deactivating"),
+ inactive: t("stakeAccount.status.inactive"),
}[account.status] || account.status;
const statusStyle =
@@ -147,6 +148,7 @@ const StakeAccounts = ({ network, onClose }: Props) => {
activating: styles.statusActivating,
active: styles.statusActive,
deactivating: styles.statusDeactivating,
+ inactive: null,
}[account.status] || null;
const reward = rewardsByAddress?.[account.address];
diff --git a/src/screens/staking/components/staking_section/connect_wallet_modal.module.scss b/src/screens/staking/components/staking_section/connect_wallet_modal.module.scss
index f2c935f5..9255877a 100644
--- a/src/screens/staking/components/staking_section/connect_wallet_modal.module.scss
+++ b/src/screens/staking/components/staking_section/connect_wallet_modal.module.scss
@@ -33,8 +33,9 @@
.wallets {
display: flex;
- flex-direction: row;
+ flex-flow: row wrap;
gap: 24px;
+ justify-content: center;
margin-bottom: 48px;
margin-top: 48px;
}
diff --git a/src/screens/staking/components/staking_section/unstaking_modal.tsx b/src/screens/staking/components/staking_section/unstaking_modal.tsx
index fea666d7..8c7d806a 100644
--- a/src/screens/staking/components/staking_section/unstaking_modal.tsx
+++ b/src/screens/staking/components/staking_section/unstaking_modal.tsx
@@ -25,6 +25,7 @@ import {
} from "@src/screens/staking/lib/staking_sdk/context/selectors";
import type { StakingNetworkInfo } from "@src/screens/staking/lib/staking_sdk/core";
import { mainNetworkDenom } from "@src/screens/staking/lib/staking_sdk/core/base";
+import { solanaNetworks } from "@src/screens/staking/lib/staking_sdk/core/solana";
import { formatCoin } from "@src/screens/staking/lib/staking_sdk/formatters";
import { getAccountNormalisedDelegation } from "@src/screens/staking/lib/staking_sdk/utils/accounts";
import {
@@ -124,12 +125,14 @@ const UnstakingModal = () => {
}
})() as string;
- const stakeAccounts = selectedAccount
- ? getStakeAccountsForNetwork(
- stakingRef.current.state,
- selectedAccount.networkId,
- )
- : [];
+ const stakeAccounts = (
+ selectedAccount
+ ? getStakeAccountsForNetwork(
+ stakingRef.current.state,
+ selectedAccount.networkId,
+ )
+ : []
+ ).filter((acc) => ["activating", "active"].includes(acc.status));
const onSubmit = (e: any) => {
e?.preventDefault();
@@ -207,7 +210,9 @@ const UnstakingModal = () => {
});
};
- const hasStakingAccounts = stakeAccounts.length > 0;
+ const usesStakeAccounts = account?.networkId
+ ? solanaNetworks.has(account.networkId)
+ : false;
const delegationProp = account?.info?.delegation;
@@ -230,7 +235,7 @@ const UnstakingModal = () => {
)}
- {hasStakingAccounts ? (
+ {usesStakeAccounts ? (
<>
{
- // eslint-disable-next-line no-console
- console.log("disconnected");
- });
-}
-
-testnetWallet.on("disconnect", () => {
- // eslint-disable-next-line no-console
- console.log("disconnected");
-});
+const devnetWallet = new Solflare({ network: "devnet" });
let connectListenerMainnet: (() => void) | undefined;
let connectListenerTestnet: (() => void) | undefined;
+let connectListenerDevnet: (() => void) | undefined;
export const tryToConnectSolflare = async (
context: TStakingContext,
@@ -48,6 +38,9 @@ export const tryToConnectSolflare = async (
const hasTestnetWallet =
ENABLE_TESTNETS && solanaNetworks.has(StakingNetworkId.SolanaTestnet);
+ const hasDevnetWallet =
+ ENABLE_TESTNETS && solanaNetworks.has(StakingNetworkId.SolanaDevnet);
+
const getListener =
(wallet: typeof mainnetWallet, networkId: StakingNetworkId) =>
async () => {
@@ -91,9 +84,11 @@ export const tryToConnectSolflare = async (
resolvedItems += 1;
- const totalItems = [hasMainnetWallet, hasTestnetWallet].filter(
- Boolean,
- ).length;
+ const totalItems = [
+ hasMainnetWallet,
+ hasTestnetWallet,
+ hasDevnetWallet,
+ ].filter(Boolean).length;
if (resolvedItems === totalItems) {
resolve(true);
@@ -117,9 +112,8 @@ export const tryToConnectSolflare = async (
}
if (hasTestnetWallet) {
- if (connectListenerTestnet) {
+ if (connectListenerTestnet)
testnetWallet.off("connect", connectListenerTestnet);
- }
connectListenerTestnet = getListener(
testnetWallet,
@@ -129,9 +123,22 @@ export const tryToConnectSolflare = async (
testnetWallet.on("connect", connectListenerTestnet);
}
+ if (hasDevnetWallet) {
+ if (connectListenerDevnet)
+ devnetWallet.off("connect", connectListenerDevnet);
+
+ connectListenerDevnet = getListener(
+ devnetWallet,
+ StakingNetworkId.SolanaDevnet,
+ );
+
+ devnetWallet.on("connect", connectListenerDevnet);
+ }
+
await Promise.all([
hasMainnetWallet ? mainnetWallet.connect() : Promise.resolve(),
hasTestnetWallet ? testnetWallet.connect() : Promise.resolve(),
+ hasDevnetWallet ? devnetWallet.connect() : Promise.resolve(),
]);
});
@@ -213,9 +220,15 @@ const getWalletApi = (account: Account): WalletApi => {
};
}
- return account.networkId === StakingNetworkId.SolanaTestnet
- ? testnetWallet
- : mainnetWallet;
+ const wallet = {
+ [StakingNetworkId.Solana]: mainnetWallet,
+ [StakingNetworkId.SolanaDevnet]: devnetWallet,
+ [StakingNetworkId.SolanaTestnet]: testnetWallet,
+ }[account.networkId as string];
+
+ if (!wallet) throw new Error("Unexpected wallet");
+
+ return wallet;
};
// https://solanacookbook.com/references/staking.html