1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-28 00:06:53 +01:00
unleash.unleash/public/js/stores/FeatureToggleStore.js

78 lines
2.2 KiB
JavaScript
Raw Normal View History

var Reflux = require('reflux');
var FeatureActions = require('./FeatureToggleActions');
2015-03-17 20:34:19 +01:00
var ErrorActions = require('./ErrorActions');
var Server = require('./FeatureToggleServerFacade');
var Timer = require('../utils/Timer');
2015-03-17 18:16:06 +01:00
var filter = require('lodash/collection/filter');
var sortBy = require('lodash/collection/sortBy');
var findIndex = require('lodash/array/findIndex');
var _featureToggles = [];
// Creates a DataStore
var FeatureStore = Reflux.createStore({
2015-03-17 18:16:06 +01:00
//The store should be split in two: toggleStore && archivedToggleStore!
// Initial setup
init: function() {
2015-03-16 21:27:56 +01:00
this.listenTo(FeatureActions.create.completed, this.onCreate);
this.listenTo(FeatureActions.update.completed, this.onUpdate);
this.listenTo(FeatureActions.archive.completed, this.onArchive);
this.listenTo(FeatureActions.revive.completed, this.onRevive);
2015-03-17 18:16:06 +01:00
//TODO: this should not be part of the store!
2015-03-17 20:34:19 +01:00
this.timer = new Timer(this.loadDataFromServer, 30*1000);
this.timer.start();
},
loadDataFromServer: function() {
2015-03-17 18:16:06 +01:00
//TODO: this should not be part of the store!
Server.getFeatures(function(err, featureToggles) {
2015-03-17 20:29:03 +01:00
if(err) {
2015-03-17 20:34:19 +01:00
ErrorActions.error(err);
2015-03-17 20:29:03 +01:00
return;
} else {
this.setToggles(featureToggles);
}
}.bind(this));
},
onCreate: function(feature) {
2015-03-16 21:27:56 +01:00
this.setToggles([feature].concat(_featureToggles));
},
setToggles: function(toggles) {
2015-03-17 18:16:06 +01:00
_featureToggles = sortBy(toggles, 'name');
this.trigger();
},
2015-03-16 21:27:56 +01:00
onUpdate: function(feature) {
2015-03-17 18:16:06 +01:00
var idx = findIndex(_featureToggles, 'name', feature.name);
_featureToggles[idx] = feature;
this.trigger();
},
2015-03-16 21:27:56 +01:00
onArchive: function(feature) {
2015-03-17 18:16:06 +01:00
var featureToggles = filter(_featureToggles, function(item) {
return item.name !== feature.name;
});
2015-03-17 18:16:06 +01:00
this.setToggles(featureToggles);
this.trigger();
},
2015-03-16 21:27:56 +01:00
onRevive: function(item) {
2015-03-17 18:16:06 +01:00
this.setToggles(_featureToggles.concat([item]));
this.trigger();
},
getFeatureToggles: function() {
return _featureToggles;
},
2015-03-17 18:31:55 +01:00
initStore: function(toggles) {
_featureToggles = toggles;
}
});
module.exports = FeatureStore;