1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/app/config.js
Dan Finlay d8bee4f599 Make default providers more easiliy configurable for metamask devs
No longer do our `mainnet` and `testnet` buttons set specific RPC urls. Now they set `provider.type`, which gets interpreted with code.

Currently the provider types of `mainnet` and `testnet` point to our new scalable backends, but these could be re-interpreted to use any other provider, be it etherscan, peer to peer, or otherwise.

Makes it easier for us to upgrade our infrastructure without incorporating migration logic into the program.
2016-05-10 15:37:13 -07:00

148 lines
3.7 KiB
JavaScript

const inherits = require('util').inherits
const Component = require('react').Component
const h = require('react-hyperscript')
const connect = require('react-redux').connect
const actions = require('./actions')
module.exports = connect(mapStateToProps)(ConfigScreen)
function mapStateToProps(state) {
return {
rpc: state.metamask.rpcTarget,
metamask: state.metamask,
}
}
inherits(ConfigScreen, Component)
function ConfigScreen() {
Component.call(this)
}
ConfigScreen.prototype.render = function() {
var state = this.props
var rpc = state.rpc
var metamaskState = state.metamask
return (
h('.flex-column.flex-grow', [
// subtitle and nav
h('.section-title.flex-row.flex-center', [
h('i.fa.fa-arrow-left.fa-lg.cursor-pointer', {
onClick: (event) => {
state.dispatch(actions.goHome())
}
}),
h('h2.page-subtitle', 'Configuration'),
]),
// conf view
h('.flex-column.flex-justify-center.flex-grow.select-none', [
h('.flex-space-around', {
style: {
padding: '20px',
}
}, [
currentProviderDisplay(metamaskState),
h('div', { style: {display: 'flex'} }, [
h('input#new_rpc', {
placeholder: 'New RPC URL',
style: {
width: 'inherit',
flex: '1 0 auto',
height: '30px',
margin: '8px',
},
onKeyPress(event) {
if (event.key === 'Enter') {
var element = event.target
var newRpc = element.value
state.dispatch(actions.setRpcTarget(newRpc))
}
}
}),
h('button', {
style: {
alignSelf: 'center',
},
onClick(event) {
event.preventDefault()
var element = document.querySelector('input#new_rpc')
var newRpc = element.value
state.dispatch(actions.setRpcTarget(newRpc))
}
}, 'Save')
]),
h('div', [
h('button', {
style: {
alignSelf: 'center',
},
onClick(event) {
event.preventDefault()
state.dispatch(actions.setProviderType('mainnet'))
}
}, 'Use Main Network')
]),
h('div', [
h('button', {
style: {
alignSelf: 'center',
},
onClick(event) {
event.preventDefault()
state.dispatch(actions.setProviderType('testnet'))
}
}, 'Use Morden Test Network')
]),
h('div', [
h('button', {
style: {
alignSelf: 'center',
},
onClick(event) {
event.preventDefault()
state.dispatch(actions.setRpcTarget('http://localhost:8545/'))
}
}, 'Use http://localhost:8545')
]),
]),
]),
])
)
}
function currentProviderDisplay(metamaskState) {
var provider = metamaskState.provider
var title, value
switch (provider.type) {
case 'mainnet':
title = 'Current Network'
value = 'Main Ethereum Network'
break
case 'testnet':
title = 'Current Network'
value = 'Morden Test Network'
break
default:
title = 'Current RPC'
value = metamaskState.provider.rpcTarget
}
return h('div', [
h('span', {style: { fontWeight: 'bold', paddingRight: '10px'}}, title),
h('span', value)
])
}