Meilleure gestion arbre immutable

This commit is contained in:
2015-11-03 17:45:37 +01:00
parent d8a0136a99
commit 519ec99264
11 changed files with 236 additions and 114 deletions

View File

@ -1,4 +1,5 @@
var Util = require('../../util');
var Tree = require('../../util/tree');
var logger = Util.Logger;
var path = require('path');
var _ = require('lodash');
@ -111,10 +112,33 @@ exports.selectProfileItem = function(item) {
};
exports.updateProfileItem = function(item, key, value) {
return {
type: UPDATE_PROFILE_ITEM,
item: item,
key: key,
value: value
return function(dispatch, getState) {
var state = getState();
var selectedPath, tree;
// If the item is selected, save its path
if(state.selectedItem === item) {
tree = new Tree(state.profile);
var result = tree.find(item);
selectedPath = result.path;
}
dispatch({
type: UPDATE_PROFILE_ITEM,
item: item,
key: key,
value: value
});
// Re-select item if needed
if(selectedPath) {
state = getState();
tree = new Tree(state.profile);
var selectedItem = tree.get(selectedPath);
dispatch(exports.selectProfileItem(selectedItem));
}
};
};