|
@@ -214,8 +214,8 @@ var Utils = (function __makeUtils() {
|
|
|
allNodesSet: allNodesSet,
|
|
allNodesSet: allNodesSet,
|
|
|
allEdgesSet: allEdgesSet,
|
|
allEdgesSet: allEdgesSet,
|
|
|
visibleNodesSet: visibleNodesSet,
|
|
visibleNodesSet: visibleNodesSet,
|
|
|
- nodes: nodes.map(mapStatsNodeToGraphNode), // TODO: RMME
|
|
|
|
|
- edges: edges.map(mapStatsEdgeToGraphEdge),
|
|
|
|
|
|
|
+ // nodes: nodes.map(mapStatsNodeToGraphNode), // TODO: RMME
|
|
|
|
|
+ // edges: edges.map(mapStatsEdgeToGraphEdge),
|
|
|
paths: paths,
|
|
paths: paths,
|
|
|
isLoading: false,
|
|
isLoading: false,
|
|
|
sentRequestId: 0,
|
|
sentRequestId: 0,
|
|
@@ -400,7 +400,6 @@ var p5UI__NetworkGraph = createReactClass({
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
getInitialState: function () {
|
|
getInitialState: function () {
|
|
|
- // if (this.props.selected) this._updateSelected(this.props.selected);
|
|
|
|
|
return Object.assign({
|
|
return Object.assign({
|
|
|
initialized: false,
|
|
initialized: false,
|
|
|
isLoading: false,
|
|
isLoading: false,
|
|
@@ -447,60 +446,6 @@ var p5UI__NetworkGraph = createReactClass({
|
|
|
|
|
|
|
|
reloadGraph: function () {
|
|
reloadGraph: function () {
|
|
|
this.props.store.dispatch({ type: 'RELOAD_NODES' })
|
|
this.props.store.dispatch({ type: 'RELOAD_NODES' })
|
|
|
- return;
|
|
|
|
|
-
|
|
|
|
|
- if (this._network) {
|
|
|
|
|
- // this._network.setData({ nodes: [], edges: [] });
|
|
|
|
|
- // var edges = this._edges.getDataSet();
|
|
|
|
|
- var networkFit = (function (network) {
|
|
|
|
|
- var _network = network;
|
|
|
|
|
- return function () {
|
|
|
|
|
- DBG && console.log('DBG:networkFit');
|
|
|
|
|
- _network.fit();
|
|
|
|
|
- }
|
|
|
|
|
- })(this._network);
|
|
|
|
|
- // {
|
|
|
|
|
- // var edges = this._edges.map(function(e) { return e; }); // DataSet to Array
|
|
|
|
|
- // this._edges.clear();
|
|
|
|
|
- // var animAddEdges = (function (this__edges, edges, wait) {
|
|
|
|
|
- // return function (callback) {
|
|
|
|
|
- // DBG && console.log('DBG:animAddEdges', { edges });
|
|
|
|
|
- // if (edges.length > 0) {
|
|
|
|
|
- // var edge = edges.pop();
|
|
|
|
|
- // this__edges.add(edge);
|
|
|
|
|
- // setTimeout(function () {
|
|
|
|
|
- // animAddEdges(callback)
|
|
|
|
|
- // }, wait);
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // })(this._edges, edges, 10);
|
|
|
|
|
- // animAddEdges(animAddEdges);
|
|
|
|
|
- // }
|
|
|
|
|
- {
|
|
|
|
|
- var nodes = this._nodes.map(function(e) { return e; }); // DataSet to Array
|
|
|
|
|
- this._nodes.clear();
|
|
|
|
|
- var animAddNodes = (function (this__nodes, nodes, wait, onFinishCallback) {
|
|
|
|
|
- return function (callback) {
|
|
|
|
|
- DBG && console.log('DBG:animAddNodes', { nodes });
|
|
|
|
|
- if (nodes.length > 0) {
|
|
|
|
|
- var node = nodes.pop();
|
|
|
|
|
- this__nodes.add(node);
|
|
|
|
|
- setTimeout(function () {
|
|
|
|
|
- animAddNodes(callback)
|
|
|
|
|
- }, wait);
|
|
|
|
|
- } else if (onFinishCallback) {
|
|
|
|
|
- setTimeout(function () {
|
|
|
|
|
- onFinishCallback()
|
|
|
|
|
- }, 500);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- })(this._nodes, nodes, 200, networkFit);
|
|
|
|
|
- animAddNodes(animAddNodes);
|
|
|
|
|
- }
|
|
|
|
|
- // DBG && console.log('DBG: reloadGraph', { 'this._nodes': this._nodes, 'this._edges': this._edges, edges: edges });
|
|
|
|
|
- // this._network.setData({ nodes: this._nodes, edges: this._edges });
|
|
|
|
|
- // this._network.fit() // zoom out to fit container size
|
|
|
|
|
- }
|
|
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
testOnClick1: function () {
|
|
testOnClick1: function () {
|
|
@@ -552,78 +497,8 @@ var p5UI__NetworkGraph = createReactClass({
|
|
|
// })
|
|
// })
|
|
|
// }
|
|
// }
|
|
|
// }
|
|
// }
|
|
|
-
|
|
|
|
|
- if (this.props.selected.length != nextProps.selected.length) {
|
|
|
|
|
- // this._updateSelected(nextProps.selected)
|
|
|
|
|
- }
|
|
|
|
|
return false;
|
|
return false;
|
|
|
},
|
|
},
|
|
|
- _updateSelected: function (selected) { // TODO: move to RaportOutputPanel Store
|
|
|
|
|
- var state = this.props.store.getState();
|
|
|
|
|
- var idsSelected = (selected || []).map( function (node) { return node.id } )
|
|
|
|
|
-
|
|
|
|
|
- var nodes = [];
|
|
|
|
|
- // var edges = state.edges.filter(function (edge) { // use idsSelected - TODO: RMME
|
|
|
|
|
- // return ( -1 !== idsSelected.indexOf(edge.source) || -1 !== idsSelected.indexOf(edge.target) );
|
|
|
|
|
- // })
|
|
|
|
|
- {
|
|
|
|
|
- // TODO: find all paths with selected fids
|
|
|
|
|
- var foundPaths = state.paths.filter(function (path) {
|
|
|
|
|
- for (var i = 0, totalFids = path.fids.length, fid = null; i < totalFids; i++) {
|
|
|
|
|
- fid = path.fids[i];
|
|
|
|
|
- DBG && console.log('DBG:foundPaths ', {fid: ''+fid, path});
|
|
|
|
|
- if ( -1 !== idsSelected.indexOf(fid) ) return true;
|
|
|
|
|
- }
|
|
|
|
|
- return false;
|
|
|
|
|
- })
|
|
|
|
|
- // TODO: add missing nodes (not selected but on path)
|
|
|
|
|
- var addFidsToGraph = Array.from(new Set(foundPaths.reduce(function (ret, path) {
|
|
|
|
|
- return ret.concat(path.fids.filter(function (fid) {
|
|
|
|
|
- return ( -1 === idsSelected.indexOf(fid) );
|
|
|
|
|
- }))
|
|
|
|
|
- }, [])));
|
|
|
|
|
- // TODO: view only combined path or all not selected nodes? - trying: not selected nodes
|
|
|
|
|
- // TODO: convert found paths to graph edges
|
|
|
|
|
- }
|
|
|
|
|
- DBG && console.warn('DBG: TODO set edges by selectd nodes...', { state_nodes: state.nodes, state_edges: state.edges, idsSelected, foundPaths, addFidsToGraph });
|
|
|
|
|
- // this._nodes = new vis.DataSet();
|
|
|
|
|
- { // TODO: convert fid to node on found list
|
|
|
|
|
- { // if (!this._allNodes) {
|
|
|
|
|
- this._allNodes = new vis.DataSet();
|
|
|
|
|
- this._allNodes.update(state.nodes);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- var this__allNodes = this._allNodes;
|
|
|
|
|
- var this__nodes = this._nodes;
|
|
|
|
|
- addFidsToGraph.forEach(function (fid) {
|
|
|
|
|
- var node = this__allNodes.get(fid)
|
|
|
|
|
- this__nodes.update(node);
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- DBG && console.log('DBG: check edges: ', { 'this._edges.length': this._edges.length, 'state.edges.length': state.edges.length });
|
|
|
|
|
- if (this._edges.length != state.edges.length) {
|
|
|
|
|
- DBG && console.log('DBG: TODO: update edges', { 'state.edges': state.edges });
|
|
|
|
|
-
|
|
|
|
|
- var this__edges = this._edges;
|
|
|
|
|
- state.edges.forEach(function (edge) {
|
|
|
|
|
- var foundEdge = this__edges.get(edge.id);
|
|
|
|
|
- if (!foundEdge) {
|
|
|
|
|
- this__edges.add(edge);
|
|
|
|
|
- } else {
|
|
|
|
|
- var listPathId = (-1 !== foundEdge.listPathId.indexOf(edge.pathId)) ? foundEdge.listPathId : foundEdge.listPathId.concat(edge.pathId);
|
|
|
|
|
- var mergedEdge = Object.assign(foundEdge, {
|
|
|
|
|
- listPathId: listPathId,
|
|
|
|
|
- width: 1 + (listPathId.length - 1) / 10,
|
|
|
|
|
- });
|
|
|
|
|
- this__edges.update(mergedEdge);
|
|
|
|
|
- }
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
- if (this._network) {
|
|
|
|
|
- // this._network.setData({ nodes: this._nodes, edges: this._edges });
|
|
|
|
|
- // this._network.fit() // zoom to fit container size
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
render: function () {
|
|
render: function () {
|
|
|
return h('div', { style: { 'position': "relative" } }, [
|
|
return h('div', { style: { 'position': "relative" } }, [
|
|
|
h('div', {
|
|
h('div', {
|
|
@@ -666,8 +541,8 @@ var p5UI__RaportOutputPanel = createReactClass({
|
|
|
var initSelected = [];
|
|
var initSelected = [];
|
|
|
if (DBG_INIT_SELECTED) {
|
|
if (DBG_INIT_SELECTED) {
|
|
|
var state = this.props.store.getState()
|
|
var state = this.props.store.getState()
|
|
|
- initSelected = state.nodes.filter(function (node) {
|
|
|
|
|
- return ( -1 !== DBG_INIT_SELECTED.indexOf(node.id));
|
|
|
|
|
|
|
+ initSelected = DBG_INIT_SELECTED.map(function (fid) {
|
|
|
|
|
+ return state.allNodesSet.get(fid)
|
|
|
})
|
|
})
|
|
|
this.props.store.dispatch( this.props.storeActions.setSelected(initSelected) )
|
|
this.props.store.dispatch( this.props.storeActions.setSelected(initSelected) )
|
|
|
}
|
|
}
|
|
@@ -695,7 +570,7 @@ var p5UI__RaportOutputPanel = createReactClass({
|
|
|
render: function () {
|
|
render: function () {
|
|
|
var state = this.props.store.getState()
|
|
var state = this.props.store.getState()
|
|
|
DBG && console.log('DBG:render - state', state);
|
|
DBG && console.log('DBG:render - state', state);
|
|
|
- var nodes = state.nodes || [];
|
|
|
|
|
|
|
+ var nodes = state.allNodesSet.map(function (node) { return node; });
|
|
|
|
|
|
|
|
return h(React.Fragment, {}, [
|
|
return h(React.Fragment, {}, [
|
|
|
h(Typeahead, {
|
|
h(Typeahead, {
|