Skip to content

Commit 50a36fe

Browse files
authored
Merge pull request #118 from daisybio/112-put-default-brca-for-disease-selection-box-add-number-samples-for-disease-subtype-in-brackets-479
Set breast cancer as default disease
2 parents 5a6b7d2 + f82c80d commit 50a36fe

File tree

3 files changed

+90
-41
lines changed

3 files changed

+90
-41
lines changed

src/app/components/disease-selector/disease-selector.component.ts

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,42 @@
1-
import {Component, computed, effect, input, linkedSignal, OnDestroy, output} from '@angular/core';
2-
import {Dataset} from "../../interfaces";
3-
import {MatFormFieldModule} from "@angular/material/form-field";
4-
import {MatSelectModule} from "@angular/material/select";
5-
import {capitalize} from "lodash";
6-
import {SUBTYPE_DEFAULT} from "../../constants";
1+
import {
2+
Component,
3+
computed,
4+
effect,
5+
input,
6+
linkedSignal,
7+
OnDestroy,
8+
output,
9+
} from '@angular/core';
10+
import { Dataset } from '../../interfaces';
11+
import { MatFormFieldModule } from '@angular/material/form-field';
12+
import { MatSelectModule } from '@angular/material/select';
13+
import { capitalize } from 'lodash';
14+
import { SUBTYPE_DEFAULT } from '../../constants';
715

816
@Component({
917
selector: 'app-disease-selector',
10-
imports: [
11-
MatFormFieldModule,
12-
MatSelectModule,
13-
],
18+
imports: [MatFormFieldModule, MatSelectModule],
1419
templateUrl: './disease-selector.component.html',
15-
styleUrl: './disease-selector.component.scss'
20+
styleUrl: './disease-selector.component.scss',
1621
})
1722
export class DiseaseSelectorComponent implements OnDestroy {
18-
readonly diseases$ = input.required<Dataset[]>()
19-
selected = output<Dataset>()
20-
readonly activeDisease$ = linkedSignal<string>(() => this.diseaseNames$()[0])
21-
readonly activeSubtype = linkedSignal(() => this.possibleSubtypes$().find(subtype => subtype.disease_subtype == null) ?? this.possibleSubtypes$()[0])
23+
readonly diseases$ = input.required<Dataset[]>();
24+
selected = output<Dataset>();
25+
readonly activeDisease$ = linkedSignal(
26+
() =>
27+
this.diseaseNames$().filter((d) => d === 'breast invasive carcinoma')[0]
28+
);
29+
readonly activeSubtype = linkedSignal(
30+
() =>
31+
this.possibleSubtypes$().find(
32+
(subtype) => subtype.disease_subtype == null
33+
) ?? this.possibleSubtypes$()[0]
34+
);
2235
protected readonly capitalize = capitalize;
2336
protected readonly SUBTYPE_DEFAULT = SUBTYPE_DEFAULT;
2437
private readonly _diseaseSubtypeMap$ = computed(() => {
2538
const diseaseSubtypes = new Map<string, Dataset[]>();
26-
(this.diseases$() || []).forEach(disease => {
39+
(this.diseases$() || []).forEach((disease) => {
2740
const diseaseName = disease.disease_name;
2841
if (!diseaseSubtypes.has(diseaseName)) {
2942
diseaseSubtypes.set(diseaseName, []);
@@ -32,9 +45,15 @@ export class DiseaseSelectorComponent implements OnDestroy {
3245
});
3346
return diseaseSubtypes;
3447
});
35-
readonly diseaseNames$ = computed(() => Array.from(this._diseaseSubtypeMap$().keys()).sort())
36-
readonly possibleSubtypes$ = computed(() => this._diseaseSubtypeMap$().get(this.activeDisease$()) ?? [])
37-
private readonly _updateOutput = effect(() => this.selected.emit(this.activeSubtype()))
48+
readonly diseaseNames$ = computed(() =>
49+
Array.from(this._diseaseSubtypeMap$().keys()).sort()
50+
);
51+
readonly possibleSubtypes$ = computed(
52+
() => this._diseaseSubtypeMap$().get(this.activeDisease$()) ?? []
53+
);
54+
private readonly _updateOutput = effect(() =>
55+
this.selected.emit(this.activeSubtype())
56+
);
3857

3958
ngOnDestroy() {
4059
this._updateOutput.destroy();

src/app/interfaces.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { Data } from "@angular/router";
2-
31
export interface Dataset {
42
data_origin: string;
53
dataset_ID: number;

src/app/routes/browse/form/form.component.ts

Lines changed: 52 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ import {
1212
import { MatFormFieldModule } from '@angular/material/form-field';
1313
import { MatSelectModule } from '@angular/material/select';
1414
import { MatExpansionModule } from '@angular/material/expansion';
15-
import { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
16-
import { MatInputModule } from '@angular/material/input';
1715
import {
18-
BrowseQuery,
19-
InteractionSorting,
20-
} from '../../../interfaces';
16+
FormControl,
17+
FormGroup,
18+
ReactiveFormsModule,
19+
Validators,
20+
} from '@angular/forms';
21+
import { MatInputModule } from '@angular/material/input';
22+
import { BrowseQuery, InteractionSorting } from '../../../interfaces';
2123
import { BrowseService } from '../../../services/browse.service';
2224
import { VersionsService } from '../../../services/versions.service';
2325
import _ from 'lodash';
@@ -48,7 +50,7 @@ import { MatCardModule } from '@angular/material/card';
4850
MatCardModule,
4951
InfoComponent,
5052
MatButtonModule,
51-
CommonModule
53+
CommonModule,
5254
],
5355
templateUrl: './form.component.html',
5456
styleUrl: './form.component.scss',
@@ -69,16 +71,37 @@ export class FormComponent {
6971
sortingBetweenness: new FormControl<boolean>(true),
7072
sortingDegree: new FormControl<boolean>(false),
7173
sortingEigenvector: new FormControl<boolean>(false),
72-
maxNodes: new FormControl<number>(10, [Validators.min(0), Validators.max(100)]),
73-
minDegree: new FormControl<number>(1, [Validators.min(0), Validators.max(100)]),
74-
minBetweenness: new FormControl<number>(0.05, [Validators.min(0), Validators.max(1)]),
75-
minEigen: new FormControl<number>(0.1, [Validators.min(0), Validators.max(1)]),
74+
maxNodes: new FormControl<number>(10, [
75+
Validators.min(0),
76+
Validators.max(100),
77+
]),
78+
minDegree: new FormControl<number>(1, [
79+
Validators.min(0),
80+
Validators.max(100),
81+
]),
82+
minBetweenness: new FormControl<number>(0.05, [
83+
Validators.min(0),
84+
Validators.max(1),
85+
]),
86+
minEigen: new FormControl<number>(0.1, [
87+
Validators.min(0),
88+
Validators.max(1),
89+
]),
7690
interactionSorting: new FormControl<string>(
7791
this.getKeys(this.interactionSortings)[0]
7892
),
79-
maxInteractions: new FormControl<number>(100, [Validators.min(0), Validators.max(1000)]),
80-
maxPValue: new FormControl<number>(0.05, [Validators.min(0.025), Validators.max(0.2)]),
81-
minMscor: new FormControl<number>(0.1, [Validators.min(0.1), Validators.max(1)]),
93+
maxInteractions: new FormControl<number>(100, [
94+
Validators.min(0),
95+
Validators.max(1000),
96+
]),
97+
maxPValue: new FormControl<number>(0.05, [
98+
Validators.min(0.025),
99+
Validators.max(0.2),
100+
]),
101+
minMscor: new FormControl<number>(0.1, [
102+
Validators.min(0.1),
103+
Validators.max(1),
104+
]),
82105
});
83106

84107
protected readonly capitalize = _.capitalize;
@@ -88,21 +111,27 @@ export class FormComponent {
88111
this.formGroup.valueChanges.subscribe((val) => {
89112
formSignal.set(val);
90113
// Mark all controls as touched to show validation messages
91-
Object.keys(this.formGroup.controls).forEach(key => {
114+
Object.keys(this.formGroup.controls).forEach((key) => {
92115
this.formGroup.get(key)?.markAsTouched();
93116
});
94117
});
95118

96119
this.formGroup.valueChanges.subscribe((config) => {
97-
if ( !config.sortingDegree && !config.sortingBetweenness && !config.sortingEigenvector ) {
98-
this.formGroup.get('sortingBetweenness')?.setValue(true, { emitEvent: false });
120+
if (
121+
!config.sortingDegree &&
122+
!config.sortingBetweenness &&
123+
!config.sortingEigenvector
124+
) {
125+
this.formGroup
126+
.get('sortingBetweenness')
127+
?.setValue(true, { emitEvent: false });
99128
this.cdr.detectChanges();
100129
config.sortingBetweenness = true;
101130
}
102131
});
103132

104133
effect(() => {
105-
const config = formSignal();
134+
const config = formSignal();
106135
const dataset = this.activeDataset();
107136
if (dataset === undefined) return;
108137
if (!this.formGroup.valid) return;
@@ -119,14 +148,17 @@ export class FormComponent {
119148
}
120149

121150
getKeys(enumType: any): string[] {
122-
return Object.keys(enumType)
151+
return Object.keys(enumType);
123152
}
124153

125154
getEntries(enumType: any): {
126155
key: string;
127156
value: string;
128-
}[] {
129-
return Object.entries(enumType).map(([key, value]) => ({key, value: value as string }));
157+
}[] {
158+
return Object.entries(enumType).map(([key, value]) => ({
159+
key,
160+
value: value as string,
161+
}));
130162
}
131163

132164
trackByKey(item: any): string {

0 commit comments

Comments
 (0)