diff options
author | Fabio Berger <me@fabioberger.com> | 2018-11-22 05:19:31 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-11-22 05:19:31 +0800 |
commit | 83a043e6397421db0d1d5b8059341b84eeb1e1a7 (patch) | |
tree | b7685c0285283ebce73786a2e8b0ff0996eeb243 /packages/instant/src/redux | |
parent | 8175192f60e2c2827f6e7d664fbe8bf2d9ddee9c (diff) | |
parent | f46a49fd13c88dd86c9661d76bace18844642c04 (diff) | |
download | dexon-sol-tools-83a043e6397421db0d1d5b8059341b84eeb1e1a7.tar dexon-sol-tools-83a043e6397421db0d1d5b8059341b84eeb1e1a7.tar.gz dexon-sol-tools-83a043e6397421db0d1d5b8059341b84eeb1e1a7.tar.bz2 dexon-sol-tools-83a043e6397421db0d1d5b8059341b84eeb1e1a7.tar.lz dexon-sol-tools-83a043e6397421db0d1d5b8059341b84eeb1e1a7.tar.xz dexon-sol-tools-83a043e6397421db0d1d5b8059341b84eeb1e1a7.tar.zst dexon-sol-tools-83a043e6397421db0d1d5b8059341b84eeb1e1a7.zip |
Merge branch 'development'master
* development: (81 commits)
Publish
Updated CHANGELOGS
print out error message and stack
immediately return the patch incremented version if no changelog entries exist
Put python package above TS/JS packages
Reduce title size
reduce text side in README
Improve top-level README
Fix prettier
remove unused flag
Add CHANGELOG entry
Fix additional comments
Improve comments
Add migrations, contract-addresses and contract-artifacts to Developers home
Create migrations doc reference page
Add additional CHANGELOG to types package
Add CHANGELOG entry
Fix prettier
Fix `SimpleContractArtifact` type
Update abi-gen-wrappers
...
Diffstat (limited to 'packages/instant/src/redux')
-rw-r--r-- | packages/instant/src/redux/analytics_middleware.ts | 59 | ||||
-rw-r--r-- | packages/instant/src/redux/store.ts | 7 |
2 files changed, 63 insertions, 3 deletions
diff --git a/packages/instant/src/redux/analytics_middleware.ts b/packages/instant/src/redux/analytics_middleware.ts new file mode 100644 index 000000000..f971dbd33 --- /dev/null +++ b/packages/instant/src/redux/analytics_middleware.ts @@ -0,0 +1,59 @@ +import { Web3Wrapper } from '@0x/web3-wrapper'; +import * as _ from 'lodash'; +import { Middleware } from 'redux'; + +import { ETH_DECIMALS } from '../constants'; +import { Account, AccountState } from '../types'; +import { analytics } from '../util/analytics'; + +import { Action, ActionTypes } from './actions'; + +import { State } from './reducer'; + +const shouldTriggerWalletReady = (prevAccount: Account, curAccount: Account): boolean => { + const didJustTurnReady = curAccount.state === AccountState.Ready && prevAccount.state !== AccountState.Ready; + if (didJustTurnReady) { + return true; + } + + if (curAccount.state === AccountState.Ready && prevAccount.state === AccountState.Ready) { + // Account was ready, and is now ready again, but address has changed + return curAccount.address !== prevAccount.address; + } + + return false; +}; + +export const analyticsMiddleware: Middleware = store => next => middlewareAction => { + const prevState = store.getState() as State; + const prevAccount = prevState.providerState.account; + + const nextAction = next(middlewareAction) as Action; + + const curState = store.getState() as State; + const curAccount = curState.providerState.account; + + switch (nextAction.type) { + case ActionTypes.SET_ACCOUNT_STATE_READY: + if (curAccount.state === AccountState.Ready && shouldTriggerWalletReady(prevAccount, curAccount)) { + const ethAddress = curAccount.address; + analytics.addUserProperties({ ethAddress }); + analytics.trackWalletReady(); + } + break; + case ActionTypes.UPDATE_ACCOUNT_ETH_BALANCE: + if ( + curAccount.state === AccountState.Ready && + curAccount.ethBalanceInWei && + !_.isEqual(curAccount, prevAccount) + ) { + const ethBalanceInUnitAmount = Web3Wrapper.toUnitAmount( + curAccount.ethBalanceInWei, + ETH_DECIMALS, + ).toString(); + analytics.addUserProperties({ ethBalanceInUnitAmount }); + } + } + + return nextAction; +}; diff --git a/packages/instant/src/redux/store.ts b/packages/instant/src/redux/store.ts index 20710765d..11bba3876 100644 --- a/packages/instant/src/redux/store.ts +++ b/packages/instant/src/redux/store.ts @@ -1,7 +1,8 @@ import * as _ from 'lodash'; -import { createStore, Store as ReduxStore } from 'redux'; -import { devToolsEnhancer } from 'redux-devtools-extension/developmentOnly'; +import { applyMiddleware, createStore, Store as ReduxStore } from 'redux'; +import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly'; +import { analyticsMiddleware } from './analytics_middleware'; import { createReducer, State } from './reducer'; export type Store = ReduxStore<State>; @@ -9,6 +10,6 @@ export type Store = ReduxStore<State>; export const store = { create: (initialState: State): Store => { const reducer = createReducer(initialState); - return createStore(reducer, initialState, devToolsEnhancer({})); + return createStore(reducer, initialState, composeWithDevTools(applyMiddleware(analyticsMiddleware))); }, }; |