aboutsummaryrefslogtreecommitdiffstats
path: root/web/src/js/components/mainview.jsx.js
diff options
context:
space:
mode:
Diffstat (limited to 'web/src/js/components/mainview.jsx.js')
-rw-r--r--web/src/js/components/mainview.jsx.js129
1 files changed, 75 insertions, 54 deletions
diff --git a/web/src/js/components/mainview.jsx.js b/web/src/js/components/mainview.jsx.js
index 795b8136..17a024ee 100644
--- a/web/src/js/components/mainview.jsx.js
+++ b/web/src/js/components/mainview.jsx.js
@@ -1,65 +1,86 @@
-/** @jsx React.DOM */
-
var MainView = React.createClass({
- getInitialState: function() {
+ mixins: [ReactRouter.Navigation, ReactRouter.State],
+ getInitialState: function () {
return {
- flows: [],
+ flows: []
};
},
- componentDidMount: function () {
- this.flowStore = FlowStore.getView();
- this.flowStore.addListener("change",this.onFlowChange);
- },
- componentWillUnmount: function () {
- this.flowStore.removeListener("change",this.onFlowChange);
- this.flowStore.close();
+ componentWillReceiveProps: function (nextProps) {
+ if (nextProps.flowStore !== this.props.flowStore) {
+ this.closeView();
+ this.openView(nextProps.flowStore);
+ }
},
- onFlowChange: function () {
+ openView: function (store) {
+ var view = new StoreView(store);
this.setState({
- flows: this.flowStore.getAll()
+ view: view
});
+
+ view.addListener("recalculate", this.onRecalculate);
+ view.addListener("add update remove", this.onUpdate);
},
- selectDetailTab: function(panel) {
- ReactRouter.replaceWith(
- "flow",
- {
- flowId: this.props.params.flowId,
- detailTab: panel
- }
- );
+ onRecalculate: function(){
+ this.forceUpdate();
+ var selected = this.getSelected();
+ if(selected){
+ this.refs.flowTable.scrollIntoView(selected);
+ }
+ },
+ onUpdate: function (flow) {
+ if (flow.id === this.getParams().flowId) {
+ this.forceUpdate();
+ }
+ },
+ closeView: function () {
+ this.state.view.close();
+ },
+ componentWillMount: function () {
+ this.openView(this.props.flowStore);
+ },
+ componentWillUnmount: function () {
+ this.closeView();
},
- selectFlow: function(flow) {
- if(flow){
- ReactRouter.replaceWith(
- "flow",
+ selectFlow: function (flow) {
+ if (flow) {
+ this.replaceWith(
+ "flow",
{
flowId: flow.id,
- detailTab: this.props.params.detailTab || "request"
+ detailTab: this.getParams().detailTab || "request"
}
);
this.refs.flowTable.scrollIntoView(flow);
} else {
- ReactRouter.replaceWith("flows");
+ this.replaceWith("flows");
}
},
- selectFlowRelative: function(i){
+ selectFlowRelative: function (shift) {
+ var flows = this.state.view.list;
var index;
- if(!this.props.params.flowId){
- if(i > 0){
- index = this.state.flows.length-1;
+ if (!this.getParams().flowId) {
+ if (shift > 0) {
+ index = flows.length - 1;
} else {
index = 0;
}
} else {
- index = _.findIndex(this.state.flows, function(f){
- return f.id === this.props.params.flowId;
- }.bind(this));
- index = Math.min(Math.max(0, index+i), this.state.flows.length-1);
+ var currFlowId = this.getParams().flowId;
+ var i = flows.length;
+ while (i--) {
+ if (flows[i].id === currFlowId) {
+ index = i;
+ break;
+ }
+ }
+ index = Math.min(
+ Math.max(0, index + shift),
+ flows.length - 1);
}
- this.selectFlow(this.state.flows[index]);
+ this.selectFlow(flows[index]);
},
- onKeyDown: function(e){
- switch(e.keyCode){
+ onKeyDown: function (e) {
+ switch (e.keyCode) {
case Key.K:
case Key.UP:
this.selectFlowRelative(-1);
@@ -80,14 +101,14 @@ var MainView = React.createClass({
break;
case Key.H:
case Key.LEFT:
- if(this.refs.flowDetails){
+ if (this.refs.flowDetails) {
this.refs.flowDetails.nextTab(-1);
}
break;
case Key.L:
case Key.TAB:
case Key.RIGHT:
- if(this.refs.flowDetails){
+ if (this.refs.flowDetails) {
this.refs.flowDetails.nextTab(+1);
}
break;
@@ -95,19 +116,20 @@ var MainView = React.createClass({
console.debug("keydown", e.keyCode);
return;
}
- return false;
+ e.preventDefault();
+ },
+ getSelected: function(){
+ return this.props.flowStore.get(this.getParams().flowId);
},
- render: function() {
- var selected = _.find(this.state.flows, { id: this.props.params.flowId });
+ render: function () {
+ var selected = this.getSelected();
var details;
- if(selected){
- details = (
- <FlowDetail ref="flowDetails"
- flow={selected}
- selectTab={this.selectDetailTab}
- active={this.props.params.detailTab}/>
- );
+ if (selected) {
+ details = [
+ <Splitter key="splitter"/>,
+ <FlowDetail key="flowDetails" ref="flowDetails" flow={selected}/>
+ ];
} else {
details = null;
}
@@ -115,10 +137,9 @@ var MainView = React.createClass({
return (
<div className="main-view" onKeyDown={this.onKeyDown} tabIndex="0">
<FlowTable ref="flowTable"
- flows={this.state.flows}
- selectFlow={this.selectFlow}
- selected={selected} />
- { details ? <Splitter/> : null }
+ view={this.state.view}
+ selectFlow={this.selectFlow}
+ selected={selected} />
{details}
</div>
);