diff --git a/src/app/components/analysis-panel/analysis-panel.component.ts b/src/app/components/analysis-panel/analysis-panel.component.ts index 0dad7c02620d3b98c0ed94aa109e6bad9763580f..24f483cc26fafec8ed71f78ad06b4e5fd4da95fd 100644 --- a/src/app/components/analysis-panel/analysis-panel.component.ts +++ b/src/app/components/analysis-panel/analysis-panel.component.ts @@ -248,6 +248,14 @@ export class AnalysisPanelComponent implements OnInit, OnChanges, AfterViewInit }); }); }).then(() => { + this.networkHandler.activeNetwork.networkInternal.on('dragEnd', (properties) => { + const node_ids = this.networkHandler.activeNetwork.networkInternal.getSelectedNodes(); + if (node_ids.length === 0) { + return; + } + this.analysis.addNodesByIdsToSelection(node_ids); + this.networkHandler.activeNetwork.networkInternal.unselectAll(); + }); this.networkHandler.activeNetwork.networkInternal.on('deselectNode', (properties) => { this.showDetailsChange.emit(null); }); @@ -484,7 +492,14 @@ export class AnalysisPanelComponent implements OnInit, OnChanges, AfterViewInit setTimeout(() => { this.networkHandler.activeNetwork.networkInternal.setData(this.nodeData); }, 1000); - + this.networkHandler.activeNetwork.networkInternal.on('dragEnd', (properties) => { + const node_ids = this.networkHandler.activeNetwork.networkInternal.getSelectedNodes(); + if (node_ids.length === 0) { + return; + } + this.analysis.addNodesByIdsToSelection(node_ids); + this.networkHandler.activeNetwork.networkInternal.unselectAll(); + }); this.networkHandler.activeNetwork.networkInternal.on('deselectNode', (properties) => { this.showDetailsChange.emit(null); }); diff --git a/src/app/pages/explorer-page/explorer-page.component.ts b/src/app/pages/explorer-page/explorer-page.component.ts index 95842d65310ecb6c0b35a60cd7c695d1cd3090d9..9bbe642914da231a35d93ad4b5d3553729ecd93c 100644 --- a/src/app/pages/explorer-page/explorer-page.component.ts +++ b/src/app/pages/explorer-page/explorer-page.component.ts @@ -459,10 +459,20 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit { }); this.networkHandler.activeNetwork.networkInternal.on('dragEnd', (properties) => { - let genes = this.networkHandler.activeNetwork.networkInternal.getSelectedNodes(); - if (genes.length > 0) { - console.log(genes); + let node_ids = this.networkHandler.activeNetwork.networkInternal.getSelectedNodes(); + if (node_ids.length === 0) { + return; + } + this.analysis.addNodesByIdsToSelection(node_ids); + this.networkHandler.activeNetwork.networkInternal.unselectAll(); + }); + this.networkHandler.activeNetwork.networkInternal.on('dragEnd', (properties) => { + let node_ids = this.networkHandler.activeNetwork.networkInternal.getSelectedNodes(); + if (node_ids.length === 0) { + return; } + this.analysis.addNodesByIdsToSelection(node_ids); + this.networkHandler.activeNetwork.networkInternal.unselectAll(); }); this.networkHandler.activeNetwork.networkInternal.on('deselectNode', (properties) => { @@ -549,66 +559,66 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit { this.drugstoneConfig.smallStyle = this.windowWidth < 1250; } - public initNetworkListeners(resolve) { - this.networkHandler.activeNetwork.networkInternal.on('doubleClick', (properties) => { - const nodeIds: Array<string> = properties.nodes; - if (nodeIds != null && nodeIds.length > 0) { - const nodeId = nodeIds[0]; - const node = this.nodeData.nodes.get(nodeId); - if (node.drugstoneId === undefined || node.drugstoneType !== 'protein') { - this.analysis.unmappedNodeToast(); - // skip if node is not a protein mapped to backend - return; - } - const wrapper = getWrapperFromNode(node); - if (this.analysis.inSelection(node)) { - this.analysis.removeItems([wrapper]); - } else { - this.analysis.addItems([wrapper]); - } - } - }); - - this.networkHandler.activeNetwork.networkInternal.on('click', (properties) => { - if (properties.nodes.length === 0 && properties.edges.length === 1) { - // clicked on one edge - const edgeId = properties.edges[0]; - this.networkHandler.activeNetwork.openEdgeSummary(edgeId); - } else { - // clicked not on one edge - const nodeIds: Array<string> = properties.nodes; - if (nodeIds != null && nodeIds.length > 0) { - const nodeId = nodeIds[0]; - const node = this.nodeData.nodes.get(nodeId); - const wrapper = getWrapperFromNode(node); - this.openNodeSummary(wrapper, false); - } else { - this.closeSummary(); - } - } - }); - - this.networkHandler.activeNetwork.networkInternal.on('deselectNode', (properties) => { - this.closeSummary(); - }); - - if (this.networkHandler.activeNetwork.selectedWrapper) { - this.zoomToNode(this.networkHandler.activeNetwork.selectedWrapper.id); - } - - this.networkHandler.activeNetwork.currentViewNodes = this.nodeData.nodes; - this.networkHandler.activeNetwork.currentViewEdges = this.nodeData.edges; - - this.networkHandler.activeNetwork.queryItems = []; - this.networkHandler.activeNetwork.updateQueryItems(); - this.networkHandler.activeNetwork.currentViewProteins = this.networkHandler.activeNetwork.inputNetwork.nodes; - // this.fillQueryItems(this.currentViewNodes); - if (this.networkHandler.activeNetwork.selectedWrapper) { - this.networkHandler.activeNetwork.networkInternal.selectNodes([this.networkHandler.activeNetwork.selectedWrapper.id]); - } - - resolve(true); - } + // public initNetworkListeners(resolve) { + // this.networkHandler.activeNetwork.networkInternal.on('doubleClick', (properties) => { + // const nodeIds: Array<string> = properties.nodes; + // if (nodeIds != null && nodeIds.length > 0) { + // const nodeId = nodeIds[0]; + // const node = this.nodeData.nodes.get(nodeId); + // if (node.drugstoneId === undefined || node.drugstoneType !== 'protein') { + // this.analysis.unmappedNodeToast(); + // // skip if node is not a protein mapped to backend + // return; + // } + // const wrapper = getWrapperFromNode(node); + // if (this.analysis.inSelection(node)) { + // this.analysis.removeItems([wrapper]); + // } else { + // this.analysis.addItems([wrapper]); + // } + // } + // }); + // + // this.networkHandler.activeNetwork.networkInternal.on('click', (properties) => { + // if (properties.nodes.length === 0 && properties.edges.length === 1) { + // // clicked on one edge + // const edgeId = properties.edges[0]; + // this.networkHandler.activeNetwork.openEdgeSummary(edgeId); + // } else { + // // clicked not on one edge + // const nodeIds: Array<string> = properties.nodes; + // if (nodeIds != null && nodeIds.length > 0) { + // const nodeId = nodeIds[0]; + // const node = this.nodeData.nodes.get(nodeId); + // const wrapper = getWrapperFromNode(node); + // this.openNodeSummary(wrapper, false); + // } else { + // this.closeSummary(); + // } + // } + // }); + // + // this.networkHandler.activeNetwork.networkInternal.on('deselectNode', (properties) => { + // this.closeSummary(); + // }); + // + // if (this.networkHandler.activeNetwork.selectedWrapper) { + // this.zoomToNode(this.networkHandler.activeNetwork.selectedWrapper.id); + // } + // + // this.networkHandler.activeNetwork.currentViewNodes = this.nodeData.nodes; + // this.networkHandler.activeNetwork.currentViewEdges = this.nodeData.edges; + // + // this.networkHandler.activeNetwork.queryItems = []; + // this.networkHandler.activeNetwork.updateQueryItems(); + // this.networkHandler.activeNetwork.currentViewProteins = this.networkHandler.activeNetwork.inputNetwork.nodes; + // // this.fillQueryItems(this.currentViewNodes); + // if (this.networkHandler.activeNetwork.selectedWrapper) { + // this.networkHandler.activeNetwork.networkInternal.selectNodes([this.networkHandler.activeNetwork.selectedWrapper.id]); + // } + // + // resolve(true); + // } public async openNodeSummary(item: Wrapper, zoom: boolean) { // close edge summary if open diff --git a/src/app/services/analysis/analysis.service.ts b/src/app/services/analysis/analysis.service.ts index b631e2e49861d23ba2fab6b751de0c61205d12f2..ae29d2cf693450a17b996fcb0dec329cb3baae0e 100644 --- a/src/app/services/analysis/analysis.service.ts +++ b/src/app/services/analysis/analysis.service.ts @@ -213,6 +213,25 @@ export class AnalysisService { } } + public addNodesByIdsToSelection(ids: string[]) { + const wrappers: Wrapper[] = []; + const unmappedNodes = []; + this.networkHandler.activeNetwork.currentViewNodes.forEach((node) => { + if (ids.indexOf(node.id) > -1) { + if (node.drugstoneType !== 'drug' && node.drugstoneType !== 'disorder' && node.drugstoneId === undefined) { + unmappedNodes.push(node.label); + } else { + // only consider proteins + wrappers.push(getWrapperFromNode(node)); + } + } + }); + this.addItems(wrappers); + if (unmappedNodes.length > 0) { + this.unmappedNodesToast(unmappedNodes); + } + } + // Adds first neighbors of selected nodes to selection public addFirstNeighbors() {