From f55e1e1d8cb498b0edb2268a5f2209552056b924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=ABck=20V=C3=A9zien?= Date: Tue, 6 Feb 2018 09:55:14 +0100 Subject: [PATCH] Add pure component on Modal --- package.json | 12 +- src/components/base/Modal/index.js | 30 ++++- src/components/modals/AddAccount/index.js | 30 ++--- src/components/modals/Receive.js | 72 ++++++----- src/components/modals/Send.js | 50 ++++---- src/components/modals/SettingsAccount.js | 112 ++++++++--------- src/renderer/events.js | 7 +- yarn.lock | 143 ++++++++++++++-------- 8 files changed, 260 insertions(+), 196 deletions(-) diff --git a/package.json b/package.json index 1fb4cf99..c65ee6b0 100644 --- a/package.json +++ b/package.json @@ -44,10 +44,10 @@ "@fortawesome/fontawesome-free-solid": "^5.0.6", "@fortawesome/react-fontawesome": "^0.0.17", "@ledgerhq/common": "2.1.3", - "@ledgerhq/hw-app-btc": "^2.1.3", - "@ledgerhq/hw-app-eth": "^2.1.3", - "@ledgerhq/hw-transport": "^2.1.3", - "@ledgerhq/hw-transport-node-hid": "^2.1.3", + "@ledgerhq/hw-app-btc": "^2.2.0", + "@ledgerhq/hw-app-eth": "^2.2.0", + "@ledgerhq/hw-transport": "^2.2.0", + "@ledgerhq/hw-transport-node-hid": "^2.2.0", "axios": "^0.17.1", "bcryptjs": "^2.4.3", "bitcoinjs-lib": "^3.3.2", @@ -70,7 +70,7 @@ "react": "^16.2.0", "react-dom": "^16.2.0", "react-i18next": "^7.3.4", - "react-mortal": "^3.1.0", + "react-mortal": "^3.2.0", "react-motion": "^0.5.2", "react-qr-reader": "^2.0.1", "react-redux": "^5.0.6", @@ -108,7 +108,7 @@ "concurrently": "^3.5.1", "dotenv": "^5.0.0", "electron": "1.7.12", - "electron-builder": "^19.55.3", + "electron-builder": "^19.56.0", "electron-devtools-installer": "^2.2.3", "electron-webpack": "1.12.1", "eslint": "^4.17.0", diff --git a/src/components/base/Modal/index.js b/src/components/base/Modal/index.js index 9843c949..e3fc6c3e 100644 --- a/src/components/base/Modal/index.js +++ b/src/components/base/Modal/index.js @@ -2,8 +2,9 @@ /* eslint-disable jsx-a11y/click-events-have-key-events */ /* eslint-disable jsx-a11y/no-static-element-interactions */ +/* eslint-disable react/no-multi-comp */ -import React, { PureComponent } from 'react' +import React, { Component, PureComponent } from 'react' import { findDOMNode } from 'react-dom' import { connect } from 'react-redux' import Mortal from 'react-mortal' @@ -31,7 +32,7 @@ const springConfig = { stiffness: 350, } -const mapStateToProps = (state, { name, isOpened }) => ({ +const mapStateToProps = (state, { name, isOpened }: { name: string, isOpened?: boolean }) => ({ isOpened: isOpened || (name && isModalOpened(state, name)), data: getModalData(state, name), }) @@ -104,11 +105,29 @@ const CloseContainer = styled(Box).attrs({ } ` +class Pure extends Component { + shouldComponentUpdate(nextProps) { + if (nextProps.isAnimated) { + return false + } + + return true + } + + render() { + const { data, onClose, render } = this.props + + return render({ data, onClose }) + } +} + export class Modal extends PureComponent { static defaultProps = { + data: undefined, + isOpened: false, onClose: noop, + onHide: noop, preventBackdropClick: false, - isOpened: false, } componentDidUpdate(prevProps: Props) { @@ -138,6 +157,7 @@ export class Modal extends PureComponent { render() { const { preventBackdropClick, isOpened, onClose, onHide, render, data } = this.props + return ( { y: spring(isVisible ? 0 : 20, springConfig), })} > - {(m, isVisible) => ( + {(m, isVisible, isAnimated) => ( @@ -158,7 +178,7 @@ export class Modal extends PureComponent { onClick={e => e.stopPropagation()} innerRef={n => (this._wrapper = n)} > - {render({ data, onClose })} + diff --git a/src/components/modals/AddAccount/index.js b/src/components/modals/AddAccount/index.js index 726f5344..e595fbc9 100644 --- a/src/components/modals/AddAccount/index.js +++ b/src/components/modals/AddAccount/index.js @@ -286,31 +286,27 @@ class AddAccountModal extends PureComponent { _timeout = undefined - renderModal = ({ onClose }) => { - const { step } = this.state - const { t } = this.props - - const Step = Steps[step] - - return ( - - - {t('addAccount.title')} - - - - ) - } - render() { const { step } = this.state + const { t } = this.props return ( { + const Step = Steps[step] + + return ( + + + {t('addAccount.title')} + + + + ) + }} /> ) } diff --git a/src/components/modals/Receive.js b/src/components/modals/Receive.js index d0b870c8..35ad6d6c 100644 --- a/src/components/modals/Receive.js +++ b/src/components/modals/Receive.js @@ -52,48 +52,52 @@ class ReceiveModal extends PureComponent { ...defaultState, }) - renderModal = ({ data, onClose }) => { + render() { const { amount } = this.state const { t } = this.props - const account = this.getAccount(data) - return ( - - - {t('receive.title')} - - - - - - {account && - account.data && ( - + { + const account = this.getAccount(data) + + return ( + + + {t('receive.title')} + - - + + + + {account && + account.data && ( + + + + + + + + )} + + - - - )} - - - - + + ) + }} + /> ) } - - render() { - return - } } export default translate()(ReceiveModal) diff --git a/src/components/modals/Send.js b/src/components/modals/Send.js index 9bd45e6f..6e5f9579 100644 --- a/src/components/modals/Send.js +++ b/src/components/modals/Send.js @@ -145,34 +145,38 @@ class Send extends PureComponent { ...defaultState, }) - renderModal = ({ data, onClose }) => { + render() { const { step } = this.state - const Step = Steps[step] - return ( - - - - - - - - + { + const Step = Steps[step] + + return ( + + + + + + + + + ) + }} + /> ) } - - render() { - return - } } export default translate()(Send) diff --git a/src/components/modals/SettingsAccount.js b/src/components/modals/SettingsAccount.js index 6c863aa5..524864d5 100644 --- a/src/components/modals/SettingsAccount.js +++ b/src/components/modals/SettingsAccount.js @@ -118,66 +118,68 @@ class SettingsAccount extends PureComponent { ...defaultState, }) - renderModal = ({ data, onClose }) => { + render() { const { editName, nameHovered } = this.state - const account = this.getAccount(data) - return ( - - - Account settings - - - - {editName ? ( -
- - - - - - - - + { + const account = this.getAccount(data) + + return ( + + + Account settings + + + + {editName ? ( + + + + + + + + + + + + ) : ( + account.name + )} - - ) : ( - account.name - )} - - {!editName && - nameHovered && ( - - + {!editName && + nameHovered && ( + + + + )} - )} -
- - - - - - - - -
- ) - } - - render() { - return ( - + + + + + + + + + + ) + }} + /> ) } } diff --git a/src/renderer/events.js b/src/renderer/events.js index a90b4310..ad91b83d 100644 --- a/src/renderer/events.js +++ b/src/renderer/events.js @@ -14,6 +14,8 @@ import { syncAccount } from 'actions/accounts' import { setUpdateStatus } from 'reducers/update' import { getAccountData, getAccounts } from 'reducers/accounts' +const { DISABLED_SYNC, DISABLED_AUTO_SYNC } = process.env + type MsgPayload = { type: string, data: any, @@ -38,7 +40,6 @@ export function sendSyncEvent(channel: string, msgType: string, data: any): any export function startSyncAccounts(accounts: Accounts) { syncAccounts = true - sendEvent('accounts', 'sync.all', { accounts: Object.entries(accounts).map(([id, account]: [string, any]) => { const currentIndex = get(account, 'data.currentIndex', 0) @@ -83,7 +84,7 @@ export default ({ store, locked }: { store: Object, locked: boolean }) => { accounts: { sync: { success: () => { - if (syncAccounts) { + if (syncAccounts && !DISABLED_AUTO_SYNC) { syncTimeout = setTimeout(() => { const accounts = getAccounts(store.getState()) startSyncAccounts(accounts) @@ -123,7 +124,7 @@ export default ({ store, locked }: { store: Object, locked: boolean }) => { // Start detection when we plug/unplug devices sendEvent('usb', 'devices.listen') - if (!locked) { + if (!locked && !DISABLED_SYNC) { const accounts = getAccounts(store.getState()) // Start accounts sync diff --git a/yarn.lock b/yarn.lock index 483db78c..20ac3b22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,6 +22,10 @@ "7zip-bin-mac" "~1.0.1" "7zip-bin-win" "~2.1.1" +"7zip-bin@~3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-3.0.0.tgz#17416dc542f41511b26a9667b92847d75ef150fe" + "7zip@0.0.6": version "0.0.6" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" @@ -142,28 +146,29 @@ redux "^3.7.2" redux-thunk "^2.2.0" -"@ledgerhq/hw-app-btc@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-2.1.3.tgz#13eb7fef76b4a1ea027d276207fd53721403fb15" +"@ledgerhq/hw-app-btc@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-btc/-/hw-app-btc-2.2.0.tgz#c5c99c8974ab8df378f773c5b03052304ce3812b" dependencies: - "@ledgerhq/hw-transport" "^2.1.3" + "@ledgerhq/hw-transport" "^2.2.0" + create-hash "^1.1.3" -"@ledgerhq/hw-app-eth@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-2.1.3.tgz#77026c248154234352747865b728e495590017c0" +"@ledgerhq/hw-app-eth@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-app-eth/-/hw-app-eth-2.2.0.tgz#e8b3591ebb24565d5bacbca5d4c2a0ab99eb965a" dependencies: - "@ledgerhq/hw-transport" "^2.1.3" + "@ledgerhq/hw-transport" "^2.2.0" -"@ledgerhq/hw-transport-node-hid@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-2.1.3.tgz#a42b6c04af54fe5659622158f9c61a2ba713422e" +"@ledgerhq/hw-transport-node-hid@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport-node-hid/-/hw-transport-node-hid-2.2.0.tgz#da24caf79401f4d3fd841a724e71928c841ae84c" dependencies: - "@ledgerhq/hw-transport" "^2.1.3" + "@ledgerhq/hw-transport" "^2.2.0" node-hid "^0.7.2" -"@ledgerhq/hw-transport@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-2.1.3.tgz#d9cca5fe70629eebd23fac5b85b8720f54d806ff" +"@ledgerhq/hw-transport@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ledgerhq/hw-transport/-/hw-transport-2.2.0.tgz#32d6374e6cfacbb4b9b0a545cdd2f6bf3d64623f" dependencies: events "^1.1.1" @@ -2057,7 +2062,25 @@ buffers@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" -builder-util-runtime@4.0.3, builder-util-runtime@^4.0.3, builder-util-runtime@~4.0.3: +builder-util-runtime@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.4.tgz#c92c352097006a07f3324ea200fa815440cba198" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.0" + sax "^1.2.4" + +builder-util-runtime@^4.0.4, builder-util-runtime@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.5.tgz#5340cf9886b9283ea6e5b20dc09b5e3e461aef62" + dependencies: + bluebird-lst "^1.0.5" + debug "^3.1.0" + fs-extra-p "^4.5.0" + sax "^1.2.4" + +builder-util-runtime@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-4.0.3.tgz#c9f1959598e3fb534cdbe9ce4160e985af11a0fe" dependencies: @@ -2066,13 +2089,33 @@ builder-util-runtime@4.0.3, builder-util-runtime@^4.0.3, builder-util-runtime@~4 fs-extra-p "^4.5.0" sax "^1.2.4" -builder-util@4.2.1, builder-util@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.2.1.tgz#ca9f0ddb5af1da5fe432129f7c6cbd447b552016" +builder-util@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.2.2.tgz#366b2bc32324bfe5565a7e4f13f86238fef5e92b" dependencies: "7zip-bin" "^2.4.1" bluebird-lst "^1.0.5" - builder-util-runtime "^4.0.3" + builder-util-runtime "^4.0.4" + chalk "^2.3.0" + debug "^3.1.0" + fs-extra-p "^4.5.0" + ini "^1.3.5" + is-ci "^1.1.0" + js-yaml "^3.10.0" + lazy-val "^1.0.3" + semver "^5.5.0" + source-map-support "^0.5.3" + stat-mode "^0.2.2" + temp-file "^3.1.1" + tunnel-agent "^0.6.0" + +builder-util@^4.2.2: + version "4.2.5" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-4.2.5.tgz#babc190e2f2c3681497632b5cc274f1543aa9264" + dependencies: + "7zip-bin" "~3.0.0" + bluebird-lst "^1.0.5" + builder-util-runtime "^4.0.5" chalk "^2.3.0" debug "^3.1.0" fs-extra-p "^4.5.0" @@ -2081,7 +2124,7 @@ builder-util@4.2.1, builder-util@^4.2.1: js-yaml "^3.10.0" lazy-val "^1.0.3" semver "^5.5.0" - source-map-support "^0.5.1" + source-map-support "^0.5.3" stat-mode "^0.2.2" temp-file "^3.1.1" tunnel-agent "^0.6.0" @@ -2683,7 +2726,7 @@ create-error-class@^3.0.0: dependencies: capture-stack-trace "^1.0.0" -create-hash@^1.1.0, create-hash@^1.1.2: +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" dependencies: @@ -3137,12 +3180,12 @@ dijkstrajs@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.1.tgz#d3cd81221e3ea40742cfcde556d4e99e98ddc71b" -dmg-builder@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-3.1.3.tgz#aa296f4be369e7ff013e67923adc70258bc0a510" +dmg-builder@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-3.1.4.tgz#57c53a2b5a1e28526a837430b6ecc7110cadcf63" dependencies: bluebird-lst "^1.0.5" - builder-util "^4.2.1" + builder-util "^4.2.2" fs-extra-p "^4.5.0" iconv-lite "^0.4.19" js-yaml "^3.10.0" @@ -3292,22 +3335,22 @@ ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" -electron-builder-lib@19.55.3: - version "19.55.3" - resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-19.55.3.tgz#06fd10374c3c2315eade512c408f857baa5921e5" +electron-builder-lib@19.56.0: + version "19.56.0" + resolved "https://registry.yarnpkg.com/electron-builder-lib/-/electron-builder-lib-19.56.0.tgz#26a6754f89c3e732afbd97868f1fc3f666884149" dependencies: "7zip-bin" "^2.4.1" asar-integrity "0.2.4" async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" - builder-util "4.2.1" - builder-util-runtime "4.0.3" + builder-util "4.2.2" + builder-util-runtime "4.0.4" chromium-pickle-js "^0.2.0" debug "^3.1.0" - dmg-builder "3.1.3" + dmg-builder "3.1.4" ejs "^2.5.7" electron-osx-sign "0.4.8" - electron-publish "19.55.2" + electron-publish "19.56.0" fs-extra-p "^4.5.0" hosted-git-info "^2.5.0" is-ci "^1.1.0" @@ -3322,15 +3365,15 @@ electron-builder-lib@19.55.3: semver "^5.5.0" temp-file "^3.1.1" -electron-builder@^19.55.3: - version "19.55.3" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.55.3.tgz#01d3070af8a2eb97d91e6d029f28104b4bf8a068" +electron-builder@^19.56.0: + version "19.56.0" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.56.0.tgz#ad5a64c73ce50b561fc8e2bcf9309de0f6ad4e5e" dependencies: bluebird-lst "^1.0.5" - builder-util "4.2.1" - builder-util-runtime "4.0.3" + builder-util "4.2.2" + builder-util-runtime "4.0.4" chalk "^2.3.0" - electron-builder-lib "19.55.3" + electron-builder-lib "19.56.0" electron-download-tf "4.3.4" fs-extra-p "^4.5.0" is-ci "^1.1.0" @@ -3392,13 +3435,13 @@ electron-osx-sign@0.4.8: minimist "^1.2.0" plist "^2.1.0" -electron-publish@19.55.2: - version "19.55.2" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.55.2.tgz#773b6d13bc11312095848c08b3287f98c91ccc7e" +electron-publish@19.56.0: + version "19.56.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-19.56.0.tgz#1a0446e69b3085a905c0abdf16125c1c97d108d9" dependencies: bluebird-lst "^1.0.5" - builder-util "^4.2.1" - builder-util-runtime "^4.0.3" + builder-util "^4.2.2" + builder-util-runtime "^4.0.4" chalk "^2.3.0" fs-extra-p "^4.5.0" mime "^2.2.0" @@ -7506,9 +7549,9 @@ react-modal@^3.1.10: prop-types "^15.5.10" warning "^3.0.0" -react-mortal@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/react-mortal/-/react-mortal-3.1.0.tgz#8dc4eaa0cf267a3614a07e8cef5e130840942fb3" +react-mortal@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-mortal/-/react-mortal-3.2.0.tgz#76f31d3e870c0c3218526f3bd9a07cbc9e66cf34" dependencies: prop-types "^15.6.0" react "^16.2.0" @@ -8461,12 +8504,6 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" -source-map-support@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.1.tgz#72291517d1fd0cb9542cee6c27520884b5da1a07" - dependencies: - source-map "^0.6.0" - source-map-support@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.2.tgz#1a6297fd5b2e762b39688c7fc91233b60984f0a5"