diff --git a/unleash-server/public/index.html b/unleash-server/public/index.html index fec195fd71..71bd6165a3 100644 --- a/unleash-server/public/index.html +++ b/unleash-server/public/index.html @@ -9,7 +9,7 @@ - + @@ -27,4 +27,4 @@ - \ No newline at end of file + diff --git a/unleash-server/public/js/unleash.jsx b/unleash-server/public/js/unleash.jsx index 42c4681bbe..a4bcb7cf10 100644 --- a/unleash-server/public/js/unleash.jsx +++ b/unleash-server/public/js/unleash.jsx @@ -1,217 +1,51 @@ /** @jsx React.DOM */ /* jshint quotmark:false */ -// FeatureListPage -// Meny -// FeatureList -// Feature -// FeatureViewer -// - props -// - button-edit -// - button-delete -// - toggle-status -// FeatureEditor -// - name -// - status -// - description +// Unleash +// - Menu +// - FeatureList +// - UnsavedFeature +// - SavedFeature // -// NewFeaturePage -// Meny -// NewFeatureForm -var FeatureEditor = React.createClass({ - - handleSubmit: function(e) { - e.preventDefault(); - this.props.onSubmit(this.props.feature); - return; - }, - - render: function () { - return ( -
-
- Edit/new feature - -
- -
- -

Give the feature a name

-
-
- -
- -
- -

Describe the feature

-
-
- -
- -
- -
-
- -
-
- - -
-
-
- -
-
- ); - } +var Menu = React.createClass({ + render: function() { return
; } }); -var FeatureViewer = React.createClass({ - // TODO: validate props? - handleEnableChange: function(event) { - var feature = this.props.feature; - this.props.updateFeature({ - name: feature.name, - field: 'enabled', - value: event.target.checked - }); - }, - render: function () { - return ( -
-
-
-
-
-
-

{this.props.feature.name}

-

{this.props.feature.description}

- -
-
-
-
- -
-
-
-
-

- -

-
-
-
-
- -
-
-
-
- - -
-
-
-
-
- -
-
- ); - } +var UnsavedFeature = React.createClass({ + // TODO: form + render: function() { return
; } }); -var Feature = React.createClass({ - getInitialState: function() { - return { mode: 'view', error: '' }; - }, - - onToggleMode: function() { - if (this.isInViewMode()) { - this.setState({mode: 'edit'}); - } else if (this.isInEditMode()) { - this.setState({mode: 'view'}); - } else { - throw "invalid mode: " + this.state.mode; - } - }, - - onSubmit: function() { - var isNew = false; - var cb = function(err) { - if (err) { - this.setState({error: err}); - } else { - this.setState(this.getInitialState()); - } - }; - - if (isNew) { - this.props.createFeature(this.props.feature, cb.bind(this)); - } else { - this.props.updateFeature(this.props.feature, cb.bind(this)); - } - }, - +var SavedFeature = React.createClass({ render: function() { - if (this.isInViewMode()) { - return ( - - ); - } else if (this.isInEditMode()) { - return ( - - ); - } else { - throw "invalid mode: " + this.state.mode; - } - }, - - isInViewMode: function() { return this.state.mode === 'view'; }, - isInEditMode: function() { return this.state.mode === 'edit'; } + return ( +
{this.props.feature.name}
+ ); + } }); var FeatureList = React.createClass({ + render: function() { + var featureNodes = []; + + this.props.unsavedFeatures.forEach(function(feature) { + featureNodes.push(); + }); + + this.props.savedFeatures.forEach(function(feature) { + featureNodes.push(); + }); + + return (
{featureNodes}
); + } + +}); + +var Unleash = React.createClass({ getInitialState: function() { - return { - features: [] - }; + return { savedFeatures: [], unsavedFeatures: [] }; }, componentDidMount: function () { @@ -220,75 +54,32 @@ var FeatureList = React.createClass({ }, loadFeaturesFromServer: function () { - reqwest('features').then(this.setFeatures); + reqwest('features').then(this.setFeatures, this.handleError); }, setFeatures: function (data) { - this.setState({features: data.features}); + this.setState({savedFeatures: data.features}); }, - updateFeature: function (changeRequest, callback) { - var newFeatures = this.state.features; - newFeatures.forEach(function(f){ - if(f.name === changeRequest.name) { - f[changeRequest.field] = changeRequest.value; - } - }); - - reqwest({ - url: 'features/' + changeRequest.name, - method: 'patch', - type: 'json', - contentType: 'application/json', - data: JSON.stringify(changeRequest) - }).then(function() { - this.setState({features: newFeatures}); - callback(); - }.bind(this), function() { - callback('update failed'); - window.alert('update failed'); - }.bind(this)); + handleError: function (error) { + // TODO: ErrorComponent + window.alert(error); }, - createFeature: function (feature, callback) { - reqwest({ - url: 'features', - method: 'post', - type: 'json', - contentType: 'application/json', - data: JSON.stringify(feature) - }).then(function() { - callback(); - }.bind(this), function() { - callback('create failed'); - window.alert('create failed'); - }.bind(this)); - }, - - render: function () { - var featureNodes = this.state.features.map(function (feature) { - return ( - - ); - }.bind(this)); - + render: function() { return ( -
-
-

Features

-
-
- {featureNodes} -
+
+ +
); } }); + React.renderComponent( - , + , document.getElementById('content') ); \ No newline at end of file