import * as ob from 'urbit-ob'
import React from 'react';
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 Landing from '../views/Landing'
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 { addressFromSecp256k1Public, EthereumWallet } from './wallet'
import { renderNetworkType } from './network'
import { BRIDGE_ERROR } from './error'
const ROUTE_NAMES = {
ACCEPT_TRANSFER: Symbol('ACCEPT_TRANSFER'),
CANCEL_TRANSFER: Symbol('CANCEL_TRANSFER'),
LANDING: Symbol('LANDING'),
NETWORK: Symbol('NETWORK'),
WALLET: Symbol('WALLET'),
MNEMONIC: Symbol('MNEMONIC'),
TICKET: Symbol('TICKET'),
SHARDS: Symbol('SHARDS'),
LEDGER: Symbol('LEDGER'),
TREZOR: Symbol('TREZOR'),
PRIVATE_KEY: Symbol('PRIVATE_KEY'),
KEYSTORE: Symbol('KEYSTORE'),
VIEW_SHIP: Symbol('VIEW_SHIP'),
SHIPS: Symbol('SHIPS'),
SHIP: Symbol('SHIP'),
SET_MANAGEMENT_PROXY: Symbol('SET_MANAGEMENT_PROXY'),
SET_SPAWN_PROXY: Symbol('SET_SPAWN_PROXY'),
SET_TRANSFER_PROXY: Symbol('SET_TRANSFER_PROXY'),
CREATE_GALAXY: Symbol('CREATE_GALAXY'),
ISSUE_CHILD: Symbol('ISSUE_CHILD'),
SET_KEYS: Symbol('SET_KEYS'),
TRANSFER: Symbol('TRANSFER'),
SENT_TRANSACTION: Symbol('SENT_TRANSACTION'),
GEN_KEYFILE: Symbol('GEN_KEYFILE'),
DEFAULT: Symbol('DEFAULT')
}
const createRoutes = () => {
const routes = {}
routes[ROUTE_NAMES.ACCEPT_TRANSFER] = AcceptTransfer
routes[ROUTE_NAMES.CANCEL_TRANSFER] = CancelTransfer
routes[ROUTE_NAMES.LANDING] = Landing
routes[ROUTE_NAMES.NETWORK] = Network
routes[ROUTE_NAMES.WALLET] = Wallet
routes[ROUTE_NAMES.VIEW_SHIP] = ViewPoint
routes[ROUTE_NAMES.MNEMONIC] = Mnemonic
routes[ROUTE_NAMES.TICKET] = Ticket
routes[ROUTE_NAMES.SHARDS] = Shards
routes[ROUTE_NAMES.LEDGER] = Ledger
routes[ROUTE_NAMES.TREZOR] = Trezor
routes[ROUTE_NAMES.PRIVATE_KEY] = PrivateKey
routes[ROUTE_NAMES.KEYSTORE] = Keystore
routes[ROUTE_NAMES.SHIPS] = Points
routes[ROUTE_NAMES.SHIP] = Point
routes[ROUTE_NAMES.SET_MANAGEMENT_PROXY] = SetManagementProxy
routes[ROUTE_NAMES.SET_SPAWN_PROXY] = SetSpawnProxy
routes[ROUTE_NAMES.SET_TRANSFER_PROXY] = SetTransferProxy
routes[ROUTE_NAMES.CREATE_GALAXY] = CreateGalaxy
routes[ROUTE_NAMES.ISSUE_CHILD] = IssueChild
routes[ROUTE_NAMES.SET_KEYS] = SetKeys
routes[ROUTE_NAMES.TRANSFER] = Transfer
routes[ROUTE_NAMES.SENT_TRANSACTION] = SentTransaction
routes[ROUTE_NAMES.DEFAULT] = Landing
routes[ROUTE_NAMES.GEN_KEYFILE] = GenKeyfile
return routes
}
const ROUTES = createRoutes()
const renderRoute = (props, route) => {
const { wallet, networkType, pointCursor } = props
return (
route === ROUTE_NAMES.LANDING
? 'Bridge'
: route === ROUTE_NAMES.NETWORK
? `${renderNetworkType(networkType)}`
: route === ROUTE_NAMES.WALLET
? wallet.matchWith({
Nothing: () => 'Wallet',
Just: (wal) =>
wal.value instanceof EthereumWallet
? ({wal.value.address})
: ({addressFromSecp256k1Public(wal.value.publicKey)})
})
: route === ROUTE_NAMES.MNEMONIC
? 'Mnemonic'
: route === ROUTE_NAMES.TICKET
? 'Urbit Ticket'
: route === ROUTE_NAMES.SHARDS
? 'Urbit Ticket'
: route === ROUTE_NAMES.LEDGER
? 'Ledger'
: route === ROUTE_NAMES.TREZOR
? 'Trezor'
: route === ROUTE_NAMES.PRIVATE_KEY
? 'Private Key'
: route === ROUTE_NAMES.KEYSTORE
? 'Keystore File'
: route === ROUTE_NAMES.SHIPS
? 'Points'
: route === ROUTE_NAMES.VIEW_SHIP
? 'View'
: route === ROUTE_NAMES.SHIP
? pointCursor.matchWith({
Just: (cursor) => ob.patp(cursor.value),
Nothing: () => {
throw BRIDGE_ERROR.MISSING_POINT
}
})
: route === ROUTE_NAMES.SET_TRANSFER_PROXY
|| route === ROUTE_NAMES.SET_MANAGEMENT_PROXY
|| route === ROUTE_NAMES.SET_SPAWN_PROXY
? 'Set Proxy'
: route === ROUTE_NAMES.CREATE_GALAXY
? 'Create Galaxy'
: route === ROUTE_NAMES.ISSUE_CHILD
? 'Issue Child'
: route === ROUTE_NAMES.TRANSFER
? 'Transfer'
: route === ROUTE_NAMES.ACCEPT_TRANSFER
? 'Accept Transfer'
: route === ROUTE_NAMES.CANCEL_TRANSFER
? 'Cancel Transfer'
: route === ROUTE_NAMES.GEN_KEYFILE
? 'Keyfile'
: route === ROUTE_NAMES.SET_KEYS
? 'Configure Keys'
: route === ROUTE_NAMES.SENT_TRANSACTION
? 'Txn'
: 'Bridge'
)
}
const router = (route) =>
ROUTES[route]
export {
ROUTE_NAMES,
router,
renderRoute
}