From dcfebd48910e0b0d852e129849f1624b66853f13 Mon Sep 17 00:00:00 2001 From: Dmitriy Date: Mon, 15 Jan 2024 18:35:36 +0200 Subject: [PATCH] fix: fetch data from idOS --- src/components/vm/VmInitializer.tsx | 4 ++- src/pages/settings.tsx | 48 ++++++++++++++++++----------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/components/vm/VmInitializer.tsx b/src/components/vm/VmInitializer.tsx index 0125edf23..aaa3b1c0c 100644 --- a/src/components/vm/VmInitializer.tsx +++ b/src/components/vm/VmInitializer.tsx @@ -61,6 +61,7 @@ export default function VmInitializer() { const setVmStore = useVmStore((store) => store.set); const { requestAuthentication, saveCurrentUrl } = useSignInRedirect(); const idOS = useIdOS(); + const idosSDK = useIdosStore((state) => state.idOS); useEffect(() => { initNear && @@ -188,6 +189,7 @@ export default function VmInitializer() { if (!near) { return; } + await idosSDK?.reset({ enclave: true }); useIdosStore.persist.clearStorage(); const wallet = await (await near.selector).wallet(); wallet.signOut(); @@ -196,7 +198,7 @@ export default function VmInitializer() { setSignedAccountId(null); resetAnalytics(); localStorage.removeItem('accountId'); - }, [near]); + }, [idosSDK, near]); const refreshAllowance = useCallback(async () => { alert("You're out of access key allowance. Need sign in again to refresh it"); diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx index 9f27c21cf..95b19606e 100644 --- a/src/pages/settings.tsx +++ b/src/pages/settings.tsx @@ -3,9 +3,10 @@ import hereImage from '@near-wallet-selector/here-wallet/assets/here-wallet-icon import meteorImage from '@near-wallet-selector/meteor-wallet/assets/meteor-icon.png'; import myNearImage from '@near-wallet-selector/my-near-wallet/assets/my-near-wallet-icon.png'; import nightlyImage from '@near-wallet-selector/nightly/assets/nightly.png'; -import { useCallback, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { openToast } from '@/components/lib/Toast'; +import type { ToastType } from '@/components/lib/Toast/store'; import { ComponentWrapperPage } from '@/components/near-org/ComponentWrapperPage'; import { useBosComponents } from '@/hooks/useBosComponents'; import { useDefaultLayout } from '@/hooks/useLayout'; @@ -22,7 +23,14 @@ const SettingsPage: NextPageWithLayout = () => { const idosCredentials = useIdosStore((state) => state.credentials); const connectedWallet = useIdosStore((state) => state.connectedWallet); const setIdosStore = useIdosStore((state) => state.set); - const [error, setError] = useState(null); + const [error, setError] = useState<{ type: ToastType; title: string; description?: string } | null>(null); + + const walletImages = [ + { name: 'meteor-wallet', ...meteorImage }, + { name: 'here-wallet', ...hereImage }, + { name: 'my-near-wallet', ...myNearImage }, + { name: 'nightly-wallet', ...nightlyImage }, + ]; const connectIdOS = useCallback(async () => { if (!near || !idOS || !accountId) return; @@ -34,28 +42,32 @@ const SettingsPage: NextPageWithLayout = () => { await idOS.setSigner('NEAR', wallet); const credentials = idosCredentials ?? (await idOS.data.list('credentials')); setIdosStore({ credentials }); + } else { + setError({ + type: 'INFO', + title: `No idOS profile found for ${accountId}`, + }); } } catch (error: any) { console.error('Failed to init wallet + idOS: ', error); const errorMessage = error.message ? error.message : 'unknown'; - setError(errorMessage); - } finally { - if (!idosCredentials && error) { - openToast({ - type: 'ERROR', - title: 'Failed to init wallet + idOS:', - description: `${error}`, - }); - } + setError({ + type: 'ERROR', + title: 'Falilure during idOS initialization:', + description: `${errorMessage}`, + }); } - }, [near, idOS, accountId, setIdosStore, idosCredentials, error]); + }, [near, idOS, accountId, setIdosStore, idosCredentials]); - const walletImages = [ - { name: 'meteor-wallet', ...meteorImage }, - { name: 'here-wallet', ...hereImage }, - { name: 'my-near-wallet', ...myNearImage }, - { name: 'nightly-wallet', ...nightlyImage }, - ]; + useEffect(() => { + if (!idosCredentials && error) { + openToast({ + type: error.type, + title: error.title, + description: error.description, + }); + } + }, [error, idosCredentials]); return (