diff options
author | Dan Finlay <dan@danfinlay.com> | 2018-06-15 06:15:23 +0800 |
---|---|---|
committer | Dan Finlay <dan@danfinlay.com> | 2018-06-15 06:15:23 +0800 |
commit | 3a6cc3c8fd1cf16b744af61104472887d6d37fb3 (patch) | |
tree | 95666b56bac6a7aa3571be1b6c99c899403e3577 /app/scripts/lib | |
parent | 299abee666d7f8347e062afff4f2fae47c7f6968 (diff) | |
download | tangerine-wallet-browser-3a6cc3c8fd1cf16b744af61104472887d6d37fb3.tar tangerine-wallet-browser-3a6cc3c8fd1cf16b744af61104472887d6d37fb3.tar.gz tangerine-wallet-browser-3a6cc3c8fd1cf16b744af61104472887d6d37fb3.tar.bz2 tangerine-wallet-browser-3a6cc3c8fd1cf16b744af61104472887d6d37fb3.tar.lz tangerine-wallet-browser-3a6cc3c8fd1cf16b744af61104472887d6d37fb3.tar.xz tangerine-wallet-browser-3a6cc3c8fd1cf16b744af61104472887d6d37fb3.tar.zst tangerine-wallet-browser-3a6cc3c8fd1cf16b744af61104472887d6d37fb3.zip |
Re-enable dapp reload on network change
We want to give devs some time to digest [this blog post](https://medium.com/metamask/breaking-change-no-longer-reloading-pages-on-network-change-4a3e1fd2f5e7) before we making a breaking change to our platform.
Makes it easy to re-implement the change.
Diffstat (limited to 'app/scripts/lib')
-rw-r--r-- | app/scripts/lib/auto-reload.js | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/app/scripts/lib/auto-reload.js b/app/scripts/lib/auto-reload.js new file mode 100644 index 000000000..cce31c3d2 --- /dev/null +++ b/app/scripts/lib/auto-reload.js @@ -0,0 +1,61 @@ +module.exports = setupDappAutoReload + +function setupDappAutoReload (web3, observable) { + // export web3 as a global, checking for usage + let hasBeenWarned = false + let reloadInProgress = false + let lastTimeUsed + let lastSeenNetwork + + global.web3 = new Proxy(web3, { + get: (_web3, key) => { + // show warning once on web3 access + if (!hasBeenWarned && key !== 'currentProvider') { + console.warn('MetaMask: web3 will be deprecated in the near future in favor of the ethereumProvider \nhttps://github.com/MetaMask/faq/blob/master/detecting_metamask.md#web3-deprecation') + hasBeenWarned = true + } + // get the time of use + lastTimeUsed = Date.now() + // return value normally + return _web3[key] + }, + set: (_web3, key, value) => { + // set value normally + _web3[key] = value + }, + }) + + observable.subscribe(function (state) { + // if reload in progress, no need to check reload logic + if (reloadInProgress) return + + const currentNetwork = state.networkVersion + + // set the initial network + if (!lastSeenNetwork) { + lastSeenNetwork = currentNetwork + return + } + + // skip reload logic if web3 not used + if (!lastTimeUsed) return + + // if network did not change, exit + if (currentNetwork === lastSeenNetwork) return + + // initiate page reload + reloadInProgress = true + const timeSinceUse = Date.now() - lastTimeUsed + // if web3 was recently used then delay the reloading of the page + if (timeSinceUse > 500) { + triggerReset() + } else { + setTimeout(triggerReset, 500) + } + }) +} + +// reload the page +function triggerReset () { + global.location.reload() +} |