Skip to content

Commit

Permalink
dont clear nodes cache if topo is the same
Browse files Browse the repository at this point in the history
* combined stores that were interdependent
* fixes #61
  • Loading branch information
davkal committed May 19, 2015
1 parent 9eff842 commit a9df66f
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 98 deletions.
4 changes: 1 addition & 3 deletions client/app/scripts/components/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ var AppStore = require('../stores/app-store');
var Groupings = require('./groupings.js');
var Status = require('./status.js');
var Topologies = require('./topologies.js');
var TopologyStore = require('../stores/topology-store');
var WebapiUtils = require('../utils/web-api-utils');
var AppActions = require('../actions/app-actions');
var Details = require('./details');
Expand All @@ -27,7 +26,7 @@ function getStateFromStores() {
currentGrouping: AppStore.getCurrentGrouping(),
selectedNodeId: AppStore.getSelectedNodeId(),
nodeDetails: AppStore.getNodeDetails(),
nodes: TopologyStore.getNodes(),
nodes: AppStore.getNodes(),
topologies: AppStore.getTopologies()
}
}
Expand All @@ -40,7 +39,6 @@ var App = React.createClass({
},

componentDidMount: function() {
TopologyStore.on(TopologyStore.CHANGE_EVENT, this.onChange);
AppStore.on(AppStore.CHANGE_EVENT, this.onChange);
window.addEventListener('keyup', this.onKeyPress);

Expand Down
61 changes: 52 additions & 9 deletions client/app/scripts/stores/app-store.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ var assign = require('object-assign');

var AppDispatcher = require('../dispatcher/app-dispatcher');
var ActionTypes = require('../constants/action-types');
var TopologyStore = require('./topology-store');
// var topologies = require('../constants/topologies');


// Initial values

var connectionState = 'disconnected';
var currentGrouping = 'none';
var currentTopology = 'applications';
var mouseOverNode = null;
var nodes = {};
var nodeDetails = null;
var selectedNodeId = null;
var topologies = [];
Expand Down Expand Up @@ -48,6 +48,10 @@ var AppStore = assign({}, EventEmitter.prototype, {
return nodeDetails;
},

getNodes: function() {
return nodes;
},

getSelectedNodeId: function() {
return selectedNodeId;
},
Expand Down Expand Up @@ -81,15 +85,18 @@ var AppStore = assign({}, EventEmitter.prototype, {

AppStore.dispatchToken = AppDispatcher.register(function(payload) {
switch (payload.type) {

case ActionTypes.CLICK_CLOSE_DETAILS:
selectedNodeId = null;
AppStore.emit(AppStore.CHANGE_EVENT);
break;

case ActionTypes.CLICK_GROUPING:
currentGrouping = payload.grouping;
AppDispatcher.waitFor([TopologyStore.dispatchToken]);
AppStore.emit(AppStore.CHANGE_EVENT);
if (payload.grouping !== currentGrouping) {
currentGrouping = payload.grouping;
nodes = {};
AppStore.emit(AppStore.CHANGE_EVENT);
}
break;

case ActionTypes.CLICK_NODE:
Expand All @@ -98,8 +105,15 @@ AppStore.dispatchToken = AppDispatcher.register(function(payload) {
break;

case ActionTypes.CLICK_TOPOLOGY:
currentTopology = payload.topologyId;
AppDispatcher.waitFor([TopologyStore.dispatchToken]);
if (payload.topologyId !== currentTopology) {
currentTopology = payload.topologyId;
nodes = {};
}
AppStore.emit(AppStore.CHANGE_EVENT);
break;

case ActionTypes.ENTER_NODE:
mouseOverNode = payload.nodeId;
AppStore.emit(AppStore.CHANGE_EVENT);
break;

Expand All @@ -109,14 +123,43 @@ AppStore.dispatchToken = AppDispatcher.register(function(payload) {
AppStore.emit(AppStore.CHANGE_EVENT);
break;

case ActionTypes.LEAVE_NODE:
mouseOverNode = null;
AppStore.emit(AppStore.CHANGE_EVENT);
break;

case ActionTypes.RECEIVE_NODE_DETAILS:
nodeDetails = payload.details;
AppStore.emit(AppStore.CHANGE_EVENT);
break;

case ActionTypes.RECEIVE_NODES_DELTA:
console.log('RECEIVE_NODES_DELTA',
'remove', _.size(payload.delta.remove),
'update', _.size(payload.delta.update),
'add', _.size(payload.delta.add));

connectionState = "connected";
AppDispatcher.waitFor([TopologyStore.dispatchToken]);

// nodes that no longer exist
_.each(payload.delta.remove, function(nodeId) {
// in case node disappears before mouseleave event
if (mouseOverNode === nodeId) {
mouseOverNode = null;
}
delete nodes[nodeId];
});

// update existing nodes
_.each(payload.delta.update, function(node) {
nodes[node.id] = node;
});

// add new nodes
_.each(payload.delta.add, function(node) {
nodes[node.id] = node;
});

AppStore.emit(AppStore.CHANGE_EVENT);
break;

Expand All @@ -126,10 +169,10 @@ AppStore.dispatchToken = AppDispatcher.register(function(payload) {
break;

case ActionTypes.ROUTE_TOPOLOGY:
nodes = {};
currentTopology = payload.state.currentTopology;
currentGrouping = payload.state.currentGrouping;
selectedNodeId = payload.state.selectedNodeId;
AppDispatcher.waitFor([TopologyStore.dispatchToken]);
AppStore.emit(AppStore.CHANGE_EVENT);
break;

Expand Down
86 changes: 0 additions & 86 deletions client/app/scripts/stores/topology-store.js

This file was deleted.

0 comments on commit a9df66f

Please sign in to comment.