1
0
mirror of https://github.com/trezor/trezor-wallet synced 2024-11-24 09:18:09 +00:00

added WalletService to middlewares

This commit is contained in:
Szymon Lesisz 2018-05-22 19:42:03 +02:00
parent ed23b859a8
commit e5bdadfcb2
4 changed files with 81 additions and 9 deletions

View File

@ -22,4 +22,4 @@ if (typeof module !== undefined && module.hasOwnProperty('hot')) {
module.hot.accept(); module.hot.accept();
} }
// Application life cycle starts in ./services/LocalStorageService.js // Application life cycle starts in ./services/WalletService.js

View File

@ -89,14 +89,14 @@ const save = (dispatch: Dispatch, getState: GetState): void => {
const LocalStorageService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispatch) => (action: Action): Action => { const LocalStorageService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispatch) => (action: Action): Action => {
// Application live cycle starts here // Application live cycle starts here
if (action.type === LOCATION_CHANGE) { // if (action.type === LOCATION_CHANGE) {
const { location } = api.getState().router; // const { location } = api.getState().router;
if (!location) { // if (!location) {
api.dispatch( WalletActions.init() ); // api.dispatch( WalletActions.init() );
// load data from config.json and local storage // // load data from config.json and local storage
api.dispatch( LocalStorageActions.loadData() ); // api.dispatch( LocalStorageActions.loadData() );
} // }
} // }
next(action); next(action);

View File

@ -0,0 +1,70 @@
/* @flow */
'use strict';
import { LOCATION_CHANGE } from 'react-router-redux';
import * as WALLET from '../actions/constants/wallet';
import * as WalletActions from '../actions/WalletActions';
import * as LocalStorageActions from '../actions/LocalStorageActions';
import type {
Middleware,
MiddlewareAPI,
MiddlewareDispatch,
State,
Dispatch,
Action,
GetState,
TrezorDevice,
} from '~/flowtype';
const getSelectedDevice = (state: State): ?TrezorDevice => {
const locationState = state.router.location.state;
if (!locationState.device) return null;
const instance: ?number = locationState.deviceInstance ? parseInt(locationState.deviceInstance) : undefined;
return state.connect.devices.find(d => d.features && d.features.device_id === locationState.device && d.instance === instance);
}
/**
* Middleware
*/
const WalletService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispatch) => (action: Action): Action => {
const prevState = api.getState();
const locationChange: boolean = action.type === LOCATION_CHANGE;
// Application live cycle starts here
if (locationChange) {
const { location } = api.getState().router;
if (!location) {
api.dispatch( WalletActions.init() );
// load data from config.json and local storage
api.dispatch( LocalStorageActions.loadData() );
}
}
// pass action
next(action);
const state = api.getState();
// listening devices state change
if (locationChange || prevState.connect.devices !== state.connect.devices) {
const device = getSelectedDevice(state);
if (state.wallet.selectedDevice !== device) {
console.warn("UPDATE SELECTED DEVICE!", state.router.location.state)
api.dispatch({
type: WALLET.SET_SELECTED_DEVICE,
device
})
}
}
return action;
};
export default WalletService;

View File

@ -1,6 +1,7 @@
/* @flow */ /* @flow */
'use strict'; 'use strict';
import WalletService from './WalletService';
import LogService from './LogService'; import LogService from './LogService';
import RouterService from './RouterService'; import RouterService from './RouterService';
import LocalStorageService from './LocalStorageService'; import LocalStorageService from './LocalStorageService';
@ -9,6 +10,7 @@ import CoinmarketcapService from './CoinmarketcapService';
import TrezorConnectService from './TrezorConnectService'; import TrezorConnectService from './TrezorConnectService';
export default [ export default [
WalletService,
LogService, LogService,
RouterService, RouterService,
LocalStorageService, LocalStorageService,