import React from 'react';
import * as ob from 'urbit-ob';
import * as need from './need';
import Landing from '../views/Landing';
import InviteTicket from '../views/InviteTicket';
import InvitesSend from '../views/InvitesSend.js';
import InvitesManage from '../views/InvitesManage.js';
import AcceptTransfer from '../views/AcceptTransfer';
import CancelTransfer from '../views/CancelTransfer';
import CreateGalaxy from '../views/CreateGalaxy';
import GenKeyfile from '../views/GenKeyfile';
import IssueChild from '../views/IssueChild';
import Network from '../views/Network';
import Mnemonic from '../views/Mnemonic';
import Ledger from '../views/Ledger';
import Trezor from '../views/Trezor';
import PrivateKey from '../views/PrivateKey';
import Keystore from '../views/Keystore';
import ViewPoint from '../views/ViewPoint';
import SentTransaction from '../views/SentTransaction';
import SetKeys from '../views/SetKeys';
import {
SetManagementProxy,
SetSpawnProxy,
SetTransferProxy,
} from '../views/SetProxy';
import Point from '../views/Point';
import Points from '../views/Points';
import Shards from '../views/Shards';
import Ticket from '../views/Ticket';
import Transfer from '../views/Transfer';
import Wallet from '../views/Wallet';
import { EthereumWallet } from './wallet';
import { renderNetworkType } from './network';
import { ROUTE_NAMES } from './routeNames';
const ROUTES = {
[ROUTE_NAMES.DEFAULT]: Landing,
[ROUTE_NAMES.LANDING]: Landing,
[ROUTE_NAMES.INVITE_TICKET]: InviteTicket,
[ROUTE_NAMES.INVITES_SEND]: InvitesSend,
[ROUTE_NAMES.INVITES_MANAGE]: InvitesManage,
[ROUTE_NAMES.ACCEPT_TRANSFER]: AcceptTransfer,
[ROUTE_NAMES.CANCEL_TRANSFER]: CancelTransfer,
[ROUTE_NAMES.NETWORK]: Network,
[ROUTE_NAMES.WALLET]: Wallet,
[ROUTE_NAMES.VIEW_SHIP]: ViewPoint,
[ROUTE_NAMES.MNEMONIC]: Mnemonic,
[ROUTE_NAMES.TICKET]: Ticket,
[ROUTE_NAMES.SHARDS]: Shards,
[ROUTE_NAMES.LEDGER]: Ledger,
[ROUTE_NAMES.TREZOR]: Trezor,
[ROUTE_NAMES.PRIVATE_KEY]: PrivateKey,
[ROUTE_NAMES.KEYSTORE]: Keystore,
[ROUTE_NAMES.SHIPS]: Points,
[ROUTE_NAMES.SHIP]: Point,
[ROUTE_NAMES.SET_MANAGEMENT_PROXY]: SetManagementProxy,
[ROUTE_NAMES.SET_SPAWN_PROXY]: SetSpawnProxy,
[ROUTE_NAMES.SET_TRANSFER_PROXY]: SetTransferProxy,
[ROUTE_NAMES.CREATE_GALAXY]: CreateGalaxy,
[ROUTE_NAMES.ISSUE_CHILD]: IssueChild,
[ROUTE_NAMES.SET_KEYS]: SetKeys,
[ROUTE_NAMES.TRANSFER]: Transfer,
[ROUTE_NAMES.SENT_TRANSACTION]: SentTransaction,
[ROUTE_NAMES.GEN_KEYFILE]: GenKeyfile,
};
export const getRouteBreadcrumb = ({
pointCursor,
networkType,
wallet,
}) => route => {
switch (route.name) {
case ROUTE_NAMES.INVITE_TICKET:
return 'Invite code';
case ROUTE_NAMES.INVITE_TRANSACTIONS:
return 'Setting up new wallet';
case ROUTE_NAMES.INVITES_SEND:
return 'Send invites';
case ROUTE_NAMES.INVITES_MANAGE:
return 'Manage invites';
case ROUTE_NAMES.NETWORK:
return renderNetworkType(networkType);
case ROUTE_NAMES.WALLET:
return wallet.matchWith({
Nothing: () => 'Wallet',
Just: wal =>
wal.value instanceof EthereumWallet ? (
{wal.value.address}
) : (
{wal.value.address}
),
});
case ROUTE_NAMES.MNEMONIC:
return 'Mnemonic';
case ROUTE_NAMES.TICKET:
return 'Urbit Ticket';
case ROUTE_NAMES.SHARDS:
return 'Urbit Ticket';
case ROUTE_NAMES.LEDGER:
return 'Ledger';
case ROUTE_NAMES.TREZOR:
return 'Trezor';
case ROUTE_NAMES.PRIVATE_KEY:
return 'Private Key';
case ROUTE_NAMES.KEYSTORE:
return 'Keystore File';
case ROUTE_NAMES.SHIPS:
return 'Points';
case ROUTE_NAMES.VIEW_SHIP:
return 'View';
case ROUTE_NAMES.SHIP:
return ob.patp(need.pointCursor({ pointCursor }));
case ROUTE_NAMES.SET_TRANSFER_PROXY:
case ROUTE_NAMES.SET_MANAGEMENT_PROXY:
case ROUTE_NAMES.SET_SPAWN_PROXY:
return 'Set Proxy';
case ROUTE_NAMES.CREATE_GALAXY:
return 'Create Galaxy';
case ROUTE_NAMES.ISSUE_CHILD:
return 'Issue Child';
case ROUTE_NAMES.TRANSFER:
return 'Transfer';
case ROUTE_NAMES.ACCEPT_TRANSFER:
return 'Accept Transfer';
case ROUTE_NAMES.CANCEL_TRANSFER:
return 'Cancel Transfer';
case ROUTE_NAMES.GEN_KEYFILE:
return 'Keyfile';
case ROUTE_NAMES.SET_KEYS:
return 'Configure Keys';
case ROUTE_NAMES.SENT_TRANSACTION:
return 'Txn';
case ROUTE_NAMES.LANDING:
default:
return 'Bridge';
}
};
export const router = route => ROUTES[route.name];