Graphs loading indicators update

This commit is contained in:
natsoni 2024-05-23 18:40:48 +02:00
parent 2341b1d79e
commit 2c04896397
No known key found for this signature in database
GPG Key ID: C65917583181743B
17 changed files with 27 additions and 30 deletions

View File

@ -46,7 +46,7 @@
</div> </div>
<div [class.chart]="!widget" [class.chart-widget]="widget" *browserOnly [style]="{ height: widget ? ((height + 20) + 'px') : null}" echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div [class.chart]="!widget" [class.chart-widget]="widget" *browserOnly [style]="{ height: widget ? ((height + 20) + 'px') : null}" echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -63,7 +63,7 @@
</div> </div>
<div [class.chart]="!widget" [class.chart-widget]="widget" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div [class.chart]="!widget" [class.chart-widget]="widget" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -37,7 +37,7 @@
</div> </div>
<div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -98,7 +98,6 @@ export class BlockFeesSubsidyGraphComponent implements OnInit {
this.storageService.setValue('miningWindowPreference', timespan); this.storageService.setValue('miningWindowPreference', timespan);
this.timespan = timespan; this.timespan = timespan;
this.zoomTimeSpan = timespan; this.zoomTimeSpan = timespan;
this.isLoading = true;
return this.apiService.getHistoricalBlockFees$(timespan) return this.apiService.getHistoricalBlockFees$(timespan)
.pipe( .pipe(
tap((response) => { tap((response) => {

View File

@ -46,7 +46,7 @@
</div> </div>
<div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -38,7 +38,7 @@
</div> </div>
<div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -45,7 +45,7 @@
</div> </div>
<div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -55,7 +55,7 @@
</div> </div>
<div [class]="!widget ? 'chart' : 'chart-widget'" *browserOnly [style]="{ height: widget ? ((height + 20) + 'px') : null}" echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div [class]="!widget ? 'chart' : 'chart-widget'" *browserOnly [style]="{ height: widget ? ((height + 20) + 'px') : null}" echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -32,7 +32,7 @@
</div> </div>
<div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div class="chart" *browserOnly echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -1,5 +1,5 @@
<div class="echarts" *browserOnly echarts [initOpts]="mempoolStatsChartInitOption" [options]="mempoolStatsChartOption" (chartRendered)="rendered()" <div class="echarts" *browserOnly echarts [initOpts]="mempoolStatsChartInitOption" [options]="mempoolStatsChartOption" (chartRendered)="rendered()"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>

View File

@ -32,8 +32,8 @@ export class IncomingTransactionsGraphComponent implements OnInit, OnChanges, On
@Input() template: ('widget' | 'advanced') = 'widget'; @Input() template: ('widget' | 'advanced') = 'widget';
@Input() windowPreferenceOverride: string; @Input() windowPreferenceOverride: string;
@Input() outlierCappingEnabled: boolean = false; @Input() outlierCappingEnabled: boolean = false;
@Input() isLoading: boolean;
isLoading = true;
mempoolStatsChartOption: EChartsOption = {}; mempoolStatsChartOption: EChartsOption = {};
mempoolStatsChartInitOption = { mempoolStatsChartInitOption = {
renderer: 'svg' renderer: 'svg'
@ -52,8 +52,6 @@ export class IncomingTransactionsGraphComponent implements OnInit, OnChanges, On
) { } ) { }
ngOnInit() { ngOnInit() {
this.isLoading = true;
this.rateUnitSub = this.stateService.rateUnits$.subscribe(rateUnits => { this.rateUnitSub = this.stateService.rateUnits$.subscribe(rateUnits => {
this.weightMode = rateUnits === 'wu'; this.weightMode = rateUnits === 'wu';
if (this.data) { if (this.data) {
@ -79,7 +77,6 @@ export class IncomingTransactionsGraphComponent implements OnInit, OnChanges, On
if (!this.data) { if (!this.data) {
return; return;
} }
this.isLoading = false;
} }
/** /**

View File

@ -1,4 +1,5 @@
<div *browserOnly echarts class="echarts" (chartInit)="onChartReady($event)" (chartRendered)="rendered()" [initOpts]="mempoolVsizeFeesInitOptions" [options]="mempoolVsizeFeesOptions"></div> <div *browserOnly echarts class="echarts" (chartInit)="onChartReady($event)" (chartRendered)="rendered()" [initOpts]="mempoolVsizeFeesInitOptions"
[options]="mempoolVsizeFeesOptions" [style]="{opacity: isLoading ? 0.5 : 1}"></div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>
</div> </div>

View File

@ -35,8 +35,8 @@ export class MempoolGraphComponent implements OnInit, OnChanges {
@Input() template: ('widget' | 'advanced') = 'widget'; @Input() template: ('widget' | 'advanced') = 'widget';
@Input() showZoom = true; @Input() showZoom = true;
@Input() windowPreferenceOverride: string; @Input() windowPreferenceOverride: string;
@Input() isLoading: boolean;
isLoading = true;
mempoolVsizeFeesData: any; mempoolVsizeFeesData: any;
mempoolVsizeFeesOptions: EChartsOption; mempoolVsizeFeesOptions: EChartsOption;
mempoolVsizeFeesInitOptions = { mempoolVsizeFeesInitOptions = {
@ -65,7 +65,6 @@ export class MempoolGraphComponent implements OnInit, OnChanges {
) { } ) { }
ngOnInit(): void { ngOnInit(): void {
this.isLoading = true;
this.inverted = this.storageService.getValue('inverted-graph') === 'true'; this.inverted = this.storageService.getValue('inverted-graph') === 'true';
this.isWidget = this.template === 'widget'; this.isWidget = this.template === 'widget';
this.showCount = !this.isWidget && !this.hideCount; this.showCount = !this.isWidget && !this.hideCount;
@ -86,7 +85,6 @@ export class MempoolGraphComponent implements OnInit, OnChanges {
if (!this.data) { if (!this.data) {
return; return;
} }
this.isLoading = false;
} }
onChartReady(myChart: any) { onChartReady(myChart: any) {

View File

@ -77,14 +77,14 @@
<div [class]="!widget ? '' : 'pb-0'" class="container pb-lg-0"> <div [class]="!widget ? '' : 'pb-0'" class="container pb-lg-0">
<div [class]="widget ? 'chart-widget' : 'chart'" *browserOnly [style]="{ height: widget ? (height + 'px') : null}" echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div [class]="widget ? 'chart-widget' : 'chart'" *browserOnly [style]="{ height: widget ? (height + 'px') : null}" echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)" [style]="{opacity: isLoading ? 0.5 : 1}">
</div> </div>
<div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading"> <div class="text-center loadingGraphs" *ngIf="!stateService.isBrowser || isLoading">
<div class="spinner-border text-light"></div> <div class="spinner-border text-light"></div>
</div> </div>
<table *ngIf="widget === false" class="table table-borderless text-center pools-table"> <table *ngIf="widget === false" class="table table-borderless text-center pools-table" [style]="{opacity: isLoading ? 0.5 : 1}">
<thead> <thead>
<tr> <tr>
<th class="d-none d-md-table-cell" i18n="mining.rank">Rank</th> <th class="d-none d-md-table-cell" i18n="mining.rank">Rank</th>

View File

@ -21,7 +21,7 @@
</a> </a>
</div> </div>
<div class="btn-toggle-rows" name="radioBasic"> <div class="btn-toggle-rows" name="radioBasic">
<div class="btn-group btn-group-toggle"> <div class="btn-group btn-group-toggle" [class]="{'disabled': isLoading}">
<label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '2h'"> <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '2h'">
<input type="radio" [value]="'2h'" [routerLink]="['/graphs' | relativeUrl]" fragment="2h" formControlName="dateSpan"> 2H <input type="radio" [value]="'2h'" [routerLink]="['/graphs' | relativeUrl]" fragment="2h" formControlName="dateSpan"> 2H
(LIVE) (LIVE)
@ -40,7 +40,7 @@
<input type="radio" [value]="'3m'" [routerLink]="['/graphs' | relativeUrl]" fragment="3m" formControlName="dateSpan"> 3M <input type="radio" [value]="'3m'" [routerLink]="['/graphs' | relativeUrl]" fragment="3m" formControlName="dateSpan"> 3M
</label> </label>
</div> </div>
<div class="btn-group btn-group-toggle"> <div class="btn-group btn-group-toggle" [class]="{'disabled': isLoading}">
<label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '6m'"> <label class="btn btn-primary btn-sm" [class.active]="radioGroupForm.get('dateSpan').value === '6m'">
<input type="radio" [value]="'6m'" [routerLink]="['/graphs' | relativeUrl]" fragment="6m" formControlName="dateSpan"> 6M <input type="radio" [value]="'6m'" [routerLink]="['/graphs' | relativeUrl]" fragment="6m" formControlName="dateSpan"> 6M
</label> </label>
@ -94,13 +94,12 @@
</button> </button>
</div> </div>
</form> </form>
<div class="spinner-border text-light bootstrap-spinner" *ngIf="spinnerLoading && mempoolStats.length"></div>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="incoming-transactions-graph"> <div class="incoming-transactions-graph">
<app-mempool-graph #mempoolgraph dir="ltr" [template]="'advanced'" [hideCount]="!showCount" <app-mempool-graph #mempoolgraph dir="ltr" [template]="'advanced'" [hideCount]="!showCount"
[limitFilterFee]="filterFeeIndex" [height]="500" [left]="65" [right]="showCount ? 50 : 10" [limitFilterFee]="filterFeeIndex" [height]="500" [left]="65" [right]="showCount ? 50 : 10"
[data]="mempoolStats && mempoolStats.length ? mempoolStats : null"></app-mempool-graph> [data]="mempoolStats && mempoolStats.length ? mempoolStats : null" [isLoading]="isLoading"></app-mempool-graph>
</div> </div>
</div> </div>
</div> </div>
@ -128,7 +127,7 @@
<div class="card-body"> <div class="card-body">
<div class="incoming-transactions-graph"> <div class="incoming-transactions-graph">
<app-incoming-transactions-graph #incominggraph [height]="500" [left]="65" [template]="'advanced'" <app-incoming-transactions-graph #incominggraph [height]="500" [left]="65" [template]="'advanced'"
[data]="mempoolTransactionsWeightPerSecondData" [outlierCappingEnabled]="outlierCappingEnabled"></app-incoming-transactions-graph> [data]="mempoolTransactionsWeightPerSecondData" [outlierCappingEnabled]="outlierCappingEnabled" [isLoading]="isLoading"></app-incoming-transactions-graph>
</div> </div>
</div> </div>
</div> </div>

View File

@ -231,4 +231,9 @@
@media (max-width: 767px) { @media (max-width: 767px) {
display: block; display: block;
} }
}
.disabled {
pointer-events: none;
opacity: 0.5;
} }

View File

@ -26,8 +26,7 @@ export class StatisticsComponent implements OnInit {
network = ''; network = '';
loading = true; isLoading = true;
spinnerLoading = false;
feeLevels = feeLevels; feeLevels = feeLevels;
chartColors = chartColors; chartColors = chartColors;
filterSize = 100000; filterSize = 100000;
@ -90,7 +89,7 @@ export class StatisticsComponent implements OnInit {
.pipe( .pipe(
switchMap(() => { switchMap(() => {
this.timespan = this.radioGroupForm.controls.dateSpan.value; this.timespan = this.radioGroupForm.controls.dateSpan.value;
this.spinnerLoading = true; this.isLoading = true;
if (this.radioGroupForm.controls.dateSpan.value === '2h') { if (this.radioGroupForm.controls.dateSpan.value === '2h') {
this.websocketService.want(['blocks', 'live-2h-chart']); this.websocketService.want(['blocks', 'live-2h-chart']);
return this.apiService.list2HStatistics$(); return this.apiService.list2HStatistics$();
@ -131,8 +130,7 @@ export class StatisticsComponent implements OnInit {
.subscribe((mempoolStats: any) => { .subscribe((mempoolStats: any) => {
this.mempoolStats = mempoolStats; this.mempoolStats = mempoolStats;
this.handleNewMempoolData(this.mempoolStats.concat([])); this.handleNewMempoolData(this.mempoolStats.concat([]));
this.loading = false; this.isLoading = false;
this.spinnerLoading = false;
}); });
this.stateService.live2Chart$ this.stateService.live2Chart$