mirror of
https://github.com/trezor/trezor-wallet
synced 2024-11-28 03:08:30 +00:00
share router patterns between ./src/view/index and RouteActions
This commit is contained in:
parent
3a783ce38b
commit
012e222c25
@ -1,6 +1,7 @@
|
|||||||
/* @flow */
|
/* @flow */
|
||||||
|
|
||||||
import { push } from 'react-router-redux';
|
import { push, LOCATION_CHANGE } from 'react-router-redux';
|
||||||
|
import { routes } from 'support/routes';
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
RouterLocationState,
|
RouterLocationState,
|
||||||
@ -80,18 +81,10 @@ export const paramsValidation = (params: RouterLocationState): PayloadAction<boo
|
|||||||
* Filters unrecognized fields and sorting in correct order
|
* Filters unrecognized fields and sorting in correct order
|
||||||
*/
|
*/
|
||||||
export const paramsToPath = (params: RouterLocationState): PayloadAction<?string> => (dispatch: Dispatch, getState: GetState): ?string => {
|
export const paramsToPath = (params: RouterLocationState): PayloadAction<?string> => (dispatch: Dispatch, getState: GetState): ?string => {
|
||||||
// TODO: share this patterns with /views/index.js
|
// get patterns (fields) from routes and sort them by complexity
|
||||||
const patterns: Array<Array<string>> = [
|
const patterns: Array<Array<string>> = routes.map(r => r.fields).sort((a, b) => {
|
||||||
['device', 'settings'],
|
return a.length > b.length ? -1 : 1;
|
||||||
['device', 'bootloader'],
|
});
|
||||||
['device', 'initialize'],
|
|
||||||
['device', 'acquire'],
|
|
||||||
['device', 'unreadable'],
|
|
||||||
['device', 'network', 'account', 'send'],
|
|
||||||
['device', 'network', 'account', 'receive'],
|
|
||||||
['device', 'network', 'account'],
|
|
||||||
['device']
|
|
||||||
];
|
|
||||||
|
|
||||||
// find pattern
|
// find pattern
|
||||||
const keys: Array<string> = Object.keys(params);
|
const keys: Array<string> = Object.keys(params);
|
||||||
@ -292,6 +285,21 @@ export const gotoDeviceSettings = (device: TrezorDevice): ThunkAction => (dispat
|
|||||||
* Try to redirect to initial url
|
* Try to redirect to initial url
|
||||||
*/
|
*/
|
||||||
export const setInitialUrl = (): PayloadAction<boolean> => (dispatch: Dispatch, getState: GetState): boolean => {
|
export const setInitialUrl = (): PayloadAction<boolean> => (dispatch: Dispatch, getState: GetState): boolean => {
|
||||||
// TODO
|
const { initialPathname } = getState().wallet;
|
||||||
|
if (typeof initialPathname === 'string' && !dispatch(isLandingPageUrl(initialPathname))) {
|
||||||
|
const valid = dispatch( getValidUrl({
|
||||||
|
type: LOCATION_CHANGE,
|
||||||
|
payload: {
|
||||||
|
pathname: initialPathname,
|
||||||
|
hash: "",
|
||||||
|
search: "",
|
||||||
|
state: {}
|
||||||
|
}
|
||||||
|
}) );
|
||||||
|
if (valid === initialPathname) {
|
||||||
|
dispatch( goto(valid) );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
94
src/support/routes.js
Normal file
94
src/support/routes.js
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/* @flow */
|
||||||
|
|
||||||
|
export type Route = {
|
||||||
|
+name: string;
|
||||||
|
+pattern: string;
|
||||||
|
fields: Array<string>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const routes: Array<Route> = [
|
||||||
|
{
|
||||||
|
name: 'landing-home',
|
||||||
|
pattern: '/',
|
||||||
|
fields: []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'landing-bridge',
|
||||||
|
pattern: '/bridge',
|
||||||
|
fields: ['bridge']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'landing-import',
|
||||||
|
pattern: '/import',
|
||||||
|
fields: ['import']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-setting',
|
||||||
|
pattern: '/settings',
|
||||||
|
fields: ['settings']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-acquire',
|
||||||
|
pattern: '/device/:device/acquire',
|
||||||
|
fields: ['device', 'acquire']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-unreadable',
|
||||||
|
pattern: '/device/:device/unreadable',
|
||||||
|
fields: ['device', 'unreadable']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-bootloader',
|
||||||
|
pattern: '/device/:device/bootloader',
|
||||||
|
fields: ['device', 'bootloader']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-initialize',
|
||||||
|
pattern: '/device/:device/initialize',
|
||||||
|
fields: ['device', 'initialize']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-device-settings',
|
||||||
|
pattern: '/device/:device/settings',
|
||||||
|
fields: ['device', 'settings']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-dashboard',
|
||||||
|
pattern: '/device/:device',
|
||||||
|
fields: ['device']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-account-summary',
|
||||||
|
pattern: '/device/:device/network/:network/account/:account',
|
||||||
|
fields: ['device', 'network', 'account']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-account-send',
|
||||||
|
pattern: '/device/:device/network/:network/account/:account/send',
|
||||||
|
fields: ['device', 'network', 'account', 'send']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-account-send-override',
|
||||||
|
pattern: '/device/:device/network/:network/account/:account/send/override',
|
||||||
|
fields: ['device', 'network', 'account', 'send']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-account-receive',
|
||||||
|
pattern: '/device/:device/network/:network/account/:account/receive',
|
||||||
|
fields: ['device', 'network', 'account', 'receive']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'wallet-account-signverify',
|
||||||
|
pattern: '/device/:device/network/:network/account/:account/signverify',
|
||||||
|
fields: ['device', 'network', 'account', 'signverify']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
export const getPattern = (name: string): string => {
|
||||||
|
const entry = routes.find(r => r.name === name);
|
||||||
|
if (!entry) {
|
||||||
|
console.error(`Route for ${ name } not found`);
|
||||||
|
return '/';
|
||||||
|
}
|
||||||
|
return entry.pattern;
|
||||||
|
}
|
@ -6,6 +6,7 @@ import { ConnectedRouter } from 'react-router-redux';
|
|||||||
|
|
||||||
// general
|
// general
|
||||||
import ErrorBoundary from 'support/ErrorBoundary';
|
import ErrorBoundary from 'support/ErrorBoundary';
|
||||||
|
import { getPattern } from 'support/routes';
|
||||||
import LandingContainer from 'views/Landing/Container';
|
import LandingContainer from 'views/Landing/Container';
|
||||||
|
|
||||||
// wallet views
|
// wallet views
|
||||||
@ -29,25 +30,24 @@ const App = () => (
|
|||||||
<Provider store={store}>
|
<Provider store={store}>
|
||||||
<ConnectedRouter history={history}>
|
<ConnectedRouter history={history}>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route exact path="/" component={LandingContainer} />
|
<Route exact path={ getPattern('landing-home') } component={LandingContainer} />
|
||||||
<Route exact path="/bridge" component={LandingContainer} />
|
<Route exact path={ getPattern('landing-bridge') } component={LandingContainer} />
|
||||||
<Route exact path="/import" component={LandingContainer} />
|
<Route exact path={ getPattern('landing-import') } component={LandingContainer} />
|
||||||
<Route>
|
<Route>
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<WalletContainer>
|
<WalletContainer>
|
||||||
<Route exact path="/settings" component={WalletSettings} />
|
<Route exact path={ getPattern('wallet-setting') } component={WalletSettings} />
|
||||||
<Route exact path="/device/:device/" component={WalletDashboard} />
|
<Route exact path={ getPattern('wallet-dashboard') } component={WalletDashboard} />
|
||||||
<Route exact path="/device/:device/network/:network" component={WalletDashboard} />
|
<Route exact path={ getPattern('wallet-acquire') } component={WalletAcquire} />
|
||||||
<Route exact path="/device/:device/acquire" component={WalletAcquire} />
|
<Route exact path={ getPattern('wallet-unreadable') } component={WalletUnreadableDevice} />
|
||||||
<Route exact path="/device/:device/unreadable" component={WalletUnreadableDevice} />
|
<Route exact path={ getPattern('wallet-bootloader') } component={WalletBootloader} />
|
||||||
<Route exact path="/device/:device/bootloader" component={WalletBootloader} />
|
<Route exact path={ getPattern('wallet-initialize') } component={WalletInitialize} />
|
||||||
<Route exact path="/device/:device/initialize" component={WalletInitialize} />
|
<Route exact path={ getPattern('wallet-device-settings') } component={WalletDeviceSettings} />
|
||||||
<Route exact path="/device/:device/settings" component={WalletDeviceSettings} />
|
<Route exact path={ getPattern('wallet-account-summary') } component={AccountSummary} />
|
||||||
<Route exact path="/device/:device/network/:network/account/:account" component={AccountSummary} />
|
<Route path={ getPattern('wallet-account-send') } component={AccountSend} />
|
||||||
<Route path="/device/:device/network/:network/account/:account/send" component={AccountSend} />
|
<Route path={ getPattern('wallet-account-send-override') } component={AccountSend} />
|
||||||
<Route path="/device/:device/network/:network/account/:account/send/override" component={AccountSend} />
|
<Route path={ getPattern('wallet-account-receive') } component={AccountReceive} />
|
||||||
<Route path="/device/:device/network/:network/account/:account/receive" component={AccountReceive} />
|
<Route path={ getPattern('wallet-account-signverify') } component={AccountSignVerify} />
|
||||||
<Route path="/device/:device/network/:network/account/:account/signverify" component={AccountSignVerify} />
|
|
||||||
</WalletContainer>
|
</WalletContainer>
|
||||||
</ErrorBoundary>
|
</ErrorBoundary>
|
||||||
</Route>
|
</Route>
|
||||||
|
Loading…
Reference in New Issue
Block a user