1
0
mirror of https://github.com/fazo96/ipfs-boards synced 2025-01-10 12:24:20 +01:00
ipfs-boards/webapp/components/settings.jsx
2015-11-21 17:06:14 +01:00

67 lines
2.3 KiB
JavaScript

var React = require('react')
var Icon = require('icon.jsx')
module.exports = function(boards){
return React.createClass({
getDefaults: function(){
return { addr: 'localhost', port: 5001 }
},
getInitialState: function(){
var s = localStorage.getItem('ipfs-boards-settings')
var obj = this.getDefaults()
try {
obj = JSON.parse(s)
} catch(e){
localStorage.removeItem('ipfs-boards-settings')
}
return obj || this.getDefaults()
},
save: function(){
if(isNaN(this.state.port) || parseInt(this.state.port) > 65535 || parseInt(this.state.port) < 1){
alert('Port number invalid')
} else {
localStorage.setItem('ipfs-boards-settings',JSON.stringify({
addr: this.state.addr,
port: parseInt(this.state.port)
}))
alert('Saved')
}
},
setDefaults: function(){
this.setState(this.getDefaults())
},
onChange: function(event){
if(event.target.id === 'nodeAddress'){
this.setState({ addr: event.target.value })
} else {
this.setState({ port: event.target.value })
}
},
render: function(){
return (
<div className="settings">
<h2><Icon name="cog"/> Settings</h2>
<h5>Choose how the prototype connects to IPFS</h5>
<p>In the future, this won't be necessary because IPFS will run in your browser.</p>
<p>All settings are saved in your browser's localStorage.</p>
<div className="row">
<div className="six columns">
<label htmlFor="nodeAddress">IPFS Node</label>
<input className="u-full-width" type="text" id="nodeAddress" value={this.state.addr} onChange={this.onChange} placeholder="localhost" />
</div>
<div className="six columns">
<label htmlFor="nodePort">API Port</label>
<input className="u-full-width" type="text" id="nodePort" value={this.state.port} onChange={this.onChange} placeholder="5001" />
</div>
</div>
<div className="buttons">
<button className="button button-primary" onClick={this.save}>Save</button>
<button className="button not-first" onClick={this.setDefaults}>Defaults</button>
</div>
</div>
)
}
})
}