From a363685bf679a8f7bef166da67556cc68f320a50 Mon Sep 17 00:00:00 2001 From: Branislav Hozza Date: Fri, 14 Feb 2025 11:56:23 +0100 Subject: [PATCH] fix: remember account --- components/modals/connect-modal.vue | 9 +++++++-- middleware/user.global.ts | 24 ++++++++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/components/modals/connect-modal.vue b/components/modals/connect-modal.vue index 8157bd3..01eb19c 100644 --- a/components/modals/connect-modal.vue +++ b/components/modals/connect-modal.vue @@ -124,7 +124,10 @@ onMounted(async () => { availableWallets.value = wallets.filter((wallet) => !wallet.installed); }); +const selectedWallet = ref(null); + const selectWallet = async (wallet: BaseDotsamaWallet) => { + selectedWallet.value = wallet; const accounts = await wallet.getAccounts(); accountStore.setAccounts(accounts ?? []); state.value = "account"; @@ -133,9 +136,11 @@ const selectWallet = async (wallet: BaseDotsamaWallet) => { const selectedAccount = ref(null); const saveAndClose = () => { - if (selectedAccount.value) { + if (selectedAccount.value && selectedWallet.value) { accountStore.selectAccount(selectedAccount.value); - localStorage.setItem("account", JSON.stringify(selectedAccount.value)); + localStorage.setItem("account-address", selectedAccount.value.address); + localStorage.setItem("account-wallet", selectedWallet.value.name); + emit("confirm"); } }; diff --git a/middleware/user.global.ts b/middleware/user.global.ts index 7a61c60..fa9583c 100644 --- a/middleware/user.global.ts +++ b/middleware/user.global.ts @@ -1,14 +1,30 @@ +import { getSupportedWallets } from "~/utils/wallet"; + const logger = createLogger("middleware:user.global"); -export default defineNuxtRouteMiddleware(() => { +export default defineNuxtRouteMiddleware(async () => { if (import.meta.server) return; const accountStore = useAccountStore(); if (accountStore.hasSelectedAccount) { return; } - const account = localStorage.getItem("account"); - if (account) { + const accountAddress = localStorage.getItem("account-address"); + const accountWallet = localStorage.getItem("account-wallet"); + if (accountAddress && accountWallet) { + const wallets = getSupportedWallets(); + const installedWallets = wallets.filter((wallet) => wallet.installed); + const wallet = installedWallets.find((wallet) => wallet.name === accountWallet); + if (!wallet) { + return; + } try { - accountStore.selectAccount(JSON.parse(account)); + const accounts = await wallet.getAccounts(); + if (!accounts) { + return; + } + const account = accounts.find((acc) => acc.address === accountAddress); + if (account) { + accountStore.selectAccount(account); + } } catch (e) { logger.error(e); }