|
@@ -1,11 +1,12 @@
|
|
|
-var cloudflare = require('../cloudflare');
|
|
|
+var DomainStore = require('../stores').Domains;
|
|
|
var React = require('react');
|
|
|
|
|
|
var CloudActive = React.createClass({
|
|
|
render: function() {
|
|
|
var record = this.props.record;
|
|
|
- if(record.type === 'A' || record.type === 'AAAA' || record.type === 'CNAME') {
|
|
|
- var active = record.service_mode === '1';
|
|
|
+ var type = record.type.val();
|
|
|
+ if(type === 'A' || type === 'AAAA' || type === 'CNAME') {
|
|
|
+ var active = record.service_mode.val() === '1';
|
|
|
if(active) {
|
|
|
return <button className='btn btn-warning' onClick={this.props.onClick}>On</button>
|
|
|
}
|
|
@@ -24,7 +25,7 @@ var RecordCreate = React.createClass({
|
|
|
},
|
|
|
types: ['A', 'AAAA', 'CNAME'],
|
|
|
finishSave: function(promise) {
|
|
|
- promise.then(this.props.onEdit).then(function() {
|
|
|
+ promise.then(function() {
|
|
|
this.setState({saving: false});
|
|
|
this.reset();
|
|
|
}.bind(this));
|
|
@@ -41,7 +42,7 @@ var RecordCreate = React.createClass({
|
|
|
name: this.refs.name.getDOMNode().value.trim(),
|
|
|
content: this.refs.value.getDOMNode().value.trim()
|
|
|
};
|
|
|
- this.finishSave(cloudflare.record_add(this.props.domain, newRecord));
|
|
|
+ this.finishSave(DomainStore.add(this.props.domain, newRecord));
|
|
|
},
|
|
|
render: function() {
|
|
|
var className = this.state.saving ? 'saving' : '';
|
|
@@ -79,40 +80,40 @@ var Record = React.createClass({
|
|
|
this.setState({state: 'view'});
|
|
|
},
|
|
|
finishSave: function(promise) {
|
|
|
- promise.then(this.props.onEdit).then(function() {
|
|
|
+ promise.then(function() {
|
|
|
this.setState({state: 'view', saving: false});
|
|
|
}.bind(this));
|
|
|
},
|
|
|
commitDelete: function() {
|
|
|
this.setState({saving: true});
|
|
|
var record = this.props.record;
|
|
|
- this.finishSave(cloudflare.record_delete(record.zone_name, record.rec_id));
|
|
|
+ this.finishSave(DomainStore.remove(record.zone_name.val(), record.rec_id.val()));
|
|
|
},
|
|
|
commitEdit: function() {
|
|
|
this.setState({saving: true});
|
|
|
var record = this.props.record;
|
|
|
var newRecord = {
|
|
|
- id: record.rec_id,
|
|
|
- type: record.type,
|
|
|
+ id: record.rec_id.val(),
|
|
|
+ type: record.type.val(),
|
|
|
name: this.refs.name.getDOMNode().value.trim(),
|
|
|
content: this.refs.value.getDOMNode().value.trim()
|
|
|
};
|
|
|
- if(record.service_mode) {
|
|
|
- newRecord.service_mode = record.service_mode;
|
|
|
+ if(record.service_mode.val()) {
|
|
|
+ newRecord.service_mode = record.service_mode.val();
|
|
|
}
|
|
|
- this.finishSave(cloudflare.record_edit(record.zone_name, newRecord));
|
|
|
+ this.finishSave(DomainStore.edit(record.zone_name.val(), newRecord));
|
|
|
},
|
|
|
toggleProxy: function() {
|
|
|
this.setState({saving: true});
|
|
|
var record = this.props.record;
|
|
|
var newRecord = {
|
|
|
- id: record.rec_id,
|
|
|
- type: record.type,
|
|
|
- name: record.name,
|
|
|
- content: record.content,
|
|
|
- service_mode: record.service_mode === "1" ? "0" : "1"
|
|
|
+ id: record.rec_id.val(),
|
|
|
+ type: record.type.val(),
|
|
|
+ name: record.name.val(),
|
|
|
+ content: record.content.val(),
|
|
|
+ service_mode: record.service_mode.val() === "1" ? "0" : "1"
|
|
|
};
|
|
|
- this.finishSave(cloudflare.record_edit(record.zone_name, newRecord));
|
|
|
+ this.finishSave(DomainStore.edit(record.zone_name.val(), newRecord));
|
|
|
},
|
|
|
render: function() {
|
|
|
var record = this.props.record;
|
|
@@ -120,9 +121,9 @@ var Record = React.createClass({
|
|
|
if(this.state.state === 'edit') {
|
|
|
return (
|
|
|
<tr className={className}>
|
|
|
- <td className="record-type"><span className={record.type}>{record.type}</span></td>
|
|
|
- <td><input type="text" ref="name" defaultValue={record.display_name} /></td>
|
|
|
- <td><input type="text" ref="value" defaultValue={record.display_content} /></td>
|
|
|
+ <td className="record-type"><span className={record.type.val()}>{record.type.val()}</span></td>
|
|
|
+ <td><input type="text" ref="name" defaultValue={record.display_name.val()} /></td>
|
|
|
+ <td><input type="text" ref="value" defaultValue={record.display_content.val()} /></td>
|
|
|
<td>
|
|
|
<a onClick={this.cancelEdit}>Cancel</a>
|
|
|
</td>
|
|
@@ -135,9 +136,9 @@ var Record = React.createClass({
|
|
|
else if(this.state.state === 'delete') {
|
|
|
return (
|
|
|
<tr className={className}>
|
|
|
- <td className="record-type"><span className={record.type}>{record.type}</span></td>
|
|
|
- <td><strong>{record.display_name}</strong></td>
|
|
|
- <td>{record.display_content}</td>
|
|
|
+ <td className="record-type"><span className={record.type.val()}>{record.type.val()}</span></td>
|
|
|
+ <td><strong>{record.display_name.val()}</strong></td>
|
|
|
+ <td>{record.display_content.val()}</td>
|
|
|
<td>
|
|
|
<a onClick={this.cancelEdit}>Cancel</a>
|
|
|
</td>
|
|
@@ -150,9 +151,9 @@ var Record = React.createClass({
|
|
|
else {
|
|
|
return (
|
|
|
<tr className={className}>
|
|
|
- <td className="record-type"><span className={record.type}>{record.type}</span></td>
|
|
|
- <td><strong>{record.display_name}</strong></td>
|
|
|
- <td className="value">{record.display_content}</td>
|
|
|
+ <td className="record-type"><span className={record.type.val()}>{record.type.val()}</span></td>
|
|
|
+ <td><strong>{record.display_name.val()}</strong></td>
|
|
|
+ <td className="value">{record.display_content.val()}</td>
|
|
|
<td><CloudActive record={record} onClick={this.toggleProxy} /></td>
|
|
|
<td className="actions">
|
|
|
<button className="btn btn-primary" onClick={this.setEditing}>Edit</button>
|
|
@@ -165,30 +166,29 @@ var Record = React.createClass({
|
|
|
}
|
|
|
});
|
|
|
var RecordList = React.createClass({
|
|
|
- getInitialState: function() {
|
|
|
- return {records: []};
|
|
|
- },
|
|
|
- componentDidMount: function() {
|
|
|
- this.reload();
|
|
|
- },
|
|
|
- componentWillReceiveProps: function(nextProps) {
|
|
|
- if(nextProps.domain != this.props.domain) {
|
|
|
- this.setState({records: []});
|
|
|
- this.reload(nextProps);
|
|
|
- }
|
|
|
- },
|
|
|
- reload: function(props) {
|
|
|
- if(!props) {
|
|
|
- props = this.props;
|
|
|
- }
|
|
|
- return cloudflare.records(props.domain).then(function(data) {
|
|
|
- this.setState({records: data.response.recs.objs});
|
|
|
- }.bind(this));
|
|
|
- },
|
|
|
render: function() {
|
|
|
- var records = this.state.records.map(function(record) {
|
|
|
- return <Record key={record.rec_id} record={record} onEdit={this.reload} />
|
|
|
+ var records = this.props.records.map(function(record) {
|
|
|
+ return <Record key={record.rec_id.val()} record={record} />
|
|
|
}.bind(this));
|
|
|
+
|
|
|
+ var body;
|
|
|
+ if(records.length === 0) {
|
|
|
+ body = (
|
|
|
+ <tbody>
|
|
|
+ <tr>
|
|
|
+ <td colspan="5">Loading...</td>
|
|
|
+ </tr>
|
|
|
+ </tbody>
|
|
|
+ );
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ body = (
|
|
|
+ <tbody>
|
|
|
+ {records}
|
|
|
+ <RecordCreate domain={this.props.domain} />
|
|
|
+ </tbody>
|
|
|
+ );
|
|
|
+ }
|
|
|
return (
|
|
|
<div id="records">
|
|
|
<table className="table">
|
|
@@ -201,10 +201,7 @@ var RecordList = React.createClass({
|
|
|
<th className="actions">Actions</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
- <tbody>
|
|
|
- <RecordCreate domain={this.props.domain} onEdit={this.reload} />
|
|
|
- {records}
|
|
|
- </tbody>
|
|
|
+ {body}
|
|
|
</table>
|
|
|
</div>
|
|
|
);
|