Skip to content

Commit e8fcd0c

Browse files
authored
Merge branch 'develop' into bugfix/buttonAndHeaderTextOverflow
2 parents d1a0268 + 4cbe5e8 commit e8fcd0c

File tree

5 files changed

+54
-33
lines changed

5 files changed

+54
-33
lines changed

frontend/src/app/modules/aggregation/components/aggregation-chart/aggregation-chart.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div class="card">
22
<div class="aggregation-chart">
3-
<osm-spinner></osm-spinner>
3+
<osm-spinner [spinnerId]="'aggregation-chart-spinner'"></osm-spinner>
44
<div class="filter-dropdown-group">
55
<div class="btn-group pull-left perc-element" data-toggle="buttons" id="stack-bars-switch" *ngIf="!isHidden">
66
<label class="btn btn-sm btn-default" id="switch-beside-button"

frontend/src/app/modules/aggregation/services/aggregation-chart-data.service.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ import { Injectable } from '@angular/core';
22
import {scaleOrdinal} from "d3-scale";
33
import {URL} from "../../../enums/url.enum";
44
import {BarchartDataService} from "./barchart-data.service";
5-
import {BehaviorSubject} from "rxjs";
5+
import {BehaviorSubject, combineLatest, Subject} from "rxjs";
66
import {ResultSelectionCommand} from "../../result-selection/models/result-selection-command.model";
77
import {RemainingResultSelection} from "../../result-selection/models/remaing-result-selection.model";
88
import {AggregationChartDataByMeasurand} from "../models/aggregation-chart-data.model";
99
import {AggregationChartSeries} from "../models/aggregation-chart-series.model";
1010
import {SpinnerService} from "../../shared/services/spinner.service";
1111
import {ActivatedRoute, Params, Router} from "@angular/router";
1212
import {ResultSelectionStore} from "../../result-selection/services/result-selection.store";
13+
import {take, takeUntil} from "rxjs/operators";
1314

1415
@Injectable({
1516
providedIn: 'root'
@@ -115,7 +116,9 @@ export class AggregationChartDataService {
115116
}
116117

117118
getBarchartData(resultSelectionCommand: ResultSelectionCommand,remainingResultSelection: RemainingResultSelection): void {
118-
this.spinnerService.show();
119+
this.spinnerService.showSpinner('aggregation-chart-spinner');
120+
const finishedLoadingAvg$: Subject<void> = new Subject<void>();
121+
const finishedLoadingPercentile$: Subject<void> = new Subject<void>();
119122

120123
const additionalParams: Params = {
121124
selectedFilter: this.selectedFilter,
@@ -126,14 +129,18 @@ export class AggregationChartDataService {
126129

127130
this.resultSelectionStore.writeQueryParams(additionalParams);
128131

132+
combineLatest(finishedLoadingAvg$, finishedLoadingPercentile$).subscribe(() => {
133+
this.spinnerService.hideSpinner('aggregation-chart-spinner');
134+
});
135+
129136
this.barchartDataService.fetchBarchartData<any>(
130137
resultSelectionCommand,
131138
remainingResultSelection,
132139
"avg",
133140
URL.AGGREGATION_BARCHART_DATA
134141
).subscribe(result => {
135142
this.barchartAverageData$.next(this.sortDataByMeasurandOrder(result));
136-
this.spinnerService.hide();
143+
finishedLoadingAvg$.next();
137144
});
138145

139146
this.barchartDataService.fetchBarchartData<any>(
@@ -143,6 +150,7 @@ export class AggregationChartDataService {
143150
URL.AGGREGATION_BARCHART_DATA
144151
).subscribe(result => {
145152
this.barchartMedianData$.next(this.sortDataByMeasurandOrder(result));
153+
finishedLoadingPercentile$.next();
146154
});
147155
}
148156

frontend/src/app/modules/shared/components/spinner/spinner.component.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { Component, OnInit, ElementRef, OnDestroy } from '@angular/core';
1+
import {Component, OnInit, ElementRef, OnDestroy, Input} from '@angular/core';
22
import { Spinner, SpinnerOptions } from 'spin.js';
3-
import { Subscription } from 'rxjs';
43
import {SpinnerService} from "../../services/spinner.service";
54

65
@Component({
@@ -10,31 +9,30 @@ import {SpinnerService} from "../../services/spinner.service";
109
})
1110
export class SpinnerComponent implements OnInit, OnDestroy {
1211

13-
private spinner: any;
12+
private spinner: Spinner;
13+
@Input() spinnerId: string;
1414
public show: boolean = false;
15-
private element: any = null;
16-
private subscription: Subscription = null;
15+
private element: any = undefined;
1716

1817
constructor(private spinnerElement: ElementRef, private spinnerService: SpinnerService) {
1918
this.element = spinnerElement.nativeElement;
2019
}
2120

2221
ngOnInit() {
2322
this.initSpinner();
24-
this.createServiceSubscription();
2523
}
2624

27-
private createServiceSubscription() {
28-
this.subscription = this.spinnerService.spinnerObservable.subscribe(show => {
29-
if (show) {
25+
private createServiceSubscription(): void {
26+
this.spinnerService.activeSpinner$.subscribe((activeSpinner: Set<string>) => {
27+
if (activeSpinner.has(this.spinnerId)) {
3028
this.startSpinner();
3129
} else {
3230
this.stopSpinner();
3331
}
3432
});
3533
}
3634

37-
private initSpinner() {
35+
private initSpinner(): void {
3836
let options: SpinnerOptions = {
3937
lines: 13 // The number of lines to draw
4038
, length: 10 // The length of each line
@@ -54,19 +52,19 @@ export class SpinnerComponent implements OnInit, OnDestroy {
5452
, position: 'absolute' // Element positioning
5553
};
5654
this.spinner = new Spinner(options);
57-
this.startSpinner();
55+
this.createServiceSubscription();
5856
}
5957

6058
ngOnDestroy() {
61-
this.subscription.unsubscribe();
59+
this.spinnerService.activeSpinner$.unsubscribe();
6260
}
6361

64-
startSpinner() {
62+
private startSpinner(): void {
6563
this.show = true;
6664
this.spinner.spin(this.element.firstChild);
6765
}
6866

69-
stopSpinner() {
67+
private stopSpinner(): void {
7068
this.show = false;
7169
this.spinner.stop();
7270
}

frontend/src/app/modules/shared/services/spinner.service.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@ import {BehaviorSubject} from "rxjs";
66
})
77
export class SpinnerService {
88

9-
private spinner$ = new BehaviorSubject<boolean>(false);
9+
activeSpinner$ = new BehaviorSubject<Set<string>>(new Set<string>());
1010

1111
constructor() { }
12-
get spinnerObservable() {
13-
return this.spinner$.asObservable();
14-
}
1512

16-
show() {
17-
this.spinner$.next(true);
13+
showSpinner(spinnerId: string): void {
14+
let activeSpinner: Set<string> = this.activeSpinner$.getValue();
15+
activeSpinner.add(spinnerId);
16+
this.activeSpinner$.next(activeSpinner);
1817
}
1918

20-
hide() {
21-
this.spinner$.next(false);
19+
hideSpinner(spinnerId: string): void {
20+
let activeSpinner: Set<string> = this.activeSpinner$.getValue();
21+
activeSpinner.delete(spinnerId);
22+
this.activeSpinner$.next(activeSpinner);
2223
}
2324
}

package-lock.json

Lines changed: 21 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)