1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-23 00:22:19 +01:00

loadsh to simplify store

This commit is contained in:
Ivar Conradi Østhus 2015-03-17 18:16:06 +01:00
parent f2617220d0
commit 9576968043
2 changed files with 15 additions and 14 deletions

View File

@ -46,6 +46,7 @@
"jsx-loader": "0.12.2", "jsx-loader": "0.12.2",
"jsxhint": "0.4.15", "jsxhint": "0.4.15",
"knex": "^0.7.3", "knex": "^0.7.3",
"lodash": "^3.5.0",
"log4js": "0.6.21", "log4js": "0.6.21",
"moment": "^2.9.0", "moment": "^2.9.0",
"nconf": "0.6.9", "nconf": "0.6.9",

View File

@ -2,12 +2,18 @@ var Reflux = require('reflux');
var FeatureActions = require('./FeatureToggleActions'); var FeatureActions = require('./FeatureToggleActions');
var Server = require('./FeatureToggleServerFacade'); var Server = require('./FeatureToggleServerFacade');
var Timer = require('../utils/Timer'); var Timer = require('../utils/Timer');
var filter = require('lodash/collection/filter');
var sortBy = require('lodash/collection/sortBy');
var findIndex = require('lodash/array/findIndex');
//TODO: have archived toggles in seperate store.
var _featureToggles = []; var _featureToggles = [];
var _archivedToggles = []; var _archivedToggles = [];
// Creates a DataStore // Creates a DataStore
var FeatureStore = Reflux.createStore({ var FeatureStore = Reflux.createStore({
//The store should be split in two: toggleStore && archivedToggleStore!
// Initial setup // Initial setup
init: function() { init: function() {
this.listenTo(FeatureActions.create.completed, this.onCreate); this.listenTo(FeatureActions.create.completed, this.onCreate);
@ -15,11 +21,13 @@ var FeatureStore = Reflux.createStore({
this.listenTo(FeatureActions.archive.completed, this.onArchive); this.listenTo(FeatureActions.archive.completed, this.onArchive);
this.listenTo(FeatureActions.revive.completed, this.onRevive); this.listenTo(FeatureActions.revive.completed, this.onRevive);
//TODO: this should not be part of the store!
this.timer = new Timer(this.loadDataFromServer, 30*1000); this.timer = new Timer(this.loadDataFromServer, 30*1000);
this.timer.start(); this.timer.start();
}, },
loadDataFromServer: function() { loadDataFromServer: function() {
//TODO: this should not be part of the store!
Server.getFeatures(function(err, featureToggles) { Server.getFeatures(function(err, featureToggles) {
this.setToggles(featureToggles); this.setToggles(featureToggles);
}.bind(this)); }.bind(this));
@ -35,30 +43,22 @@ var FeatureStore = Reflux.createStore({
}, },
setToggles: function(toggles) { setToggles: function(toggles) {
_featureToggles = toggles; _featureToggles = sortBy(toggles, 'name');
this.trigger(); this.trigger();
}, },
onUpdate: function(feature) { onUpdate: function(feature) {
var idx; var idx = findIndex(_featureToggles, 'name', feature.name);
_featureToggles.forEach(function(item, i) {
if(item.name === feature.name) {
idx = i;
}
});
_featureToggles[idx] = feature; _featureToggles[idx] = feature;
this.trigger(); this.trigger();
}, },
onArchive: function(feature) { onArchive: function(feature) {
var idx; var featureToggles = filter(_featureToggles, function(item) {
_featureToggles.forEach(function(item, i) { return item.name !== feature.name;
if(item.name === feature.name) {
idx = i;
}
}); });
_featureToggles.splice(idx, 1);
_archivedToggles.unshift(feature); _archivedToggles.unshift(feature);
this.setToggles(featureToggles);
this.trigger(); this.trigger();
}, },
@ -67,7 +67,7 @@ var FeatureStore = Reflux.createStore({
return f.name !== item.name; return f.name !== item.name;
}); });
_archivedToggles = newStore; _archivedToggles = newStore;
_featureToggles.push(item); this.setToggles(_featureToggles.concat([item]));
this.trigger(); this.trigger();
}, },