From 5d13f9dcc7f1e2a951927d0b34972c960ca53a06 Mon Sep 17 00:00:00 2001 From: janmichek Date: Wed, 25 Oct 2023 13:09:45 +0200 Subject: [PATCH 01/34] add basic wallet connection --- .env.example | 1 + nuxt.config.ts | 2 + src/components/TheHeader.vue | 26 +++++++++ src/components/TheNavigation.vue | 27 +++++++++ src/components/WalletConnectButton.vue | 20 +++++++ src/pages/wallet/index.vue | 23 ++++++++ src/stores/aesdk.js | 2 +- src/stores/wallet.js | 78 ++++++++++++++++++++++++++ 8 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 src/components/WalletConnectButton.vue create mode 100644 src/pages/wallet/index.vue create mode 100644 src/stores/wallet.js diff --git a/.env.example b/.env.example index 6a227c9be..0b3870195 100644 --- a/.env.example +++ b/.env.example @@ -9,6 +9,7 @@ NUXT_PUBLIC_NETWORK_NAME=MAINNET NUXT_PUBLIC_NETWORK_ID=ae_mainnet NUXT_PUBLIC_ALTERNATIVE_NETWORK_URL=http://localhost:8081 NUXT_PUBLIC_ALTERNATIVE_NETWORK_NAME=TESTNET +NUXT_PUBLIC_NETWORK_ID="ae_mainnet" NUXT_PUBLIC_AE_TOKEN_ID=ct_J3zBY8xxjsRr3QojETNw48Eb38fjvEuJKkQ6KzECvubvEcvCa NUXT_PUBLIC_DEBUG_MODE=false NUXT_PUBLIC_SH_DEX_CONTRACTS='ct_2mfj3FoZxnhkSw5RZMcP8BfPoB1QR4QiYGNCdkAvLZ1zfF6paW;ct_azbNZ1XrPjXfqBqbAh1ffLNTQ1sbnuUDFvJrXjYz7JQA1saQ3' diff --git a/nuxt.config.ts b/nuxt.config.ts index 6406ad853..bd62b2958 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -33,6 +33,7 @@ export default defineNuxtConfig({ WEBSOCKET_URL: process.env.WEBSOCKET_URL, DEX_BACKEND_URL: process.env.DEX_BACKEND_URL, NETWORK_NAME: process.env.NETWORK_NAME, + NETWORK_ID: process.env.NETWORK_ID, ALTERNATIVE_NETWORK_URL: process.env.ALTERNATIVE_NETWORK_URL, ALTERNATIVE_NETWORK_NAME: process.env.ALTERNATIVE_NETWORK_NAME, AE_TOKEN_ID: process.env.AE_TOKEN_ID, @@ -41,6 +42,7 @@ export default defineNuxtConfig({ SH_DEX_CONTRACTS: process.env.SH_DEX_CONTRACTS?.split(';'), }, }, + postcss: { plugins: { autoprefixer: {}, diff --git a/src/components/TheHeader.vue b/src/components/TheHeader.vue index fb6594215..241b0f58b 100644 --- a/src/components/TheHeader.vue +++ b/src/components/TheHeader.vue @@ -36,6 +36,18 @@ :class="[ 'header__network-select', { 'header__network-select--open': isNavigationOpen }]"/> +
+ + + +
+ + wallet +
diff --git a/src/pages/wallet/index.vue b/src/pages/wallet/index.vue new file mode 100644 index 000000000..9a54d051c --- /dev/null +++ b/src/pages/wallet/index.vue @@ -0,0 +1,23 @@ + + + diff --git a/src/stores/aesdk.js b/src/stores/aesdk.js index e8bf50cde..cea50c380 100644 --- a/src/stores/aesdk.js +++ b/src/stores/aesdk.js @@ -1,6 +1,6 @@ import { defineStore } from 'pinia' import { useRuntimeConfig } from 'nuxt/app' -import { Node, AeSdk } from '@aeternity/aepp-sdk' +import { AeSdk, Node } from '@aeternity/aepp-sdk' export const useAesdk = defineStore('aesdk', () => { const { NODE_URL } = useRuntimeConfig().public diff --git a/src/stores/wallet.js b/src/stores/wallet.js new file mode 100644 index 000000000..2a71ed455 --- /dev/null +++ b/src/stores/wallet.js @@ -0,0 +1,78 @@ +import { defineStore } from 'pinia' +import { useRuntimeConfig } from 'nuxt/app' +import { AE_AMOUNT_FORMATS, AeSdkAepp, BrowserWindowMessageConnection, Node, walletDetector } from '@aeternity/aepp-sdk' + +export const useWalletStore = defineStore('wallet', () => { + const { NODE_URL } = useRuntimeConfig().public + + const walletInfo = ref(null) + const aeSdk = ref(null) + const balance = ref(null) + + async function initWallet() { + // todo reuse instance + const node = new Node(NODE_URL) + try { + const aeSdkOptions = { + nodes: [ + { name: 'mainnet', instance: node }, + ], + compilerUrl: 'https://compiler.aepps.com', + } + + // connect to Superhero Wallet + // AeSdkAepp instance can't be in deep reactive https://stackoverflow.com/a/69010240 + aeSdk.value = shallowReactive(new AeSdkAepp({ + name: 'AEPP', + ...aeSdkOptions, + async onNetworkChange({ NETWORK_ID }) { + await connectToNode(NETWORK_ID) + }, + async onAddressChange(addresses) { + console.info('onAddressChange ::', addresses) + await fetchAccountInfo() + }, + })) + await scanForWallets() + } catch (error) { + console.log('failed') + throw error + } + } + + async function scanForWallets() { + const foundWallet = await new Promise(resolve => { + const handleWallets = ({ newWallet }) => { + stopScan() + resolve(newWallet) + } + const scannerConnection = new BrowserWindowMessageConnection() + const stopScan = walletDetector(scannerConnection, handleWallets) + }) + + walletInfo.value = await aeSdk.value.connectToWallet(foundWallet.getConnection()) + await aeSdk.value.subscribeAddress('subscribe', 'current') + await fetchAccountInfo() + } + + // todo infra envs + async function fetchAccountInfo() { + balance.value = await aeSdk.value.getBalance(aeSdk.value.address, { + format: AE_AMOUNT_FORMATS.AE, + }) + } + + async function connectToNode(selectedNetworkId) { + aeSdk.value.selectNode(selectedNetworkId) + if (aeSdk.value.addresses().length) { + await fetchAccountInfo() + } + } + + return { + initWallet, + walletInfo, + balance, + aeSdk, + } +}) From bd91ef99b4b30d2c40458fabb21fd0fdb8787421 Mon Sep 17 00:00:00 2001 From: janmichek Date: Wed, 25 Oct 2023 14:01:56 +0200 Subject: [PATCH 02/34] fix header styles --- src/components/TheHeader.vue | 10 +++----- src/components/TheNavigation.vue | 2 +- src/components/TheWalletAccount.vue | 37 +++++++++++++++++++++++++++++ src/pages/wallet/index.vue | 21 +++++++++------- 4 files changed, 53 insertions(+), 17 deletions(-) create mode 100644 src/components/TheWalletAccount.vue diff --git a/src/components/TheHeader.vue b/src/components/TheHeader.vue index 241b0f58b..9382bf91e 100644 --- a/src/components/TheHeader.vue +++ b/src/components/TheHeader.vue @@ -36,13 +36,9 @@ :class="[ 'header__network-select', { 'header__network-select--open': isNavigationOpen }]"/> -
- - - -
+ diff --git a/src/components/TheNavigation.vue b/src/components/TheNavigation.vue index 6858d7325..fe209de93 100644 --- a/src/components/TheNavigation.vue +++ b/src/components/TheNavigation.vue @@ -161,7 +161,7 @@ function updateIsDesktopResolution() { color: var(--color-midnight); display: block; padding: var(--space-3) 0; - font-size: 12px; + font-size: 13px; line-height: 24px; letter-spacing: 0.002em; diff --git a/src/components/TheWalletAccount.vue b/src/components/TheWalletAccount.vue new file mode 100644 index 000000000..c15e1e727 --- /dev/null +++ b/src/components/TheWalletAccount.vue @@ -0,0 +1,37 @@ + + + + diff --git a/src/pages/wallet/index.vue b/src/pages/wallet/index.vue index 9a54d051c..ccb4ce2ee 100644 --- a/src/pages/wallet/index.vue +++ b/src/pages/wallet/index.vue @@ -1,13 +1,16 @@ diff --git a/src/stores/wallet.js b/src/stores/wallet.js index 2a71ed455..57c5c25fb 100644 --- a/src/stores/wallet.js +++ b/src/stores/wallet.js @@ -8,6 +8,8 @@ export const useWalletStore = defineStore('wallet', () => { const walletInfo = ref(null) const aeSdk = ref(null) const balance = ref(null) + const foundWallets = ref(null) + const status = ref(null) async function initWallet() { // todo reuse instance @@ -20,8 +22,6 @@ export const useWalletStore = defineStore('wallet', () => { compilerUrl: 'https://compiler.aepps.com', } - // connect to Superhero Wallet - // AeSdkAepp instance can't be in deep reactive https://stackoverflow.com/a/69010240 aeSdk.value = shallowReactive(new AeSdkAepp({ name: 'AEPP', ...aeSdkOptions, @@ -33,24 +33,37 @@ export const useWalletStore = defineStore('wallet', () => { await fetchAccountInfo() }, })) - await scanForWallets() + await connect() } catch (error) { console.log('failed') throw error } } - async function scanForWallets() { - const foundWallet = await new Promise(resolve => { + async function scanWallets() { + status.value = 'scanning' + foundWallets.value = await new Promise(resolve => { + const timeout = setTimeout(() => { + status.value = 'not installed' + + resolve(undefined) + }, 10000) + const handleWallets = ({ newWallet }) => { + console.log('newWallet', newWallet) + status.value = 'found' + clearTimeout(timeout) stopScan() resolve(newWallet) } const scannerConnection = new BrowserWindowMessageConnection() const stopScan = walletDetector(scannerConnection, handleWallets) }) + } - walletInfo.value = await aeSdk.value.connectToWallet(foundWallet.getConnection()) + async function connect() { + walletInfo.value = await aeSdk.value.connectToWallet(foundWallets.value.getConnection()) + status.value = 'connected' await aeSdk.value.subscribeAddress('subscribe', 'current') await fetchAccountInfo() } @@ -70,6 +83,9 @@ export const useWalletStore = defineStore('wallet', () => { } return { + foundWallets, + status, + scanWallets, initWallet, walletInfo, balance, From 5d5f0c5facf234d826cfa9e572968ffe110d9432 Mon Sep 17 00:00:00 2001 From: janmichek Date: Thu, 26 Oct 2023 15:09:42 +0200 Subject: [PATCH 04/34] componentize UI --- src/components/WalletAccountPanel.vue | 20 +++++++ src/components/WalletConnectionPanel.vue | 73 ++++++++++++++++++++++++ src/pages/wallet/index.vue | 51 +++-------------- src/stores/wallet.js | 11 +++- 4 files changed, 108 insertions(+), 47 deletions(-) create mode 100644 src/components/WalletAccountPanel.vue create mode 100644 src/components/WalletConnectionPanel.vue diff --git a/src/components/WalletAccountPanel.vue b/src/components/WalletAccountPanel.vue new file mode 100644 index 000000000..a43652e47 --- /dev/null +++ b/src/components/WalletAccountPanel.vue @@ -0,0 +1,20 @@ + + diff --git a/src/components/WalletConnectionPanel.vue b/src/components/WalletConnectionPanel.vue new file mode 100644 index 000000000..b7b7d8e54 --- /dev/null +++ b/src/components/WalletConnectionPanel.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/pages/wallet/index.vue b/src/pages/wallet/index.vue index ab43cdc56..5be3f7e9e 100644 --- a/src/pages/wallet/index.vue +++ b/src/pages/wallet/index.vue @@ -6,46 +6,13 @@ Wallet Account - - - - - -

- In order to display wallet account information, the native Superhero wallet has to be installed on this device. -

- -
- - Download Superhero Wallet - -
- -
-
- -
-
- {{ walletInfo }} -
- {{ balance }} -
-
-
+ + diff --git a/src/stores/wallet.js b/src/stores/wallet.js index 57c5c25fb..3f6ed3ce4 100644 --- a/src/stores/wallet.js +++ b/src/stores/wallet.js @@ -12,7 +12,9 @@ export const useWalletStore = defineStore('wallet', () => { const status = ref(null) async function initWallet() { + console.log('init') // todo reuse instance + // todo improve naming const node = new Node(NODE_URL) try { const aeSdkOptions = { @@ -41,16 +43,16 @@ export const useWalletStore = defineStore('wallet', () => { } async function scanWallets() { + console.log('scan') + status.value = 'scanning' foundWallets.value = await new Promise(resolve => { const timeout = setTimeout(() => { status.value = 'not installed' - resolve(undefined) }, 10000) const handleWallets = ({ newWallet }) => { - console.log('newWallet', newWallet) status.value = 'found' clearTimeout(timeout) stopScan() @@ -62,9 +64,12 @@ export const useWalletStore = defineStore('wallet', () => { } async function connect() { + console.log('connect') + walletInfo.value = await aeSdk.value.connectToWallet(foundWallets.value.getConnection()) - status.value = 'connected' await aeSdk.value.subscribeAddress('subscribe', 'current') + status.value = 'connected' + await fetchAccountInfo() } From d40bb984b078d25899b59d2e905094849aacb361 Mon Sep 17 00:00:00 2001 From: janmichek Date: Thu, 26 Oct 2023 15:27:38 +0200 Subject: [PATCH 05/34] print basic account information --- src/components/WalletAccountPanel.vue | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/components/WalletAccountPanel.vue b/src/components/WalletAccountPanel.vue index a43652e47..ca24bcb0d 100644 --- a/src/components/WalletAccountPanel.vue +++ b/src/components/WalletAccountPanel.vue @@ -1,20 +1,25 @@ From ab760252d4b78dac5182a5925f8014e9aab99678 Mon Sep 17 00:00:00 2001 From: janmichek Date: Tue, 31 Oct 2023 14:58:04 +0100 Subject: [PATCH 06/34] fix scanning wallet --- src/components/WalletAccountPanel.vue | 5 +---- src/pages/wallet/index.vue | 9 ++++----- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/components/WalletAccountPanel.vue b/src/components/WalletAccountPanel.vue index ca24bcb0d..263c2c30d 100644 --- a/src/components/WalletAccountPanel.vue +++ b/src/components/WalletAccountPanel.vue @@ -8,13 +8,10 @@ import { storeToRefs } from 'pinia' import { useWalletStore } from '~/stores/wallet' import { useAccountStore } from '@/stores/accountDetails' -import AccountDetailsPanel from '@/components/AccountDetailsPanel' const walletStore = useWalletStore() -const { - aeSdk, -} = storeToRefs(walletStore) +const { aeSdk } = storeToRefs(walletStore) const accountStore = useAccountStore() const { accountDetails } = storeToRefs(accountStore) diff --git a/src/pages/wallet/index.vue b/src/pages/wallet/index.vue index 5be3f7e9e..3cd553ea4 100644 --- a/src/pages/wallet/index.vue +++ b/src/pages/wallet/index.vue @@ -19,15 +19,14 @@ import { storeToRefs } from 'pinia' import { useWalletStore } from '~/stores/wallet' import { transactionsHints } from '~/utils/hints/transactionsHints' -import PageHeader from '~/components/PageHeader' -import WalletAccountPanel from '~/components/WalletAccountPanel' -import WalletConnectionPanel from '~/components/WalletConnectionPanel' const walletStore = useWalletStore() const { scanWallets } = walletStore -const { status } = storeToRefs(walletStore) +const { status, aeSdk } = storeToRefs(walletStore) onBeforeMount(async() => { - await scanWallets() + if (!aeSdk) { + await scanWallets() + } }) From bc7128a7346a8de92d0594ba222b5305f890c0e8 Mon Sep 17 00:00:00 2001 From: janmichek Date: Tue, 31 Oct 2023 15:15:19 +0100 Subject: [PATCH 07/34] add hint --- src/pages/wallet/index.vue | 12 +++++++----- src/utils/hints/walletHints.js | 3 +++ 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 src/utils/hints/walletHints.js diff --git a/src/pages/wallet/index.vue b/src/pages/wallet/index.vue index 3cd553ea4..29359ec83 100644 --- a/src/pages/wallet/index.vue +++ b/src/pages/wallet/index.vue @@ -6,8 +6,7 @@ Wallet Account @@ -18,14 +17,17 @@ diff --git a/src/stores/wallet.js b/src/stores/wallet.js index 3f6ed3ce4..680e22aa6 100644 --- a/src/stores/wallet.js +++ b/src/stores/wallet.js @@ -34,6 +34,11 @@ export const useWalletStore = defineStore('wallet', () => { console.info('onAddressChange ::', addresses) await fetchAccountInfo() }, + onDisconnect() { + status.value = false + walletInfo.value = null + balance.value = null + }, })) await connect() } catch (error) { From e46c0fdb484fc13aac90b366e2179a91b8d92c8c Mon Sep 17 00:00:00 2001 From: janmichek Date: Tue, 31 Oct 2023 16:27:08 +0100 Subject: [PATCH 09/34] display all account information --- src/components/WalletAccountPanel.vue | 75 ++++++++++++++++++++++++++- src/pages/accounts/[id].vue | 8 --- 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/src/components/WalletAccountPanel.vue b/src/components/WalletAccountPanel.vue index 52b4818f0..f9f1db941 100644 --- a/src/components/WalletAccountPanel.vue +++ b/src/components/WalletAccountPanel.vue @@ -1,19 +1,90 @@ + + diff --git a/src/pages/accounts/[id].vue b/src/pages/accounts/[id].vue index 0fbf47711..11eaa4c20 100644 --- a/src/pages/accounts/[id].vue +++ b/src/pages/accounts/[id].vue @@ -43,14 +43,6 @@ import { storeToRefs } from 'pinia' import { useRoute, useRouter } from 'nuxt/app' import { useAccountStore } from '@/stores/accountDetails' -import AppTabs from '@/components/AppTabs' -import AppTab from '@/components/AppTab' -import AccountActivitiesPanel from '@/components/AccountActivitiesPanel' -import AccountTransactionsPanel from '@/components/AccountTransactionsPanel' -import AccountNamesPanel from '@/components/AccountNamesPanel' -import AccountTokensPanel from '@/components/AccountTokensPanel' -import PageHeader from '@/components/PageHeader' -import AccountDetailsPanel from '@/components/AccountDetailsPanel' import { accountHints } from '@/utils/hints/accountHints' import { isDesktop } from '@/utils/screen' From 4e04e9bc26003fe1168e7e33ecf52301fe415601 Mon Sep 17 00:00:00 2001 From: janmichek Date: Wed, 1 Nov 2023 09:40:49 +0100 Subject: [PATCH 10/34] create dropdown UI --- src/components/AppDropdown.vue | 40 +++++++++ src/components/TheHeader.vue | 27 +----- src/components/TheWalletAccount.vue | 37 -------- src/components/TheWalletAccountControls.vue | 93 +++++++++++++++++++++ 4 files changed, 137 insertions(+), 60 deletions(-) create mode 100644 src/components/AppDropdown.vue delete mode 100644 src/components/TheWalletAccount.vue create mode 100644 src/components/TheWalletAccountControls.vue diff --git a/src/components/AppDropdown.vue b/src/components/AppDropdown.vue new file mode 100644 index 000000000..a8ec926ae --- /dev/null +++ b/src/components/AppDropdown.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/TheHeader.vue b/src/components/TheHeader.vue index 76f5adcfd..95083ce89 100644 --- a/src/components/TheHeader.vue +++ b/src/components/TheHeader.vue @@ -36,22 +36,10 @@ :class="[ 'header__network-select', { 'header__network-select--open': isNavigationOpen }]"/> - - - - - - - wallet - + +
{ window.removeEventListener('resize', closeNavigation) }) -function exit() { - push('/') - aeSdk.value.disconnectWallet() -} - watch(() => route.fullPath, () => { closeNavigation() }) diff --git a/src/components/TheWalletAccount.vue b/src/components/TheWalletAccount.vue deleted file mode 100644 index c15e1e727..000000000 --- a/src/components/TheWalletAccount.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - diff --git a/src/components/TheWalletAccountControls.vue b/src/components/TheWalletAccountControls.vue new file mode 100644 index 000000000..930671927 --- /dev/null +++ b/src/components/TheWalletAccountControls.vue @@ -0,0 +1,93 @@ + + + + + + From 2dbe581c445fd0cfe076f1851afd5106083234ea Mon Sep 17 00:00:00 2001 From: janmichek Date: Wed, 1 Nov 2023 10:38:49 +0100 Subject: [PATCH 11/34] fix header controls --- src/components/TheHeader.vue | 7 +---- src/components/TheWalletAccountControls.vue | 34 ++++++++------------- 2 files changed, 14 insertions(+), 27 deletions(-) diff --git a/src/components/TheHeader.vue b/src/components/TheHeader.vue index 95083ce89..c8d6c1edc 100644 --- a/src/components/TheHeader.vue +++ b/src/components/TheHeader.vue @@ -37,9 +37,7 @@ 'header__network-select', { 'header__network-select--open': isNavigationOpen }]"/> - +
@@ -72,6 +63,7 @@ function exit() { diff --git a/src/components/TheWalletAccountControls.vue b/src/components/TheWalletAccountControls.vue index eef4bcd8c..6733a593e 100644 --- a/src/components/TheWalletAccountControls.vue +++ b/src/components/TheWalletAccountControls.vue @@ -63,23 +63,17 @@ function exit() { From 0e0a4c9030a2f32f02ec9374631dd4b6b38c30af Mon Sep 17 00:00:00 2001 From: janmichek Date: Wed, 1 Nov 2023 11:55:38 +0100 Subject: [PATCH 13/34] fix network id connection --- src/stores/wallet.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/stores/wallet.js b/src/stores/wallet.js index 680e22aa6..805dc66bb 100644 --- a/src/stores/wallet.js +++ b/src/stores/wallet.js @@ -3,7 +3,7 @@ import { useRuntimeConfig } from 'nuxt/app' import { AE_AMOUNT_FORMATS, AeSdkAepp, BrowserWindowMessageConnection, Node, walletDetector } from '@aeternity/aepp-sdk' export const useWalletStore = defineStore('wallet', () => { - const { NODE_URL } = useRuntimeConfig().public + const { NODE_URL, NETWORK_ID } = useRuntimeConfig().public const walletInfo = ref(null) const aeSdk = ref(null) @@ -15,20 +15,21 @@ export const useWalletStore = defineStore('wallet', () => { console.log('init') // todo reuse instance // todo improve naming - const node = new Node(NODE_URL) + try { const aeSdkOptions = { - nodes: [ - { name: 'mainnet', instance: node }, - ], + nodes: [{ + name: NETWORK_ID, + instance: new Node('https://testnet.aeternity.io'), + }], compilerUrl: 'https://compiler.aepps.com', } - + console.log('aeSdkOptions', aeSdkOptions) aeSdk.value = shallowReactive(new AeSdkAepp({ - name: 'AEPP', + name: 'æScan', ...aeSdkOptions, - async onNetworkChange({ NETWORK_ID }) { - await connectToNode(NETWORK_ID) + async onNetworkChange({ networkId }) { + await connectToNode(networkId) }, async onAddressChange(addresses) { console.info('onAddressChange ::', addresses) @@ -40,6 +41,7 @@ export const useWalletStore = defineStore('wallet', () => { balance.value = null }, })) + console.log('aeSdk.value', aeSdk.value) await connect() } catch (error) { console.log('failed') From d62b77f07d1fda11dc3e85d25a04f27f357aa73d Mon Sep 17 00:00:00 2001 From: janmichek Date: Wed, 1 Nov 2023 12:41:06 +0100 Subject: [PATCH 14/34] extend button UI --- src/components/AppButton.vue | 16 +++++++++++++++- src/components/TheWalletAccountControls.vue | 13 +++++++++---- src/stores/wallet.js | 4 ++-- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/components/AppButton.vue b/src/components/AppButton.vue index 8c3df7fb1..b2871f0b7 100644 --- a/src/components/AppButton.vue +++ b/src/components/AppButton.vue @@ -8,7 +8,11 @@ variant ? `button--${variant}` : null, size ? `button--${size}` : null, ]" - :disabled="disabled"> + :disabled="disabled" + :class="[ + 'button', + size ? `button--${size}` : null, + ]"> ['sm'].includes(val), + }, target: { type: String, default: '_blank', @@ -120,6 +129,11 @@ defineProps({ margin-right: var(--space-1); } + &--sm { + border-radius: 0; + padding: var(--space-2) var(--space-3); + } + &--link { color: var(--color-blue); text-align: left; diff --git a/src/components/TheWalletAccountControls.vue b/src/components/TheWalletAccountControls.vue index 6733a593e..7e42fcccd 100644 --- a/src/components/TheWalletAccountControls.vue +++ b/src/components/TheWalletAccountControls.vue @@ -19,12 +19,13 @@ - - +
diff --git a/src/components/WalletConnectionPanel.vue b/src/components/WalletConnectionPanel.vue index b7b7d8e54..83c185bcb 100644 --- a/src/components/WalletConnectionPanel.vue +++ b/src/components/WalletConnectionPanel.vue @@ -30,7 +30,6 @@ diff --git a/src/components/WalletAccountPanel.vue b/src/components/WalletAccountPanel.vue index f9f1db941..a74eac845 100644 --- a/src/components/WalletAccountPanel.vue +++ b/src/components/WalletAccountPanel.vue @@ -30,6 +30,7 @@ import { storeToRefs } from 'pinia' import { useRoute, useRouter } from 'nuxt/app' import { useWalletStore } from '~/stores/wallet' import { useAccountStore } from '@/stores/accountDetails' +import { isDesktop } from '~/utils/screen' const walletStore = useWalletStore() const accountStore = useAccountStore() @@ -76,8 +77,11 @@ const activeTabIndex = computed({ return push(newRoute) }, }) - -fetchAccount(aeSdk.value.address) +if (process.client) { + const limit = isDesktop() ? null : 3 + await fetchAccount(aeSdk.value.address, { limit }) + // todo loading +} diff --git a/src/pages/wallet/index.vue b/src/pages/wallet/index.vue index e8df31700..1949be699 100644 --- a/src/pages/wallet/index.vue +++ b/src/pages/wallet/index.vue @@ -9,9 +9,11 @@ {{ walletHints.wallet }} - - - + + - diff --git a/src/components/TheWalletAccountControls.vue b/src/components/TheWalletAccountControls.vue index b31359d3b..09880e3e1 100644 --- a/src/components/TheWalletAccountControls.vue +++ b/src/components/TheWalletAccountControls.vue @@ -1,35 +1,32 @@ diff --git a/src/components/WalletConnectionPanel.vue b/src/components/WalletConnectionPanel.vue index 394a78dff..4d25ed679 100644 --- a/src/components/WalletConnectionPanel.vue +++ b/src/components/WalletConnectionPanel.vue @@ -33,9 +33,8 @@ + @click="router.go()"> Try again - @@ -49,7 +48,7 @@ import AppButton from '@/components/AppButton' const walletStore = useWalletStore() const { status } = storeToRefs(walletStore) -const { scanWallets } = walletStore +const router = useRouter() const isProcessing = computed(() => { return status.value === 'detecting' || status.value === 'connecting' || status.value === 'disconnecting' diff --git a/src/stores/wallet.js b/src/stores/wallet.js index d3a5bde12..6867d84e1 100644 --- a/src/stores/wallet.js +++ b/src/stores/wallet.js @@ -37,16 +37,13 @@ export const useWalletStore = defineStore('wallet', () => { } async function scanWallets() { - // todo fix resetting state - if (detectedWallets.value) { - resetState() - } status.value = 'detecting' detectedWallets.value = await new Promise(resolve => { const timeout = setTimeout(() => { resolve(undefined) status.value = 'not detected' + disconnect() }, 10000) function setDetected({ newWallet }) { From 0e5e40aec2b03f68390c29ff8cdff47ab0a82e95 Mon Sep 17 00:00:00 2001 From: janmichek Date: Thu, 2 Nov 2023 18:07:13 +0100 Subject: [PATCH 22/34] remove unused code --- src/components/TheWalletAccountControls.vue | 18 ------------------ src/stores/wallet.js | 6 ------ 2 files changed, 24 deletions(-) diff --git a/src/components/TheWalletAccountControls.vue b/src/components/TheWalletAccountControls.vue index a280b0c35..826a7924c 100644 --- a/src/components/TheWalletAccountControls.vue +++ b/src/components/TheWalletAccountControls.vue @@ -62,21 +62,3 @@ function exit() { } } - - diff --git a/src/stores/wallet.js b/src/stores/wallet.js index 6867d84e1..289d6d330 100644 --- a/src/stores/wallet.js +++ b/src/stores/wallet.js @@ -73,12 +73,6 @@ export const useWalletStore = defineStore('wallet', () => { aeSdk.value.disconnectWallet() } - function resetState() { - aeSdk.value = null - detectedWallets.value = null - status.value = null - } - return { detectedWallets, status, From 946bfd1e5f5b3029d1bb2009d5ec0ea7d3b66f42 Mon Sep 17 00:00:00 2001 From: janmichek Date: Mon, 6 Nov 2023 15:22:42 +0100 Subject: [PATCH 23/34] update navigation when wallet changed --- src/components/WalletAccountPanel.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/WalletAccountPanel.vue b/src/components/WalletAccountPanel.vue index 1f4390fa2..62aa4b41f 100644 --- a/src/components/WalletAccountPanel.vue +++ b/src/components/WalletAccountPanel.vue @@ -77,9 +77,13 @@ const activeTabIndex = computed({ return push(newRoute) }, }) + if (process.client) { const limit = isDesktop() ? null : 3 await fetchAccount(aeSdk.value.address, { limit }) + watch(() => aeSdk.value.address, async() => { + await fetchAccount(aeSdk.value.address, { limit }) + }) } From e5b8dac1f1711edae72873342d7952caf8f6de6c Mon Sep 17 00:00:00 2001 From: janmichek Date: Tue, 7 Nov 2023 15:42:24 +0100 Subject: [PATCH 24/34] add portfolio layout --- src/components/AccountTokensTable.vue | 25 +++++- .../AccountTokensTableCondensed.vue | 19 ++++- src/components/TheWalletAccountControls.vue | 5 ++ src/components/WalletPortfolioPanel.vue | 83 +++++++++++++++++++ src/components/WalletPortfolioStats.vue | 82 ++++++++++++++++++ src/pages/wallet/portfolio.vue | 25 ++++++ 6 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 src/components/WalletPortfolioPanel.vue create mode 100644 src/components/WalletPortfolioStats.vue create mode 100644 src/pages/wallet/portfolio.vue diff --git a/src/components/AccountTokensTable.vue b/src/components/AccountTokensTable.vue index 29ba0ee73..237e17742 100644 --- a/src/components/AccountTokensTable.vue +++ b/src/components/AccountTokensTable.vue @@ -39,7 +39,12 @@ v-for="token in accountTokens?.data" :key="token.contractId"> - + @@ -55,7 +60,7 @@ {{ formatNumber(token.amount) }} - {{ token.value !== null ? `$${formatNumber(token.value,null,null, 7)}` : 'N/A' }} + {{ token.value !== null ? `$${formatNumber(token.value, null, null, 7)}` : 'N/A' }} @@ -66,6 +71,7 @@ import AppLink from '@/components/AppLink' import { tokensHints } from '@/utils/hints/tokensHints' import HintTooltip from '@/components/HintTooltip' +import TokenSymbolIcon from '~/components/TokenSymbolIcon' defineProps({ accountTokens: { @@ -74,3 +80,18 @@ defineProps({ }, }) + + diff --git a/src/components/AccountTokensTableCondensed.vue b/src/components/AccountTokensTableCondensed.vue index 53682963f..fc853154c 100644 --- a/src/components/AccountTokensTableCondensed.vue +++ b/src/components/AccountTokensTableCondensed.vue @@ -15,7 +15,12 @@ - + @@ -84,6 +89,7 @@ import AppLink from '@/components/AppLink' import AppTooltip from '@/components/AppTooltip' import ValueHashEllipsed from '@/components/ValueHashEllipsed' import { tokensHints } from '@/utils/hints/tokensHints' +import TokenSymbolIcon from '~/components/TokenSymbolIcon' defineProps({ accountTokens: { @@ -116,5 +122,16 @@ defineProps({ &__data { text-align: right; } + + &__icon { + width: 24px; + height: 24px; + margin-right: var(--space-1); + } + + &__link { + display: inline-flex; + align-items: center; + } } diff --git a/src/components/TheWalletAccountControls.vue b/src/components/TheWalletAccountControls.vue index 826a7924c..96d3dbfe2 100644 --- a/src/components/TheWalletAccountControls.vue +++ b/src/components/TheWalletAccountControls.vue @@ -11,6 +11,11 @@