1
0
mirror of https://github.com/trezor/trezor-wallet synced 2024-12-25 00:18:07 +00:00

fix for ACCOUNT.DISPOSE action called + few actions moved from RouterService

This commit is contained in:
Szymon Lesisz 2018-09-20 20:26:58 +02:00
parent ae9b12f35d
commit 13a9e47c73
2 changed files with 52 additions and 26 deletions

View File

@ -48,10 +48,6 @@ export const updateSelectedValues = (prevState: State, action: Action): AsyncAct
|| prevState.discovery !== state.discovery
|| prevState.tokens !== state.tokens
|| prevState.pending !== state.pending) {
if (locationChange) {
// dispose current account view
dispatch(dispose());
}
const account = stateUtils.getSelectedAccount(state);
const network = stateUtils.getSelectedNetwork(state);

View File

@ -4,9 +4,11 @@
import { DEVICE } from 'trezor-connect';
import { LOCATION_CHANGE } from 'react-router-redux';
import * as WALLET from 'actions/constants/wallet';
import * as CONNECT from 'actions/constants/TrezorConnect';
import * as WalletActions from 'actions/WalletActions';
import * as RouterActions from 'actions/RouterActions';
import * as NotificationActions from 'actions/NotificationActions';
import * as LocalStorageActions from 'actions/LocalStorageActions';
import * as TrezorConnectActions from 'actions/TrezorConnectActions';
import * as SelectedAccountActions from 'actions/SelectedAccountActions';
@ -30,41 +32,69 @@ const WalletService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispa
const { location } = api.getState().router;
if (!location) {
api.dispatch(WalletActions.init());
return next(action);
}
}
if (action.type === WALLET.SET_INITIAL_URL) {
// load data from config.json and local storage
api.dispatch(LocalStorageActions.loadData());
}
// pass action
next(action);
if (action.type === DEVICE.CONNECT) {
api.dispatch(WalletActions.clearUnavailableDevicesData(prevState, action.device));
switch (action.type) {
case WALLET.SET_INITIAL_URL:
api.dispatch(LocalStorageActions.loadData());
break;
case WALLET.SET_SELECTED_DEVICE: {
if (action.device) {
// try to authorize device
api.dispatch(TrezorConnectActions.getSelectedDeviceState());
} else {
// try select different device
api.dispatch(RouterActions.selectFirstAvailableDevice());
}
}
break;
case DEVICE.CONNECT:
api.dispatch(WalletActions.clearUnavailableDevicesData(prevState, action.device));
break;
default: {
break;
}
}
// update common values ONLY if application is ready
if (api.getState().wallet.ready) {
// update common values in WallerReducer
api.dispatch(WalletActions.updateSelectedValues(prevState, action));
if (!api.getState().wallet.ready) return action;
// update common values in SelectedAccountReducer
api.dispatch(SelectedAccountActions.updateSelectedValues(prevState, action));
}
// handle selected device change
if (action.type === WALLET.SET_SELECTED_DEVICE) {
if (action.device) {
// try to authorize device
api.dispatch(TrezorConnectActions.getSelectedDeviceState());
} else {
// try select different device
api.dispatch(RouterActions.selectFirstAvailableDevice());
// double verification needed
// Corner case: LOCATION_CHANGE was called but pathname didn't changed (redirection in RouterService)
const prevLocation = prevState.router.location;
const currentLocation = api.getState().router.location;
if (locationChange && prevLocation.pathname !== currentLocation.pathname) {
// watch for coin change
if (prevLocation.state.network !== currentLocation.state.network) {
api.dispatch({
type: CONNECT.COIN_CHANGED,
payload: {
network: currentLocation.state.network,
},
});
}
// watch for account change
if (prevLocation.state.account !== currentLocation.state.account) {
api.dispatch(SelectedAccountActions.dispose());
}
// clear notifications
api.dispatch(NotificationActions.clear(prevLocation.state, currentLocation.state));
}
// update common values in WallerReducer
api.dispatch(WalletActions.updateSelectedValues(prevState, action));
// update common values in SelectedAccountReducer
api.dispatch(SelectedAccountActions.updateSelectedValues(prevState, action));
return action;
};