const React = require('react'); const mui = require('material-ui'); const Logo = require('./logo'); const AppStore = require('../stores/app-store'); const Sidebar = require('./sidebar.js'); const Status = require('./status.js'); const Topologies = require('./topologies.js'); const TopologyOptions = require('./topology-options.js'); const WebapiUtils = require('../utils/web-api-utils'); const AppActions = require('../actions/app-actions'); const Details = require('./details'); const Nodes = require('./nodes'); const RouterUtils = require('../utils/router-utils'); const ThemeManager = new mui.Styles.ThemeManager(); const ESC_KEY_CODE = 27; function getStateFromStores() { return { activeTopologyOptions: AppStore.getActiveTopologyOptions(), currentTopology: AppStore.getCurrentTopology(), currentTopologyId: AppStore.getCurrentTopologyId(), currentTopologyOptions: AppStore.getCurrentTopologyOptions(), errorUrl: AppStore.getErrorUrl(), highlightedEdgeIds: AppStore.getHighlightedEdgeIds(), highlightedNodeIds: AppStore.getHighlightedNodeIds(), selectedNodeId: AppStore.getSelectedNodeId(), nodeDetails: AppStore.getNodeDetails(), nodes: AppStore.getNodes(), topologies: AppStore.getTopologies(), topologiesLoaded: AppStore.isTopologiesLoaded(), version: AppStore.getVersion(), websocketClosed: AppStore.isWebsocketClosed() }; } const App = React.createClass({ getInitialState: function() { return getStateFromStores(); }, componentDidMount: function() { AppStore.on(AppStore.CHANGE_EVENT, this.onChange); window.addEventListener('keyup', this.onKeyPress); RouterUtils.getRouter().start({hashbang: true}); WebapiUtils.getTopologies(); WebapiUtils.getApiDetails(); }, onChange: function() { this.setState(getStateFromStores()); }, onKeyPress: function(ev) { if (ev.keyCode === ESC_KEY_CODE) { AppActions.hitEsc(); } }, getChildContext: function() { return { muiTheme: ThemeManager.getCurrentTheme() }; }, render: function() { const showingDetails = this.state.selectedNodeId; const versionString = this.state.version ? 'Version ' + this.state.version : ''; // width of details panel blocking a view const detailsWidth = showingDetails ? 450 : 0; const topMargin = 100; return (
); }, childContextTypes: { muiTheme: React.PropTypes.object } }); module.exports = App;