Skip to content
Snippets Groups Projects
Commit 7cbcf550 authored by Hartung, Michael's avatar Hartung, Michael
Browse files

seed selection based on groups and all nodes

parent 770542de
No related branches found
No related tags found
No related merge requests found
...@@ -49,6 +49,7 @@ import { LicenseAgreementComponent } from './components/license-agreement/licens ...@@ -49,6 +49,7 @@ import { LicenseAgreementComponent } from './components/license-agreement/licens
import { QuickDrugTargetComponent } from './components/quick-drug-target/quick-drug-target.component'; import { QuickDrugTargetComponent } from './components/quick-drug-target/quick-drug-target.component';
import { QuickDrugComponent } from './components/quick-drug/quick-drug.component'; import { QuickDrugComponent } from './components/quick-drug/quick-drug.component';
import { ToastComponent } from './components/toast/toast.component'; import { ToastComponent } from './components/toast/toast.component';
import { GroupSelectionComponent } from './pages/explorer-page/group-selection/group-selection.component';
@NgModule({ @NgModule({
...@@ -79,6 +80,7 @@ import { ToastComponent } from './components/toast/toast.component'; ...@@ -79,6 +80,7 @@ import { ToastComponent } from './components/toast/toast.component';
QuickDrugTargetComponent, QuickDrugTargetComponent,
QuickDrugComponent, QuickDrugComponent,
ToastComponent, ToastComponent,
GroupSelectionComponent,
], ],
imports: [ imports: [
BrowserModule, BrowserModule,
......
...@@ -121,7 +121,7 @@ const defaultNodeGroup: NodeGroup = { ...@@ -121,7 +121,7 @@ const defaultNodeGroup: NodeGroup = {
borderWidthSelected: 2 borderWidthSelected: 2
}; };
const connectorNodeGroup: NodeGroup = JSON.parse(JSON.stringify(defaultNodeGroup)); const connectorNodeGroup: NodeGroup = JSON.parse(JSON.stringify(defaultNodeGroup));
connectorNodeGroup.groupName = 'Connector Node'; connectorNodeGroup.groupName = 'Connector Nodes';
// @ts-ignore // @ts-ignore
/** /**
......
...@@ -471,7 +471,41 @@ ...@@ -471,7 +471,41 @@
<footer class="card-footer"> <footer class="card-footer">
<a <a
(click)="analysis.invertSelection(networkHandler.activeNetwork.currentViewNodes)" (click)="analysis.addAllToSelection()"
class="card-footer-item text-primary"
tooltipPosition="top"
pTooltip="Add all proteins to the selection."
>
<span class="icon">
<i class="fa fa-plus"></i>
</span>
<span> Add all </span>
</a>
</footer>
<footer class="card-footer">
<a
class="card-footer-item text-primary"
tooltipPosition="top"
pTooltip="Add all proteins to the selection."
>
<span class="icon">
<i class="fa fa-plus"></i>
</span>
<span class="is-fullwidth">
<app-group-selection
(selectGroupEmitter)="analysis.addGroupToSelection($event)"
[nodeGroups]="drugstoneConfig.config.nodeGroups"
></app-group-selection>
</span>
</a>
</footer>
<footer class="card-footer">
<a
(click)="
analysis.invertSelection(
networkHandler.activeNetwork.currentViewNodes
)
"
class="card-footer-item text-primary" class="card-footer-item text-primary"
tooltipPosition="top" tooltipPosition="top"
pTooltip="Invert the current selection." pTooltip="Invert the current selection."
......
...@@ -591,12 +591,4 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit { ...@@ -591,12 +591,4 @@ export class ExplorerPageComponent implements OnInit, AfterViewInit {
this.taskEvent.emit(eventObject); this.taskEvent.emit(eventObject);
} }
// //TODO check if used
// setInputNetwork(network: any) {
// if (network == null)
// this.analysis.inputNetwork = { nodes: this.proteins, edges: this.edges }
// else
// this.analysis.inputNetwork = network;
// }
//
} }
<span class="add-group-selector">
<ng-select
[items]="_nodeGroupsList"
bindLabel="groupName"
bindValue="groupName"
[virtualScroll]="true"
[placeholder]="getAddGroupLabel()"
(change)="selectGroup($event)"
pTooltip="Select all nodes of a group."
[tooltipStyleClass]="'drgstn drgstn-tooltip drgstn-tooltip-right'"
tooltipPosition="right"
[clearable]="false"
>
<ng-template ng-option-tmp let-item="item">
<span>{{ item.groupName }}</span>
</ng-template>
</ng-select>
</span>
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { GroupSelectionComponent } from './group-selection.component';
describe('GroupSelectionComponent', () => {
let component: GroupSelectionComponent;
let fixture: ComponentFixture<GroupSelectionComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ GroupSelectionComponent ]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(GroupSelectionComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { NodeGroup } from 'src/app/config';
@Component({
selector: 'app-group-selection',
templateUrl: './group-selection.component.html',
styleUrls: ['./group-selection.component.scss']
})
export class GroupSelectionComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
// undefined groupName is selected node group
private unselecableGroups = ['Drug', 'Disorders', undefined, 'Seed Nodes', 'Default Node Group', 'Connector Nodes', 'Found Nodes'];
public _nodeGroupsList: NodeGroup[];
@Output() selectGroupEmitter: EventEmitter<NodeGroup> = new EventEmitter();
@Input() set nodeGroups(value: { string: NodeGroup }) {
this._nodeGroupsList = Object.values(value).filter(nodeGroup => !this.unselecableGroups.includes(nodeGroup.groupName));
console.log(this._nodeGroupsList)
}
public selectedGroup = null;
selectGroup(item) {
if (item === undefined) {
return
}
this.selectedGroup = item;
this.selectGroupEmitter.emit(item);
}
getAddGroupLabel() {
if (this.selectedGroup != null)
return ""
return "Group";
}
}
...@@ -7,6 +7,7 @@ import {NetexControllerService} from '../netex-controller/netex-controller.servi ...@@ -7,6 +7,7 @@ import {NetexControllerService} from '../netex-controller/netex-controller.servi
import {DrugstoneConfigService} from "../drugstone-config/drugstone-config.service"; import {DrugstoneConfigService} from "../drugstone-config/drugstone-config.service";
import {NetworkHandlerService} from "../network-handler/network-handler.service"; import {NetworkHandlerService} from "../network-handler/network-handler.service";
import { ToastService } from '../toast/toast.service'; import { ToastService } from '../toast/toast.service';
import { NodeGroup } from 'src/app/config';
export type AlgorithmType = export type AlgorithmType =
'trustrank' 'trustrank'
...@@ -152,28 +153,52 @@ export class AnalysisService { ...@@ -152,28 +153,52 @@ export class AnalysisService {
this.selectListSubject.next({items: removedWrappers, selected: false}); this.selectListSubject.next({items: removedWrappers, selected: false});
} }
public addSeeds(nodes) { public addGroupToSelection(group: NodeGroup) {
const addedWrappers: Wrapper[] = []; const wrappers: Wrapper[] = [];
nodes.forEach((node) => { this.networkHandler.activeNetwork.currentViewNodes.forEach((node) => {
if (node.isSeed === true && !this.inSelection(node)) { if (node.groupName !== group.groupName || node.drugstoneType !== 'protein') {
addedWrappers.push(node); // only consider nodes of group and proteins
this.selectedItems.set(node.id, node); return
} }
wrappers.push(getWrapperFromNode(node));
}); });
this.selectListSubject.next({items: addedWrappers, selected: true}); this.addItems(wrappers)
} }
public removeSeeds(nodes) { public addAllToSelection() {
const removedWrappers: Wrapper[] = []; const wrappers: Wrapper[] = [];
nodes.forEach((node) => { this.networkHandler.activeNetwork.currentViewNodes.forEach((node) => {
if (node.isSeed === true && this.inSelection(node)) { if (node.drugstoneType !== 'protein') {
removedWrappers.push(node); // only consider proteins
this.selectedItems.delete(node.id); return
} }
wrappers.push(getWrapperFromNode(node));
}); });
this.selectListSubject.next({items: removedWrappers, selected: false}); this.addItems(wrappers)
} }
// public addSeeds(nodes) {
// const addedWrappers: Wrapper[] = [];
// nodes.forEach((node) => {
// if (node.isSeed === true && !this.inSelection(node)) {
// addedWrappers.push(node);
// this.selectedItems.set(node.id, node);
// }
// });
// this.selectListSubject.next({items: addedWrappers, selected: true});
// }
// public removeSeeds(nodes) {
// const removedWrappers: Wrapper[] = [];
// nodes.forEach((node) => {
// if (node.isSeed === true && this.inSelection(node)) {
// removedWrappers.push(node);
// this.selectedItems.delete(node.id);
// }
// });
// this.selectListSubject.next({items: removedWrappers, selected: false});
// }
public invertSelection(nodes) { public invertSelection(nodes) {
const newSelection = []; const newSelection = [];
nodes.forEach((node: Node) => { nodes.forEach((node: Node) => {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment