/** @jsx React.DOM */ /* jshint quotmark:false */ // Unleash // - Menu // - FeatureList // - UnsavedFeature // - SavedFeature // var Menu = React.createClass({ render: function() { return
; } }); var UnsavedFeature = React.createClass({ // TODO: form render: function() { return
; } }); var SavedFeature = React.createClass({ onChange: function(event) { this.props.onChange({ name: this.props.feature.name, field: 'enabled', value: event.target.checked }); }, render: function() { return (
{this.props.feature.name} {this.props.feature.strategy}
); } }); var FeatureList = React.createClass({ render: function() { var featureNodes = []; this.props.unsavedFeatures.forEach(function(feature) { featureNodes.push(); }.bind(this)); this.props.savedFeatures.forEach(function(feature) { featureNodes.push( ); }.bind(this)); return (

Features

{featureNodes}
); } }); var ErrorMessages = React.createClass({ render: function() { if (!this.props.errors.length) { return
; } var errorNodes = this.props.errors.map(function(e) { return (
  • {e}
  • ); }); return (
      {errorNodes}
    ); } }); var Unleash = React.createClass({ getInitialState: function() { return { savedFeatures: [], unsavedFeatures: [], errors: [] }; }, componentDidMount: function () { this.loadFeaturesFromServer(); setInterval(this.loadFeaturesFromServer, this.props.pollInterval); }, loadFeaturesFromServer: function () { reqwest('features').then(this.setFeatures, this.handleError); }, setFeatures: function (data) { this.setState({savedFeatures: data.features}); }, handleError: function (error) { this.state.errors.push(error); }, updateFeature: function (changeRequest) { var newFeatures = this.state.savedFeatures; newFeatures.forEach(function(f){ if(f.name === changeRequest.name) { f[changeRequest.field] = changeRequest.value; } }); this.setState({features: newFeatures}); reqwest({ url: 'features/' + changeRequest.name, method: 'patch', type: 'json', contentType: 'application/json', data: JSON.stringify(changeRequest) }).then(function() { }, this.handleError); }, createFeature: function (feature) { console.log(feature); }, render: function() { return (
    ); } }); React.renderComponent( , document.getElementById('content') );