From 76ae2ca1caee32213468769e29f42066ea7687e2 Mon Sep 17 00:00:00 2001 From: nicosampler Date: Wed, 9 Dec 2020 08:35:59 -0300 Subject: [PATCH 1/4] Remove Warning: React.createFactory() is deprecated --- package.json | 1 - .../AppLayout/Header/components/Layout.tsx | 78 +++++++++--------- src/components/hoc/OpenHoc/index.tsx | 6 -- src/logic/hooks/useStateHandler.tsx | 17 ++++ yarn.lock | 80 +++---------------- 5 files changed, 68 insertions(+), 114 deletions(-) delete mode 100644 src/components/hoc/OpenHoc/index.tsx create mode 100644 src/logic/hooks/useStateHandler.tsx diff --git a/package.json b/package.json index d943721d96..c2807e4284 100644 --- a/package.json +++ b/package.json @@ -219,7 +219,6 @@ "react-router-dom": "5.2.0", "react-scripts": "^4.0.1", "react-window": "^1.8.6", - "recompose": "^0.30.0", "redux": "4.0.5", "redux-actions": "^2.6.5", "redux-thunk": "^2.3.0", diff --git a/src/components/AppLayout/Header/components/Layout.tsx b/src/components/AppLayout/Header/components/Layout.tsx index bbc9b9cf74..5845013f14 100644 --- a/src/components/AppLayout/Header/components/Layout.tsx +++ b/src/components/AppLayout/Header/components/Layout.tsx @@ -9,11 +9,11 @@ import { Link } from 'react-router-dom' import Provider from './Provider' import Spacer from 'src/components/Spacer' -import openHoc from 'src/components/hoc/OpenHoc' import Col from 'src/components/layout/Col' import Img from 'src/components/layout/Img' import Row from 'src/components/layout/Row' import { border, headerHeight, md, screenSm, sm } from 'src/theme/variables' +import { useStateHandler } from 'src/logic/hooks/useStateHandler' import SafeLogo from '../assets/gnosis-safe-multisig-logo.svg' @@ -55,41 +55,45 @@ const styles = () => ({ }, }) -const Layout = openHoc(({ classes, clickAway, open, providerDetails, providerInfo, toggle }) => ( - - - - Gnosis Team Safe - - - - ( - - {({ TransitionProps }) => ( - - <> - - - {providerDetails} - - - - - )} - - )} - /> - -)) +const Layout = ({ classes, providerDetails, providerInfo }) => { + const { clickAway, open, toggle } = useStateHandler() + + return ( + + + + Gnosis Team Safe + + + + ( + + {({ TransitionProps }) => ( + + <> + + + {providerDetails} + + + + + )} + + )} + /> + + ) +} export default withStyles(styles as any)(Layout) diff --git a/src/components/hoc/OpenHoc/index.tsx b/src/components/hoc/OpenHoc/index.tsx deleted file mode 100644 index 30d4029a86..0000000000 --- a/src/components/hoc/OpenHoc/index.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { withStateHandlers } from 'recompose' - -export default withStateHandlers(() => ({ open: false }), { - toggle: ({ open }) => () => ({ open: !open }), - clickAway: () => () => ({ open: false }), -}) diff --git a/src/logic/hooks/useStateHandler.tsx b/src/logic/hooks/useStateHandler.tsx new file mode 100644 index 0000000000..a417e0dcd4 --- /dev/null +++ b/src/logic/hooks/useStateHandler.tsx @@ -0,0 +1,17 @@ +import { useState } from 'react' + +type ReturnValue = { + open: boolean + toggle: () => void + clickAway: () => void +} + +export const useStateHandler = (openInitialValue = false): ReturnValue => { + const [open, setOpen] = useState(openInitialValue) + + return { + open, + toggle: () => setOpen((open) => !open), + clickAway: () => setOpen(false), + } +} diff --git a/yarn.lock b/yarn.lock index 9aa36d725a..4b6c47c1e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4641,7 +4641,7 @@ arrify@^2.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== -asap@~2.0.3, asap@~2.0.6: +asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -6580,11 +6580,6 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -change-emitter@^0.1.2: - version "0.1.6" - resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" - integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU= - char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -7232,11 +7227,6 @@ core-js-pure@^3.0.0, core-js-pure@^3.0.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= - core-js@^2.4.0, core-js@^2.5.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -9912,19 +9902,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fbjs@^0.8.1: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -10965,11 +10942,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^2.3.1: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== - hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -12036,14 +12008,6 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -14203,7 +14167,12 @@ node-fetch@2.1.2: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= -node-fetch@^1.0.1, node-fetch@~1.7.1: +node-fetch@^2.6.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-fetch@~1.7.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== @@ -14211,11 +14180,6 @@ node-fetch@^1.0.1, node-fetch@~1.7.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.6.0, node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -16128,13 +16092,6 @@ promise.prototype.finally@^3.1.0: es-abstract "^1.17.0-next.0" function-bind "^1.1.1" -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - promise@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" @@ -16705,7 +16662,7 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4: +react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== @@ -17076,18 +17033,6 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -recompose@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.30.0.tgz#82773641b3927e8c7d24a0d87d65aeeba18aabd0" - integrity sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w== - dependencies: - "@babel/runtime" "^7.0.0" - change-emitter "^0.1.2" - fbjs "^0.8.1" - hoist-non-react-statics "^2.3.1" - react-lifecycles-compat "^3.0.2" - symbol-observable "^1.0.4" - recursive-readdir@2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" @@ -19006,7 +18951,7 @@ swarm-js@^0.1.40: tar "^4.0.2" xhr-request "^1.0.1" -symbol-observable@^1.0.4, symbol-observable@^1.2.0: +symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== @@ -19670,11 +19615,6 @@ u2f-api@0.2.7: resolved "https://registry.yarnpkg.com/u2f-api/-/u2f-api-0.2.7.tgz#17bf196b242f6bf72353d9858e6a7566cc192720" integrity sha512-fqLNg8vpvLOD5J/z4B6wpPg4Lvowz1nJ9xdHcCzdUPKcFE/qNCceV2gNZxSJd5vhAZemHr/K/hbzVA0zxB5mkg== -ua-parser-js@^0.7.18: - version "0.7.22" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" - integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== - ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" @@ -21145,7 +21085,7 @@ whatwg-fetch@2.0.4: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== -whatwg-fetch@>=0.10.0, whatwg-fetch@^3.4.1: +whatwg-fetch@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3" integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ== From dd8a927b37720be216bdb1ff43089460ae5db3b0 Mon Sep 17 00:00:00 2001 From: nicosampler Date: Wed, 9 Dec 2020 11:59:19 -0300 Subject: [PATCH 2/4] make TS recognize Window definition by adding an empty export --- src/test/utils/accounts.ts | 4 ++-- src/types/definitions.d.ts | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/test/utils/accounts.ts b/src/test/utils/accounts.ts index 1b1c4ade78..e5b140f380 100644 --- a/src/test/utils/accounts.ts +++ b/src/test/utils/accounts.ts @@ -1,10 +1,10 @@ // function useTestAccountAt(index = 0) { - (window as any).testAccountIndex = index + window.testAccountIndex = index } function resetTestAccount() { - delete (window as any).testAccountIndex + delete window.testAccountIndex } export { useTestAccountAt, resetTestAccount } diff --git a/src/types/definitions.d.ts b/src/types/definitions.d.ts index 56c1032bbb..e153daf512 100644 --- a/src/types/definitions.d.ts +++ b/src/types/definitions.d.ts @@ -1,8 +1,11 @@ -import Web3 from 'web3' +export {} declare global { interface Window { - web3?: Web3 - testAccountIndex?: string + ethereum?: { + autoRefreshOnNetworkChange: boolean + isMetaMask: boolean + } + testAccountIndex?: string | number } } declare module '@openzeppelin/contracts/build/contracts/ERC721' From 285ee09e3e38f2974d69cf05ed00daeb256a671b Mon Sep 17 00:00:00 2001 From: nicosampler Date: Wed, 9 Dec 2020 12:01:33 -0300 Subject: [PATCH 3/4] Silent MM warning ethereum.autoRefreshOnNetworkChange --- config/jest/Web3Mock.js | 2 +- src/index.tsx | 3 +++ src/logic/wallets/getWeb3.ts | 2 +- src/logic/wallets/store/middlewares/providerWatcher.ts | 5 +---- src/utils/mm_warnings.ts | 6 ++++++ 5 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 src/utils/mm_warnings.ts diff --git a/config/jest/Web3Mock.js b/config/jest/Web3Mock.js index 1c88c8ee75..1fc331b41e 100644 --- a/config/jest/Web3Mock.js +++ b/config/jest/Web3Mock.js @@ -1,7 +1,7 @@ import Web3 from 'web3' const window = global.window || {} -window.web3 = window.web3 || {} +window.web3 = {} window.web3.currentProvider = new Web3.providers.HttpProvider('http://localhost:8545') global.window = window diff --git a/src/index.tsx b/src/index.tsx index aad9a089d0..0e1f8204dd 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -11,6 +11,9 @@ import loadDefaultSafe from 'src/logic/safe/store/actions/loadDefaultSafe' import loadSafesFromStorage from 'src/logic/safe/store/actions/loadSafesFromStorage' import { store } from 'src/store' import { SENTRY_DSN } from './utils/constants' +import { disableMMAutoRefreshWarning } from './utils/mm_warnings' + +disableMMAutoRefreshWarning() BigNumber.set({ EXPONENTIAL_AT: [-7, 255] }) diff --git a/src/logic/wallets/getWeb3.ts b/src/logic/wallets/getWeb3.ts index 4d1a01cf8f..1427444b5e 100644 --- a/src/logic/wallets/getWeb3.ts +++ b/src/logic/wallets/getWeb3.ts @@ -35,7 +35,7 @@ const httpProviderOptions = { export const web3ReadOnly = new Web3( process.env.NODE_ENV !== 'test' ? new Web3.providers.HttpProvider(getRpcServiceUrl(), httpProviderOptions) - : window.web3?.currentProvider || 'ws://localhost:8545', + : 'ws://localhost:8545', ) let web3 = web3ReadOnly diff --git a/src/logic/wallets/store/middlewares/providerWatcher.ts b/src/logic/wallets/store/middlewares/providerWatcher.ts index fa938cf685..625ddda8f8 100644 --- a/src/logic/wallets/store/middlewares/providerWatcher.ts +++ b/src/logic/wallets/store/middlewares/providerWatcher.ts @@ -1,5 +1,5 @@ import closeSnackbar from 'src/logic/notifications/store/actions/closeSnackbar' -import { WALLET_PROVIDER, getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' +import { getProviderInfo, getWeb3 } from 'src/logic/wallets/getWeb3' import { fetchProvider } from 'src/logic/wallets/store/actions' import { ADD_PROVIDER } from 'src/logic/wallets/store/actions/addProvider' import { REMOVE_PROVIDER } from 'src/logic/wallets/store/actions/removeProvider' @@ -29,9 +29,6 @@ const providerWatcherMware = (store) => (next) => async (action) => { clearInterval(watcherInterval) } - if (currentProviderProps.name.toUpperCase() === WALLET_PROVIDER.METAMASK && (window as any).ethereum) { - ;(window as any).ethereum.autoRefreshOnNetworkChange = false - } saveToStorage(LAST_USED_PROVIDER_KEY, currentProviderProps.name) watcherInterval = setInterval(async () => { diff --git a/src/utils/mm_warnings.ts b/src/utils/mm_warnings.ts new file mode 100644 index 0000000000..aa23ab9ff5 --- /dev/null +++ b/src/utils/mm_warnings.ts @@ -0,0 +1,6 @@ +// https://docs.metamask.io/guide/ethereum-provider.html#ethereum-autorefreshonnetworkchange +export const disableMMAutoRefreshWarning = (): void => { + if (window.ethereum && window.ethereum.isMetaMask) { + window.ethereum.autoRefreshOnNetworkChange = false + } +} From 048eacee4c8ca3304a6f8934cadcafb9f1302cdb Mon Sep 17 00:00:00 2001 From: nicosampler Date: Wed, 9 Dec 2020 12:50:51 -0300 Subject: [PATCH 4/4] remove warning when requesting data from contract with null address. --- src/logic/contracts/generateBatchRequests.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/logic/contracts/generateBatchRequests.ts b/src/logic/contracts/generateBatchRequests.ts index 6a724f98c6..5c2a4128ed 100644 --- a/src/logic/contracts/generateBatchRequests.ts +++ b/src/logic/contracts/generateBatchRequests.ts @@ -57,6 +57,10 @@ const generateBatchRequests = ({ if (type !== undefined) { request = web3[type][method].request(...args, resolver) } else { + if (address === null) { + resolve() + return + } request = contractInstance.methods[method](...args).call.request(resolver) }