From 5f6d34b6c111aa561b7a2b8ab8ae50de3120832c Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Wed, 27 Nov 2019 12:42:28 +1100 Subject: [PATCH 1/6] Allow html to be rendered in wallet select modal --- src/views/WalletSelect.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/WalletSelect.svelte b/src/views/WalletSelect.svelte index c147d2ddd..7bdb8420d 100644 --- a/src/views/WalletSelect.svelte +++ b/src/views/WalletSelect.svelte @@ -201,7 +201,7 @@ {#if !selectedWalletModule}

- {modalData.description} + {@html modalData.description}

From c5ac3597846c1a41e691767d20d8362792ad63dd Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 28 Nov 2019 13:06:17 +1100 Subject: [PATCH 2/6] Remove cancelable promise dependency --- package.json | 4 +- rollup.config.js | 5 +- src/@types/images.d.ts | 2 - src/@types/{svelte-i18n.d.ts => index.d.ts} | 7 ++ src/@types/libraries.d.ts | 12 ---- src/interfaces.ts | 9 +-- src/stores.ts | 36 +++-------- src/utilities.ts | 46 +++++++------ src/views/WalletCheck.svelte | 5 +- tsconfig.json | 3 +- yarn.lock | 71 +++++++++++---------- 11 files changed, 92 insertions(+), 108 deletions(-) delete mode 100644 src/@types/images.d.ts rename src/@types/{svelte-i18n.d.ts => index.d.ts} (73%) delete mode 100644 src/@types/libraries.d.ts diff --git a/package.json b/package.json index bb8db566e..e77cb0e05 100644 --- a/package.json +++ b/package.json @@ -27,10 +27,9 @@ "@pyoner/svelte-ts-preprocess": "^1.2.1", "@rollup/plugin-json": "^4.0.0", "@types/lodash.debounce": "^4.0.6", - "@types/node": "^12.12.3", "babel-plugin-external-helpers": "^6.18.0", "rimraf": "^3.0.0", - "rollup": "^1.12.0", + "rollup": "^1.27.5", "rollup-plugin-commonjs": "^10.0.0", "rollup-plugin-img": "^1.1.0", "rollup-plugin-node-resolve": "^5.2.0", @@ -49,7 +48,6 @@ "bowser": "^2.5.2", "fortmatic": "^0.8.2", "lodash.debounce": "^4.0.8", - "promise-cancelable": "^2.1.1", "regenerator-runtime": "^0.13.3", "squarelink": "^1.1.4" }, diff --git a/rollup.config.js b/rollup.config.js index 6b51f5c19..2d18ba70b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -42,13 +42,14 @@ export default { importee === 'svelte' || importee.startsWith('svelte/') }), commonjs(), - typescript() + typescript({ + clean: true + }) ], external: [ 'bowser', 'bnc-sdk', 'bignumber.js', - 'promise-cancelable', '@portis/web3', '@walletconnect/web3-provider', 'fortmatic', diff --git a/src/@types/images.d.ts b/src/@types/images.d.ts deleted file mode 100644 index dbd12dc94..000000000 --- a/src/@types/images.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare module '*.png' -declare module '*.svg' diff --git a/src/@types/svelte-i18n.d.ts b/src/@types/index.d.ts similarity index 73% rename from src/@types/svelte-i18n.d.ts rename to src/@types/index.d.ts index 1d278e459..8e2dc6944 100644 --- a/src/@types/svelte-i18n.d.ts +++ b/src/@types/index.d.ts @@ -1,3 +1,10 @@ +declare module 'fortmatic' +declare module 'squarelink' +declare module '@walletconnect/web3-provider' + +declare module '*.png' +declare module '*.svg' + declare module 'svelte-i18n' { interface Options { fallback: string diff --git a/src/@types/libraries.d.ts b/src/@types/libraries.d.ts deleted file mode 100644 index 3d84b6867..000000000 --- a/src/@types/libraries.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -declare module 'promise-cancelable' { - export default class Cancelable extends Promise { - constructor(executor: any) - cancel(func: () => void): any - isFulfilled(): any - isResolved(): any - isRejected(): any - } -} -declare module '@walletconnect/web3-provider' -declare module 'squarelink' -declare module 'fortmatic' diff --git a/src/interfaces.ts b/src/interfaces.ts index dbb6f2bcd..c5020618c 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -208,14 +208,11 @@ export interface AppState { walletCheckCompleted: boolean } -export interface QuerablePromise extends CancelablePromise { - isFulfilled: () => boolean - isResolved: () => boolean - isRejected: () => boolean +export interface CancelablePromise extends Promise { + cancel: () => void } -export interface CancelablePromise extends Promise { - cancel: (func: () => void) => void +export interface QueryablePromise extends CancelablePromise { isFulfilled: () => boolean isResolved: () => boolean isRejected: () => boolean diff --git a/src/stores.ts b/src/stores.ts index 71407c709..4e6eaa086 100644 --- a/src/stores.ts +++ b/src/stores.ts @@ -1,6 +1,7 @@ -import { writable, derived, get } from 'svelte/store' import { getBlocknative } from './services' -import { wait, makeQuerablePromise } from './utilities' +import { writable, derived, get } from 'svelte/store' +import debounce from 'lodash.debounce' +import { wait, makeQueryablePromise, makeCancelable } from './utilities' import { validateWalletInterface, validateType } from './validation' import { WritableStore, @@ -8,12 +9,10 @@ import { WalletInterface, WalletStateSliceStore, StateSyncer, - BalanceStore + BalanceStore, + QueryablePromise } from './interfaces' -const { default: Cancelable } = require('promise-cancelable') -const debounce = require('lodash.debounce') - export const app: WritableStore = writable({ dappId: '', networkId: 1, @@ -27,7 +26,7 @@ export const app: WritableStore = writable({ }) export const balanceSyncStatus: { - syncing: null | Promise + syncing: null | QueryablePromise error: string } = { syncing: null, @@ -253,22 +252,7 @@ function syncStateWithTimeout(options: { return () => {} } - const prom = makeQuerablePromise( - new Cancelable( - ( - resolve: (val: string | number | null) => void, - reject: (err: any) => void, - onCancel: (callback: () => void) => void - ) => { - getState().then(resolve) - - onCancel(() => { - balanceSyncStatus.error = - 'There was a problem getting the balance of this wallet' - }) - } - ).catch(() => {}) - ) + const prom = makeCancelable(getState()) balanceSyncStatus.syncing = prom @@ -286,10 +270,8 @@ function syncStateWithTimeout(options: { const timedOut = wait(timeout) timedOut.then(() => { - if (!prom.isFulfilled()) { - prom.cancel(() => {}) - } + prom.cancel() }) - return () => prom.cancel(() => {}) + return () => prom.cancel() } diff --git a/src/utilities.ts b/src/utilities.ts index dcc3addc5..3f13ce3a8 100644 --- a/src/utilities.ts +++ b/src/utilities.ts @@ -1,11 +1,7 @@ import bowser from 'bowser' import BigNumber from 'bignumber.js' -import { - QuerablePromise, - WalletInterface, - CancelablePromise -} from './interfaces' +import { WalletInterface, QueryablePromise } from './interfaces' export function getNetwork(provider: any): Promise { return new Promise((resolve, reject) => { @@ -210,22 +206,36 @@ export function wait(time: number) { return new Promise(resolve => setTimeout(resolve, time)) } -export function makeQuerablePromise( - promise: CancelablePromise -): QuerablePromise { +export function makeCancelable(promise: any) { + let rejectFn: any + + const wrappedPromise: any = new Promise((resolve, reject) => { + rejectFn = reject + + promise.then(resolve).catch(reject) + }) + + wrappedPromise.cancel = () => { + rejectFn('poop') + } + + return wrappedPromise +} + +export function makeQueryablePromise(promise: any): QueryablePromise { let isResolved = false let isRejected = false - promise.then( - function(v: any) { - isResolved = true - return v - }, - function(e: any) { - isRejected = true - throw e - } - ) + promise.then(function(v: any) { + isResolved = true + return v + }) + + promise.catch(() => { + console.log('caught 2') + isRejected = true + }) + promise.isFulfilled = function() { return isResolved || isRejected } diff --git a/src/views/WalletCheck.svelte b/src/views/WalletCheck.svelte index 4a303cc3a..909b206e2 100644 --- a/src/views/WalletCheck.svelte +++ b/src/views/WalletCheck.svelte @@ -149,7 +149,10 @@ ) => { for (const module of modules) { if (balanceSyncStatus.syncing) { - await balanceSyncStatus.syncing.catch(() => {}) + try { + await balanceSyncStatus.syncing + } catch (error) {} + balanceSyncStatus.syncing = null } diff --git a/tsconfig.json b/tsconfig.json index d949ffa13..e6de36a97 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -46,8 +46,7 @@ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [] /* List of folders to include type definitions from. */, "types": [ - "svelte", - "node" + "svelte" ] /* Type declaration files to be included in compilation. */, "allowSyntheticDefaultImports": true /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */, "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ diff --git a/yarn.lock b/yarn.lock index 616141400..03e4ee73f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -839,7 +839,12 @@ dependencies: "@types/node" "*" -"@types/estree@*", "@types/estree@0.0.39": +"@types/estree@*": + version "0.0.40" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.40.tgz#0e6cb9b9bbd098031fa19e4b4e8131bc70e5de13" + integrity sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA== + +"@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== @@ -856,7 +861,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== -"@types/node@*", "@types/node@^12.12.3": +"@types/node@*": version "12.12.14" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.14.tgz#1c1d6e3c75dba466e0326948d56e8bd72a1903d2" integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA== @@ -1089,9 +1094,9 @@ atob@^2.1.1: integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== authereum@^0.0.4-beta.26: - version "0.0.4-beta.53" - resolved "https://registry.yarnpkg.com/authereum/-/authereum-0.0.4-beta.53.tgz#ae69b404c39fb0772de5b624202555d5c12e1064" - integrity sha512-EL9ugU8DKkekVGrLuSSj6EdmXia41ANMIst5vdFokKPBtOXs+TDstCRm3xKirrmzEw+emgTZr1S/yxsi5nr+HA== + version "0.0.4-beta.55" + resolved "https://registry.yarnpkg.com/authereum/-/authereum-0.0.4-beta.55.tgz#69b16bc91442a1463cc5d3d97df9a5f4842dc898" + integrity sha512-KLk5VWdO8OnqTekmP1HJdugy1EJN9ATDB4fWvxPbCIQQJKV2I7nG5EYGobg3b7a1bA8hXzeAmKaQsoELKX3hrw== dependencies: bnc-notify "^0.2.1" ethereum-private-key-to-address "0.0.3" @@ -1099,9 +1104,10 @@ authereum@^0.0.4-beta.26: eventemitter3 "^4.0.0" moment "^2.24.0" penpal "^4.1.1" + pify "^4.0.1" rollup-plugin-commonjs "^10.1.0" store "^2.0.12" - web3-provider-engine "^15.0.3" + web3-provider-engine "^15.0.4" web3-utils "^1.2.1" await-semaphore@^0.1.3: @@ -1115,9 +1121,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" + integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== axios@^0.18.0: version "0.18.1" @@ -2044,9 +2050,9 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.1.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.2.tgz#652fa7c54652b7f6586a893e37001df55ea2ac37" - integrity sha512-W0Aj+LM3EAxxjD0Kp2o4be8UlnxIZHNupBv2znqrheR4aY2nOn91794k/xoSp+SxqqriiZpTsSwBtZr60cbkwQ== + version "3.4.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.4.3.tgz#54f2c5cd77b8b5acc5048904cc795722c9d590d1" + integrity sha512-HgW7pxjAdq6EMxT5uOhbTfjgZo8fvWn0D6QXVlWs3z1Eerux7tRrJ4gcgnZNn6S0OMPHlClJuIEPp0hnow44Sg== dependencies: browserslist "^4.7.3" semver "^6.3.0" @@ -3181,23 +3187,23 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== -intl-format-cache@^4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-4.2.10.tgz#5a79c8374d88eeb5f0cea78ed40069310b449c48" - integrity sha512-GE9/50WluoMLxi1mP8fX5dcKfYfRNFhH3dy6Sgx96RsBla/9YApNL58Gzg9nHTipVUgX3VUz4PsssrKVlcQvWA== +intl-format-cache@^4.2.11: + version "4.2.11" + resolved "https://registry.yarnpkg.com/intl-format-cache/-/intl-format-cache-4.2.11.tgz#0819aad42a27fb38f3e0814f487a1530ad536588" + integrity sha512-5AEkYXzkrbz/PZDgQ2SLCgpBO6pHDqagaj7oF2PGcRyQf8f0uK8/YCAIU/E6UXomeZhjpqJ+qf18wvJglAJnjw== -intl-messageformat-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-3.3.0.tgz#54d6cbb52db2c7ec87a4c785bc8f84ee3df5db3b" - integrity sha512-yRQjVPougaLGNFRNQxuWJ1NQqcSqPnO+RlpC+s3VrdmvH7zf+AUYgj9QwEjDvPSHZoME6A6ziRQLzIwmlCWUsA== +intl-messageformat-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-3.3.1.tgz#2140b2072149ae8639645823a3a895d515d251a4" + integrity sha512-H+t27dpxi8r51GD9km0huyy5UJET3YF3AT2mvXRc0PRioKPFNexxhMUSagPNrMqGhb+/7p7RPcmsv7tcgCdWWQ== intl-messageformat@^7.5.2: - version "7.6.0" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-7.6.0.tgz#90a96d4afd282d76c9fa0951d5cf1ed7687d4018" - integrity sha512-+Kvr+kYQMNXD7f5N2dTKabtWvq858pvnb8Goe4jR9hZTzBRuxmiiYRyxhZg2EaOqv/FZzT15L6dGdAa6pf0wWw== + version "7.6.1" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-7.6.1.tgz#69ca8ccc755e854d985ddf1595f4301746f4f248" + integrity sha512-RN2wah9s/56EVMgVQKTcou2C2DoevmiPlWqIyoY3mciNrOWLlfjFqEFqqJrFinf32/LvnOhClwoqvDZ3T0Jh8Q== dependencies: - intl-format-cache "^4.2.10" - intl-messageformat-parser "^3.3.0" + intl-format-cache "^4.2.11" + intl-messageformat-parser "^3.3.1" invariant@^2.2.2: version "2.2.4" @@ -4316,11 +4322,6 @@ process@~0.5.1: resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" integrity sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8= -promise-cancelable@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/promise-cancelable/-/promise-cancelable-2.1.1.tgz#4835a41055bbd0c2768723c61617d7d9ec887753" - integrity sha512-tHjRM44/n6ktUY1BohLKl109rYDK6oZ+B/OyMUDQrIMTjDZBdCLvpu/vzv5UqqqLeOw5KfJnFFVmfDtzJtvVTw== - promise-to-callback@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" @@ -4624,9 +4625,9 @@ resolve@1.10.0: path-parse "^1.0.6" resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.3.2, resolve@^1.8.1: - version "1.12.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.2.tgz#08b12496d9aa8659c75f534a8f05f0d892fff594" - integrity sha512-cAVTI2VLHWYsGOirfeYVVQ7ZDejtQ9fp4YhYckWDEkFfqbVjaT11iM8k6xSAfGFMM+gDpZjMnFssPu8we+mqFw== + version "1.13.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" + integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== dependencies: path-parse "^1.0.6" @@ -4741,7 +4742,7 @@ rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.3, rollup-pluginutils@^2.5.0, dependencies: estree-walker "^0.6.1" -rollup@^1.12.0: +rollup@^1.27.5: version "1.27.5" resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.27.5.tgz#d100fb0ffd8353575cb2057152547b9abfddfe59" integrity sha512-8rfVdzuTg2kt8ObD9LNJpEwUN7B6lsl3sHc5fddtgICpLjpYeSf4m2+RftBzcCaBTMi1iYX3Ez8zFT4Gj2nJjg== @@ -5430,7 +5431,7 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -web3-provider-engine@^15.0.3: +web3-provider-engine@^15.0.4: version "15.0.4" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-15.0.4.tgz#5c336bcad2274dff5218bc8db003fa4e9e464c24" integrity sha512-Ob9oK0TUZfVC7NXkB7CQSWAiCdCD/Xnlh2zTnV8NdJR8LCrMAy2i6JedU70JHaxw59y7mM4GnsYOTTGkquFnNQ== From 62b4519f5f3a5f385eb54dddaabfb26de63246a6 Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 28 Nov 2019 13:08:02 +1100 Subject: [PATCH 3/6] Only allow wallet to be instantiated once --- src/modules/select/wallets/authereum.ts | 15 ++++++------- src/modules/select/wallets/fortmatic.ts | 17 ++++++--------- src/modules/select/wallets/portis.ts | 11 +++------- src/modules/select/wallets/squarelink.ts | 15 +++++-------- src/modules/select/wallets/wallet-connect.ts | 22 +++++++------------- src/views/WalletSelect.svelte | 7 +++++++ 6 files changed, 36 insertions(+), 51 deletions(-) diff --git a/src/modules/select/wallets/authereum.ts b/src/modules/select/wallets/authereum.ts index 520e8b879..8d5ca8fe3 100644 --- a/src/modules/select/wallets/authereum.ts +++ b/src/modules/select/wallets/authereum.ts @@ -24,32 +24,33 @@ function authereum(options: { iconSrc: authereumIcon, wallet: async () => { const { default: Authereum } = await import('authereum') - const authereum = new Authereum({ + const instance = new Authereum({ networkName: networkName(networkId), disableNotifications: true }) - const provider = authereum.getProvider() + const provider = instance.getProvider() return { provider, + instance, interface: { name: 'Authereum', connect: () => provider.enable(), - disconnect: () => authereum.logout(), + disconnect: () => instance.logout(), loading: new Promise((resolve: () => void) => { - authereum.on('openPopup', resolve) + instance.on('openPopup', resolve) }), address: { - get: () => authereum.getAccountAddress() + get: () => instance.getAccountAddress() }, network: { get: () => Promise.resolve(networkId) }, balance: { get: async () => { - const loggedIn = await authereum.isAuthenticated() - return loggedIn && authereum.getBalance() + const loggedIn = await instance.isAuthenticated() + return loggedIn && instance.getBalance() } } } diff --git a/src/modules/select/wallets/fortmatic.ts b/src/modules/select/wallets/fortmatic.ts index 61784a026..84f2bd45d 100644 --- a/src/modules/select/wallets/fortmatic.ts +++ b/src/modules/select/wallets/fortmatic.ts @@ -30,22 +30,17 @@ function fortmatic(options: SdkWalletOptions): WalletModule { optional: true }) - let instance: any - let provider: any - return { name: 'Fortmatic', svg: fortmaticIcon, wallet: async (helpers: Helpers) => { - if (!instance) { - const { default: Fortmatic } = await import('fortmatic') + const { default: Fortmatic } = await import('fortmatic') - instance = new Fortmatic( - apiKey, - networkId === 1 ? undefined : networkName(networkId) - ) - provider = instance.getProvider() - } + const instance = new Fortmatic( + apiKey, + networkId === 1 ? undefined : networkName(networkId) + ) + const provider = instance.getProvider() const { BigNumber } = helpers diff --git a/src/modules/select/wallets/portis.ts b/src/modules/select/wallets/portis.ts index d5a05a6c5..989c2a22b 100644 --- a/src/modules/select/wallets/portis.ts +++ b/src/modules/select/wallets/portis.ts @@ -20,18 +20,13 @@ function portis(options: SdkWalletOptions): WalletModule { optional: true }) - let instance: any - let provider: any - return { name: 'Portis', svg: portisIcon, wallet: async (helpers: Helpers) => { - if (!instance) { - const { default: Portis } = await import('@portis/web3') - instance = new Portis(apiKey, networkName(networkId)) - provider = instance.provider - } + const { default: Portis } = await import('@portis/web3') + const instance = new Portis(apiKey, networkName(networkId)) + const provider = instance.provider const { BigNumber } = helpers diff --git a/src/modules/select/wallets/squarelink.ts b/src/modules/select/wallets/squarelink.ts index 57cfd0d38..610af6a95 100644 --- a/src/modules/select/wallets/squarelink.ts +++ b/src/modules/select/wallets/squarelink.ts @@ -29,22 +29,17 @@ function squarelink(options: SdkWalletOptions): WalletModule { optional: true }) - let instance: any - let provider: any - return { name: 'Squarelink', svg: sqlkIcon, wallet: async (helpers: Helpers) => { - if (!instance) { - const { default: Squarelink } = await import('squarelink') + const { default: Squarelink } = await import('squarelink') - instance = new Squarelink(apiKey, networkName(networkId), { - useSync: true - }) + const instance = new Squarelink(apiKey, networkName(networkId), { + useSync: true + }) - provider = instance.getProviderSync() - } + const provider = instance.getProviderSync() const { BigNumber } = helpers diff --git a/src/modules/select/wallets/wallet-connect.ts b/src/modules/select/wallets/wallet-connect.ts index 742006a95..e57dc01c9 100644 --- a/src/modules/select/wallets/wallet-connect.ts +++ b/src/modules/select/wallets/wallet-connect.ts @@ -30,23 +30,19 @@ function walletConnect(options: WalletConnectOptions): WalletModule { optional: true }) - let provider: any - return { name: 'WalletConnect', svg: walletConnectIcon, wallet: async () => { - if (!provider) { - const { default: WalletConnectProvider } = await import( - '@walletconnect/web3-provider' - ) + const { default: WalletConnectProvider } = await import( + '@walletconnect/web3-provider' + ) - provider = new WalletConnectProvider({ - infuraId: infuraKey - }) + const provider = new WalletConnectProvider({ + infuraId: infuraKey + }) - provider.autoRefreshOnNetworkChange = false - } + provider.autoRefreshOnNetworkChange = false return { provider, @@ -64,10 +60,6 @@ function walletConnect(options: WalletConnectOptions): WalletModule { }) ) }), - disconnect: () => { - provider.close() - provider = undefined - }, address: { onChange: func => { provider diff --git a/src/views/WalletSelect.svelte b/src/views/WalletSelect.svelte index c147d2ddd..6b3dea99a 100644 --- a/src/views/WalletSelect.svelte +++ b/src/views/WalletSelect.svelte @@ -105,6 +105,13 @@ } async function handleWalletSelect(module: WalletModule) { + const currentWalletInterface = get(walletInterface) + + if (currentWalletInterface && currentWalletInterface.name === module.name) { + finish({ completed: true }) + return + } + loadingWallet = module.name const { From 91669b06ec448f1d58c572b8976c7befbde70503 Mon Sep 17 00:00:00 2001 From: Aaron Barnard Date: Thu, 28 Nov 2019 13:09:09 +1100 Subject: [PATCH 4/6] Only render show more button if more wallets --- src/components/Wallets.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Wallets.svelte b/src/components/Wallets.svelte index dff745c20..6b8d0b40d 100644 --- a/src/components/Wallets.svelte +++ b/src/components/Wallets.svelte @@ -69,7 +69,7 @@ {/each} - {#if modalData.secondaryWallets && !showingAllWalletModules} + {#if modalData.secondaryWallets && modalData.secondaryWallets.length && !showingAllWalletModules}