@ -29,11 +29,16 @@ const WalletService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispa
api . dispatch ( WalletActions . init ( ) ) ;
api . dispatch ( WalletActions . init ( ) ) ;
// set initial url
// set initial url
// TODO: validate if initial url is potentially correct
// TODO: validate if initial url is potentially correct
api . dispatch ( {
// exclude landing page url
type : WALLET . SET _INITIAL _URL ,
const { pathname } = action . payload . location ;
pathname : action . payload . location . pathname ,
const isValidPath = ! api . dispatch ( RouterActions . isLandingPageUrl ( pathname , true ) ) ;
state : { } ,
if ( isValidPath ) {
} ) ;
api . dispatch ( {
type : WALLET . SET _INITIAL _URL ,
pathname : action . payload . location . pathname ,
state : { } ,
} ) ;
}
// pass action and break process
// pass action and break process
return next ( action ) ;
return next ( action ) ;
}
}
@ -63,6 +68,29 @@ const WalletService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispa
// update common values ONLY if application is ready
// update common values ONLY if application is ready
if ( ! api . getState ( ) . wallet . ready ) return action ;
if ( ! api . getState ( ) . wallet . ready ) return action ;
// observe common values in WallerReducer
if ( ! ( await api . dispatch ( WalletActions . observe ( prevState , action ) ) ) ) {
// if "selectedDevice" didn't change observe common values in SelectedAccountReducer
if ( ! ( await api . dispatch ( SelectedAccountActions . observe ( prevState , action ) ) ) ) {
// if "selectedAccount" didn't change observe send form props changes
api . dispatch ( SendFormActions . observe ( prevState , action ) ) ;
}
} else {
// no changes in common values
if ( action . type === CONNECT . RECEIVE _WALLET _TYPE ) {
if ( action . device . state ) {
// redirect to root view (Dashboard) if device was authenticated before
api . dispatch ( RouterActions . selectFirstAvailableDevice ( true ) ) ;
}
api . dispatch ( TrezorConnectActions . authorizeDevice ( ) ) ;
}
if ( action . type === CONNECT . AUTH _DEVICE ) {
// selected device did changed
// try to restore discovery after device authentication
api . dispatch ( DiscoveryActions . restore ( ) ) ;
}
}
// double verification needed
// double verification needed
// Corner case: LOCATION_CHANGE was called but pathname didn't changed (redirection from RouterService)
// Corner case: LOCATION_CHANGE was called but pathname didn't changed (redirection from RouterService)
const prevLocation = prevState . router . location ;
const prevLocation = prevState . router . location ;
@ -96,29 +124,6 @@ const WalletService: Middleware = (api: MiddlewareAPI) => (next: MiddlewareDispa
api . dispatch ( NotificationActions . clear ( prevLocation . state , currentLocation . state ) ) ;
api . dispatch ( NotificationActions . clear ( prevLocation . state , currentLocation . state ) ) ;
}
}
// observe common values in WallerReducer
if ( ! ( await api . dispatch ( WalletActions . observe ( prevState , action ) ) ) ) {
// if "selectedDevice" didn't change observe common values in SelectedAccountReducer
if ( ! ( await api . dispatch ( SelectedAccountActions . observe ( prevState , action ) ) ) ) {
// if "selectedAccount" didn't change observe send form props changes
api . dispatch ( SendFormActions . observe ( prevState , action ) ) ;
}
} else {
// no changes in common values
if ( action . type === CONNECT . RECEIVE _WALLET _TYPE ) {
if ( action . device . state ) {
// redirect to root view (Dashboard) if device was authenticated before
api . dispatch ( RouterActions . selectFirstAvailableDevice ( true ) ) ;
}
api . dispatch ( TrezorConnectActions . authorizeDevice ( ) ) ;
}
if ( action . type === CONNECT . AUTH _DEVICE ) {
// selected device did changed
// try to restore discovery after device authentication
api . dispatch ( DiscoveryActions . restore ( ) ) ;
}
}
// even if "selectedDevice" didn't change because it was updated on DEVICE.CHANGED before DEVICE.CONNECT action
// even if "selectedDevice" didn't change because it was updated on DEVICE.CHANGED before DEVICE.CONNECT action
// try to restore discovery
// try to restore discovery
if ( action . type === DEVICE . CONNECT ) {
if ( action . type === DEVICE . CONNECT ) {