mirror of
https://github.com/fazo96/ipfs-boards
synced 2025-01-10 12:24:20 +01:00
81 lines
2.9 KiB
JavaScript
81 lines
2.9 KiB
JavaScript
var React = require('react')
|
|
var Icon = require('icon.jsx')
|
|
|
|
module.exports = function (boardsAPI) {
|
|
return React.createClass({
|
|
getDefaults: function () {
|
|
return { addr: 'localhost', port: 5001, api: false }
|
|
},
|
|
getInitialState: function () {
|
|
boardsAPI.use(boards => {
|
|
if (boards.isInit && this.isMounted()) this.setState({ api: true })
|
|
boards.getEventEmitter().on('init', err => {
|
|
if (!err && this.isMounted()) this.setState({ api: true })
|
|
})
|
|
})
|
|
var s = window.localStorage.getItem('ipfs-boards-settings')
|
|
var obj = this.getDefaults()
|
|
try {
|
|
obj = JSON.parse(s)
|
|
} catch (e) {
|
|
window.localStorage.removeItem('ipfs-boards-settings')
|
|
}
|
|
return obj || this.getDefaults()
|
|
},
|
|
save: function () {
|
|
if (isNaN(this.state.port) || parseInt(this.state.port, 10) > 65535 || parseInt(this.state.port, 10) < 1) {
|
|
window.alert('Port number invalid')
|
|
} else {
|
|
window.localStorage.setItem('ipfs-boards-settings', JSON.stringify({
|
|
addr: this.state.addr,
|
|
port: parseInt(this.state.port, 10)
|
|
}))
|
|
window.location.reload(false)
|
|
}
|
|
},
|
|
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 })
|
|
}
|
|
},
|
|
isOK: function () {
|
|
if (this.state.api) {
|
|
return <div className="itsok light">
|
|
<h5><Icon name="check" /> It's OK</h5>
|
|
<p>You're connected to IPFS</p>
|
|
</div>
|
|
}
|
|
},
|
|
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>
|
|
{this.isOK()}
|
|
<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>
|
|
)
|
|
}
|
|
})
|
|
}
|