mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-25 16:26:48 +00:00
143 lines
3.2 KiB
JavaScript
143 lines
3.2 KiB
JavaScript
|
|
var EventEmitter = require('events').EventEmitter;
|
|
var _ = require('lodash');
|
|
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 nodeDetails = null;
|
|
var selectedNodeId = null;
|
|
var topologies = [];
|
|
|
|
// Store API
|
|
|
|
var AppStore = assign({}, EventEmitter.prototype, {
|
|
|
|
CHANGE_EVENT: 'change',
|
|
|
|
getAppState: function() {
|
|
return {
|
|
currentTopology: this.getCurrentTopology(),
|
|
currentGrouping: this.getCurrentGrouping(),
|
|
selectedNodeId: this.getSelectedNodeId()
|
|
};
|
|
},
|
|
|
|
getConnectionState: function() {
|
|
return connectionState;
|
|
},
|
|
|
|
getCurrentTopology: function() {
|
|
return currentTopology;
|
|
},
|
|
|
|
getCurrentGrouping: function() {
|
|
return currentGrouping;
|
|
},
|
|
|
|
getNodeDetails: function() {
|
|
return nodeDetails;
|
|
},
|
|
|
|
getSelectedNodeId: function() {
|
|
return selectedNodeId;
|
|
},
|
|
|
|
getTopologies: function() {
|
|
return topologies;
|
|
},
|
|
|
|
getTopologyForUrl: function(url) {
|
|
return url.split('/').pop();
|
|
},
|
|
|
|
getUrlForTopology: function(topologyId) {
|
|
var topology = _.find(topologies, function(topology) {
|
|
return this.isUrlForTopology(topology.url, topologyId);
|
|
}, this);
|
|
|
|
if (topology) {
|
|
return topology.grouped_url && currentGrouping == 'grouped' ? topology.grouped_url : topology.url;
|
|
}
|
|
},
|
|
|
|
isUrlForTopology: function(url, topologyId) {
|
|
return _.endsWith(url, topologyId);
|
|
}
|
|
|
|
});
|
|
|
|
|
|
// Store Dispatch Hooks
|
|
|
|
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);
|
|
break;
|
|
|
|
case ActionTypes.CLICK_NODE:
|
|
selectedNodeId = payload.nodeId;
|
|
AppStore.emit(AppStore.CHANGE_EVENT);
|
|
break;
|
|
|
|
case ActionTypes.CLICK_TOPOLOGY:
|
|
currentTopology = payload.topologyId;
|
|
AppDispatcher.waitFor([TopologyStore.dispatchToken]);
|
|
AppStore.emit(AppStore.CHANGE_EVENT);
|
|
break;
|
|
|
|
case ActionTypes.HIT_ESC_KEY:
|
|
nodeDetails = null;
|
|
selectedNodeId = 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:
|
|
connectionState = "connected";
|
|
AppDispatcher.waitFor([TopologyStore.dispatchToken]);
|
|
AppStore.emit(AppStore.CHANGE_EVENT);
|
|
break;
|
|
|
|
case ActionTypes.RECEIVE_TOPOLOGIES:
|
|
topologies = payload.topologies;
|
|
AppStore.emit(AppStore.CHANGE_EVENT);
|
|
break;
|
|
|
|
case ActionTypes.ROUTE_TOPOLOGY:
|
|
currentTopology = payload.state.currentTopology;
|
|
currentGrouping = payload.state.currentGrouping;
|
|
selectedNodeId = payload.state.selectedNodeId;
|
|
AppDispatcher.waitFor([TopologyStore.dispatchToken]);
|
|
AppStore.emit(AppStore.CHANGE_EVENT);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
|
|
}
|
|
});
|
|
|
|
module.exports = AppStore;
|