Skip to content

Commit 56f2d3d

Browse files
committed
asymmetry: enable filtering on SymmetryArrows, BackwardTravelTime, Asymmetric Trainruns
Signed-off-by: Louis Greiner <[email protected]>
1 parent 5f2ad98 commit 56f2d3d

File tree

14 files changed

+308
-19
lines changed

14 files changed

+308
-19
lines changed

src/app/data-structures/business.data.structures.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,15 +294,18 @@ export interface FilterSettingDto {
294294
filterNoteLabels: number[]; // labels to filter out (labels only of type - LabelRef: note)
295295
filterTrainrunLabels: number[]; // labels to filter out (labels only of type - LabelRef: trainrun)
296296
filterDirectionArrows: boolean; // flag for trainrun direction arrows (hide/show)
297+
filterAsymmetryArrows: boolean; // flag for trainrun section asymmetry arrows (hide/show)
297298
filterArrivalDepartureTime: boolean; // flag for arrival and departure time filtering (hide/show)
298299
filterTravelTime: boolean; // flag for travel time filter (hide/show)
300+
filterBackwardTravelTime: boolean; // flag for trainrun section backward travel times (hide/show)
299301
filterTrainrunName: boolean; // flag for trainrun time filter (hide/show)
300302
filterConnections: boolean; // flag for connections filtering (hide/show)
301303
filterShowNonStopTime: boolean; // flag for non-stop time filtering (hide/show)
302304
filterTrainrunCategory: TrainrunCategory[]; // list of category to filter out
303305
filterTrainrunFrequency: TrainrunFrequency[]; // list of frequency to filter out
304306
filterTrainrunTimeCategory: TrainrunTimeCategory[]; // list of time categroy to filter out
305307
filterDirection: Direction[]; // list of trainrun direction to filter out
308+
filterSymmetry: boolean[]; // list of trainrun symmetry values (true/false) to filter out
306309
filterAllEmptyNodes: boolean; // flag to filter all empty nodes (hide/show)
307310
filterAllNonStopNodes: boolean; // flag to filter all only non-stop nodes (hide/show)
308311
filterNotes: boolean; // flag to filter notes (hide/show)

src/app/models/filterSettings.model.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,19 @@ export class FilterSetting {
1919
public filterNodeLabels: number[];
2020
public filterNoteLabels: number[];
2121
public filterTrainrunLabels: number[];
22-
public filterDirectionArrows;
22+
public filterDirectionArrows: boolean;
23+
public filterAsymmetryArrows: boolean;
2324
public filterArrivalDepartureTime;
2425
public filterTravelTime;
26+
public filterBackwardTravelTime: boolean;
2527
public filterTrainrunName;
2628
public filterConnections;
2729
public filterShowNonStopTime;
2830
public filterTrainrunCategory: TrainrunCategory[];
2931
public filterTrainrunFrequency: TrainrunFrequency[];
3032
public filterTrainrunTimeCategory: TrainrunTimeCategory[];
3133
public filterDirection: Direction[];
34+
public filterSymmetry: boolean[];
3235
public filterAllEmptyNodes;
3336
public filterAllNonStopNodes;
3437
public filterNotes;
@@ -44,16 +47,19 @@ export class FilterSetting {
4447
filterNodeLabels,
4548
filterNoteLabels,
4649
filterTrainrunLabels,
47-
filterDirectionArrows: filterDirectionArrows,
50+
filterDirectionArrows,
51+
filterAsymmetryArrows,
4852
filterArrivalDepartureTime,
4953
filterTravelTime,
54+
filterBackwardTravelTime,
5055
filterTrainrunName,
5156
filterConnections,
5257
filterShowNonStopTime,
5358
filterTrainrunCategory,
5459
filterTrainrunFrequency,
5560
filterTrainrunTimeCategory,
5661
filterDirection: filterDirection,
62+
filterSymmetry: filterSymmetry,
5763
filterAllEmptyNodes,
5864
filterAllNonStopNodes,
5965
filterNotes,
@@ -68,15 +74,18 @@ export class FilterSetting {
6874
filterNoteLabels: [],
6975
filterTrainrunLabels: [],
7076
filterDirectionArrows: true,
77+
filterAsymmetryArrows: true,
7178
filterArrivalDepartureTime: true,
7279
filterTravelTime: true,
80+
filterBackwardTravelTime: true,
7381
filterTrainrunName: true,
7482
filterConnections: true,
7583
filterShowNonStopTime: true,
7684
filterTrainrunCategory: null,
7785
filterTrainrunFrequency: null,
7886
filterTrainrunTimeCategory: null,
7987
filterDirection: null,
88+
filterSymmetry: null,
8089
filterAllEmptyNodes: false,
8190
filterAllNonStopNodes: false,
8291
filterNotes: false,
@@ -92,15 +101,18 @@ export class FilterSetting {
92101
this.filterNoteLabels = filterNoteLabels;
93102
this.filterTrainrunLabels = filterTrainrunLabels;
94103
this.filterDirectionArrows = filterDirectionArrows;
104+
this.filterAsymmetryArrows = filterAsymmetryArrows;
95105
this.filterArrivalDepartureTime = filterArrivalDepartureTime;
96106
this.filterTravelTime = filterTravelTime;
107+
this.filterBackwardTravelTime = filterBackwardTravelTime;
97108
this.filterTrainrunName = filterTrainrunName;
98109
this.filterConnections = filterConnections;
99110
this.filterShowNonStopTime = filterShowNonStopTime;
100111
this.filterTrainrunCategory = filterTrainrunCategory;
101112
this.filterTrainrunFrequency = filterTrainrunFrequency;
102113
this.filterTrainrunTimeCategory = filterTrainrunTimeCategory;
103114
this.filterDirection = filterDirection;
115+
this.filterSymmetry = filterSymmetry;
104116
this.filterAllEmptyNodes = filterAllEmptyNodes;
105117
this.filterAllNonStopNodes = filterAllNonStopNodes;
106118
this.filterNotes = filterNotes;
@@ -173,15 +185,18 @@ export class FilterSetting {
173185
this.filterNoteLabels.length === 0 &&
174186
this.filterTrainrunLabels.length === 0 &&
175187
this.filterDirectionArrows === true &&
188+
this.filterAsymmetryArrows === true &&
176189
this.filterArrivalDepartureTime === true &&
177190
this.filterTravelTime === true &&
191+
this.filterBackwardTravelTime === true &&
178192
this.filterTrainrunName === true &&
179193
this.filterConnections === true &&
180194
this.filterShowNonStopTime === true &&
181195
this.filterTrainrunCategory.length === trainrunCategoriesLength &&
182196
this.filterTrainrunFrequency.length === frainrunFrequenciesLength &&
183197
this.filterTrainrunTimeCategory.length === trainrunTimeCategoryLength &&
184198
this.filterDirection.length === Object.values(Direction).length &&
199+
this.filterSymmetry.length === 2 &&
185200
this.filterAllEmptyNodes === false &&
186201
this.filterAllNonStopNodes === false &&
187202
this.filterNotes === false &&
@@ -200,15 +215,18 @@ export class FilterSetting {
200215
filterNoteLabels: this.filterNoteLabels,
201216
filterTrainrunLabels: this.filterTrainrunLabels,
202217
filterDirectionArrows: this.filterDirectionArrows,
218+
filterAsymmetryArrows: this.filterAsymmetryArrows,
203219
filterArrivalDepartureTime: this.filterArrivalDepartureTime,
204220
filterTravelTime: this.filterTravelTime,
221+
filterBackwardTravelTime: this.filterBackwardTravelTime,
205222
filterTrainrunName: this.filterTrainrunName,
206223
filterConnections: this.filterConnections,
207224
filterShowNonStopTime: this.filterShowNonStopTime,
208225
filterTrainrunCategory: this.filterTrainrunCategory,
209226
filterTrainrunFrequency: this.filterTrainrunFrequency,
210227
filterTrainrunTimeCategory: this.filterTrainrunTimeCategory,
211228
filterDirection: this.filterDirection,
229+
filterSymmetry: this.filterSymmetry,
212230
filterAllEmptyNodes: this.filterAllEmptyNodes,
213231
filterAllNonStopNodes: this.filterAllNonStopNodes,
214232
filterNotes: this.filterNotes,

src/app/services/data/data.service.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,16 @@ export class DataService implements OnDestroy {
224224
return this.trainrunService.getTrainruns();
225225
}
226226

227+
getTrainrunSections() {
228+
return this.trainrunSectionService.getTrainrunSections();
229+
}
230+
231+
getTrainrunSectionsByTrainrunId(trainrunId: number) {
232+
return this.trainrunSectionService.getAllTrainrunSectionsForTrainrun(
233+
trainrunId,
234+
);
235+
}
236+
227237
getTrainrunCategory(categoryId: number): TrainrunCategory {
228238
const found = this.netzgrafikDtoStore.netzgrafikDto.metadata.trainrunCategories.find(
229239
(trainrunCategory) => trainrunCategory.id === categoryId,

src/app/services/ui/filter.service.ts

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,12 +396,17 @@ export class FilterService implements OnDestroy {
396396
const filterTrainrunSection = this.checkFilterTrainrunLabels(
397397
trainrun.getLabelIds(),
398398
);
399+
const asymmetry = this.dataService.getTrainrunSectionsByTrainrunId(trainrun.getId()).some(
400+
(trainrunSection: TrainrunSection) =>
401+
this.isFilterSymmetryEnabled(trainrunSection.isSymmetric())
402+
);
399403
return (
400404
filterTrainrunSection &&
401405
this.isFilterTrainrunFrequencyEnabled(trainrun.getTrainrunFrequency()) &&
402406
this.isFilterTrainrunCategoryEnabled(trainrun.getTrainrunCategory()) &&
403407
this.isFilterTrainrunTimeCategoryEnabled(trainrun.getTrainrunTimeCategory()) &&
404-
this.isFilterDirectionEnabled(trainrun.getDirection())
408+
this.isFilterDirectionEnabled(trainrun.getDirection()) &&
409+
asymmetry
405410
);
406411
}
407412

@@ -580,6 +585,20 @@ export class FilterService implements OnDestroy {
580585
this.filterChanged();
581586
}
582587

588+
isFilterAsymmetryArrowsEnabled(): boolean {
589+
return this.activeFilterSetting.filterAsymmetryArrows;
590+
}
591+
592+
enableFilterAsymmetryArrows() {
593+
this.activeFilterSetting.filterAsymmetryArrows = true;
594+
this.filterChanged();
595+
}
596+
597+
disableFilterAsymmetryArrows() {
598+
this.activeFilterSetting.filterAsymmetryArrows = false;
599+
this.filterChanged();
600+
}
601+
583602
isFilterArrivalDepartureTimeEnabled(): boolean {
584603
return this.activeFilterSetting.filterArrivalDepartureTime;
585604
}
@@ -622,6 +641,20 @@ export class FilterService implements OnDestroy {
622641
this.filterChanged();
623642
}
624643

644+
isFilterBackwardTravelTimeEnabled(): boolean {
645+
return this.activeFilterSetting.filterBackwardTravelTime;
646+
}
647+
648+
enableFilterBackwardTravelTime() {
649+
this.activeFilterSetting.filterBackwardTravelTime = true;
650+
this.filterChanged();
651+
}
652+
653+
disableFilterBackwardTravelTime() {
654+
this.activeFilterSetting.filterBackwardTravelTime = false;
655+
this.filterChanged();
656+
}
657+
625658
isFilterTrainrunNameEnabled(): boolean {
626659
return this.activeFilterSetting.filterTrainrunName;
627660
}
@@ -774,6 +807,34 @@ export class FilterService implements OnDestroy {
774807
this.filterChanged();
775808
}
776809

810+
isFilterSymmetryEnabled(symmetry: boolean): boolean {
811+
return this.activeFilterSetting.filterSymmetry.includes(
812+
symmetry,
813+
);
814+
}
815+
816+
enableFilterSymmetry(symmetry: boolean) {
817+
if (
818+
!this.activeFilterSetting.filterSymmetry.includes(symmetry)
819+
) {
820+
this.activeFilterSetting.filterSymmetry.push(symmetry);
821+
this.filterChanged();
822+
}
823+
}
824+
825+
disableFilterSymmetry(symmetry: boolean) {
826+
this.activeFilterSetting.filterSymmetry =
827+
this.activeFilterSetting.filterSymmetry.filter(
828+
(sym) => sym !== symmetry,
829+
);
830+
this.filterChanged();
831+
}
832+
833+
resetFilterSymmetry() {
834+
this.activeFilterSetting.filterSymmetry = [true, false];
835+
this.filterChanged();
836+
}
837+
777838
isAnyFilterActive(): boolean {
778839
return (
779840
!this.isDisplayFilteringActive() ||
@@ -825,6 +886,13 @@ export class FilterService implements OnDestroy {
825886
return;
826887
}
827888
});
889+
[true, false].forEach((symmetry: boolean) => {
890+
const isFilter = this.isFilterSymmetryEnabled(symmetry);
891+
if (!isFilter) {
892+
isActive = false;
893+
return;
894+
}
895+
});
828896
return isActive;
829897
}
830898

@@ -838,10 +906,12 @@ export class FilterService implements OnDestroy {
838906
return (
839907
!this.isFilterNotesEnabled() &&
840908
this.isFilterDirectionArrowsEnabled() &&
909+
this.isFilterAsymmetryArrowsEnabled() &&
841910
this.isFilterArrivalDepartureTimeEnabled() &&
842911
this.isFilterConnectionsEnabled() &&
843912
this.isFilterTrainrunNameEnabled() &&
844913
this.isFilterTravelTimeEnabled() &&
914+
this.isFilterBackwardTravelTimeEnabled() &&
845915
this.isFilterShowNonStopTimeEnabled()
846916
);
847917
}
@@ -952,6 +1022,7 @@ export class FilterService implements OnDestroy {
9521022
filterSetting.filterDirection =
9531023
this.dataService.getDirections();
9541024
}
1025+
filterSetting.filterSymmetry = [true, false];
9551026
}
9561027
}
9571028
}

src/app/view/editor-filter-view/editor-filter-view.component.html

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,33 @@ <h2 class="SummaryTitle">{{ 'app.view.editor-filter-view.filter' | translate }}<
5252
</button>
5353
</div>
5454

55-
<div *ngIf="hasOneWayTrainruns()">
55+
<div *ngIf="hasOneWayTrainruns() || isAsymmetryActive()">
5656
<sbb-label class="sbb-mt-m">{{ 'app.view.editor-filter-view.symmetry' | translate }}</sbb-label>
5757
<div class="sbb-trainrun-chip-group">
58-
<button
59-
[class]="getDirectionClassname(direction)"
60-
(click)="onDirectionChanged(direction)"
61-
mode="ghost"
62-
[title]="getDirectionTooltip(direction)"
63-
*ngFor="
64-
let direction of this.dataService.getDirections()
65-
"
66-
>
67-
{{ makeDirectionButtonLabel(direction) }}
68-
</button>
58+
<ng-container *ngIf="hasOneWayTrainruns()">
59+
<button
60+
[class]="getDirectionClassname(direction)"
61+
(click)="onDirectionChanged(direction)"
62+
mode="ghost"
63+
[title]="getDirectionTooltip(direction)"
64+
*ngFor="
65+
let direction of this.dataService.getDirections()
66+
"
67+
>
68+
{{ makeDirectionButtonLabel(direction) }}
69+
</button>
70+
</ng-container>
71+
<ng-container *ngIf="isAsymmetryActive()">
72+
<button
73+
*ngFor="let symmetry of [true, false]"
74+
[class]="getSymmetryClassname(symmetry)"
75+
(click)="onSymmetryChanged(symmetry)"
76+
mode="ghost"
77+
[title]="getSymmetryTooltip(symmetry)"
78+
>
79+
{{ makeSymmetryButtonLabel(symmetry) }}
80+
</button>
81+
</ng-container>
6982
</div>
7083
</div>
7184

@@ -150,6 +163,16 @@ <h2 class="SummaryTitle">{{ 'app.view.editor-filter-view.filter' | translate }}<
150163
(change)="filterDirectionArrowsChanged()"
151164
>{{ 'app.view.editor-filter-view.display-direction-arrows' | translate }}
152165
</sbb-checkbox>
166+
<sbb-checkbox
167+
[(ngModel)]="filterAsymmetryArrows"
168+
(change)="filterAsymmetryArrowsChanged()"
169+
>{{ 'app.view.editor-filter-view.display-asymmetry-arrows' | translate }}
170+
</sbb-checkbox>
171+
<sbb-checkbox
172+
[(ngModel)]="filterBackwardTravelTime"
173+
(change)="filterBackwardTravelTimeChanged()"
174+
>{{ 'app.view.editor-filter-view.display-backward-travel-times' | translate }}
175+
</sbb-checkbox>
153176
</div>
154177

155178
<br />

0 commit comments

Comments
 (0)