Expand acceleration dashboard widgets & improve responsiveness

This commit is contained in:
Mononaut 2024-02-07 21:40:22 +00:00
parent 29e4a581e7
commit ba0a3d004d
No known key found for this signature in database
GPG Key ID: A3F058E41374C04E
6 changed files with 60 additions and 17 deletions

View File

@ -27,12 +27,6 @@
</form> </form>
</div> </div>
<div *ngIf="widget">
<div class="item">
<h5 class="card-title" i18n="acceleration.total-bid-boost">Total Bid Boost</h5>
</div>
</div>
<div [class.chart]="!widget" [class.chart-widget]="widget" echarts [initOpts]="chartInitOptions" [options]="chartOptions" <div [class.chart]="!widget" [class.chart-widget]="widget" echarts [initOpts]="chartInitOptions" [options]="chartOptions"
(chartInit)="onChartInit($event)"> (chartInit)="onChartInit($event)">
</div> </div>

View File

@ -53,11 +53,6 @@
padding-bottom: 55px; padding-bottom: 55px;
} }
} }
.chart-widget {
width: 100%;
height: 100%;
max-height: 290px;
}
h5 { h5 {
margin-bottom: 10px; margin-bottom: 10px;

View File

@ -1,6 +1,6 @@
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnDestroy, OnInit } from '@angular/core'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnDestroy, OnInit } from '@angular/core';
import { EChartsOption, graphic } from 'echarts'; import { EChartsOption, graphic } from 'echarts';
import { Observable, Subscription, combineLatest } from 'rxjs'; import { Observable, Subscription, combineLatest, fromEvent } from 'rxjs';
import { map, max, startWith, switchMap, tap } from 'rxjs/operators'; import { map, max, startWith, switchMap, tap } from 'rxjs/operators';
import { ApiService } from '../../../services/api.service'; import { ApiService } from '../../../services/api.service';
import { SeoService } from '../../../services/seo.service'; import { SeoService } from '../../../services/seo.service';
@ -28,6 +28,7 @@ import { Acceleration } from '../../../interfaces/node-api.interface';
}) })
export class AccelerationFeesGraphComponent implements OnInit, OnDestroy { export class AccelerationFeesGraphComponent implements OnInit, OnDestroy {
@Input() widget: boolean = false; @Input() widget: boolean = false;
@Input() height: number | string = '200';
@Input() right: number | string = 45; @Input() right: number | string = 45;
@Input() left: number | string = 75; @Input() left: number | string = 75;
@Input() accelerations$: Observable<Acceleration[]>; @Input() accelerations$: Observable<Acceleration[]>;
@ -74,6 +75,7 @@ export class AccelerationFeesGraphComponent implements OnInit, OnDestroy {
this.statsObservable$ = combineLatest([ this.statsObservable$ = combineLatest([
(this.accelerations$ || this.apiService.getAccelerationHistory$({ timeframe: this.miningWindowPreference })), (this.accelerations$ || this.apiService.getAccelerationHistory$({ timeframe: this.miningWindowPreference })),
this.apiService.getHistoricalBlockFees$(this.miningWindowPreference), this.apiService.getHistoricalBlockFees$(this.miningWindowPreference),
fromEvent(window, 'resize').pipe(startWith(null)),
]).pipe( ]).pipe(
tap(([accelerations, blockFeesResponse]) => { tap(([accelerations, blockFeesResponse]) => {
this.prepareChartOptions(accelerations, blockFeesResponse.body); this.prepareChartOptions(accelerations, blockFeesResponse.body);
@ -173,6 +175,7 @@ export class AccelerationFeesGraphComponent implements OnInit, OnDestroy {
], ],
animation: false, animation: false,
grid: { grid: {
height: this.height,
right: this.right, right: this.right,
left: this.left, left: this.left,
bottom: this.widget ? 30 : 80, bottom: this.widget ? 30 : 80,

View File

@ -37,6 +37,11 @@
<div class="col" style="margin-bottom: 1.47rem"> <div class="col" style="margin-bottom: 1.47rem">
<div class="card"> <div class="card">
<div class="card-body pl-lg-3 pr-lg-3 pl-2 pr-2"> <div class="card-body pl-lg-3 pr-lg-3 pl-2 pr-2">
<a class="title-link" href="" [routerLink]="['/mempool-block/0' | relativeUrl]">
<h5 class="card-title d-inline" i18n="dashboard.next-block">Next Block</h5>
<span>&nbsp;</span>
<fa-icon [icon]="['fas', 'external-link-alt']" [fixedWidth]="true" style="vertical-align: 'text-top'; font-size: 13px; color: #4a68b9"></fa-icon>
</a>
<div class="mempool-block-wrapper"> <div class="mempool-block-wrapper">
<app-mempool-block-overview [index]="0" [overrideColors]="getAcceleratorColor"></app-mempool-block-overview> <app-mempool-block-overview [index]="0" [overrideColors]="getAcceleratorColor"></app-mempool-block-overview>
</div> </div>
@ -48,7 +53,15 @@
<div class="col" style="margin-bottom: 1.47rem"> <div class="col" style="margin-bottom: 1.47rem">
<div class="card graph-card"> <div class="card graph-card">
<div class="card-body pl-2 pr-2"> <div class="card-body pl-2 pr-2">
<app-acceleration-fees-graph [attr.data-cy]="'acceleration-fees'" [widget]=true [accelerations$]="accelerations$"></app-acceleration-fees-graph> <h5 class="card-title" i18n="acceleration.total-bid-boost">Total Bid Boost</h5>
<div class="mempool-graph">
<app-acceleration-fees-graph
[height]="graphHeight"
[attr.data-cy]="'acceleration-fees'"
[widget]=true
[accelerations$]="accelerations$"
></app-acceleration-fees-graph>
</div>
<div class="mt-1"><a [attr.data-cy]="'acceleration-fees-view-more'" [routerLink]="['/graphs/acceleration/fees' | relativeUrl]" i18n="dashboard.view-more">View more &raquo;</a></div> <div class="mt-1"><a [attr.data-cy]="'acceleration-fees-view-more'" [routerLink]="['/graphs/acceleration/fees' | relativeUrl]" i18n="dashboard.view-more">View more &raquo;</a></div>
</div> </div>
</div> </div>

View File

@ -17,6 +17,16 @@
} }
} }
.mempool-graph {
height: 295px;
@media (min-width: 768px) {
height: 325px;
}
@media (min-width: 992px) {
height: 400px;
}
}
.card-title { .card-title {
font-size: 1rem; font-size: 1rem;
color: #4a68b9; color: #4a68b9;
@ -135,7 +145,12 @@
} }
.card { .card {
height: 385px; @media (min-width: 768px) {
height: 420px;
}
@media (min-width: 992px) {
height: 500px;
}
} }
.list-card { .list-card {
height: 410px; height: 410px;
@ -145,7 +160,16 @@
} }
.mempool-block-wrapper { .mempool-block-wrapper {
max-height: 380px; max-height: 430px;
max-width: 380px; max-width: 430px;
margin: auto; margin: auto;
@media (min-width: 768px) {
max-height: 344px;
max-width: 344px;
}
@media (min-width: 992px) {
max-height: 430px;
max-width: 430px;
}
} }

View File

@ -1,4 +1,4 @@
import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ChangeDetectionStrategy, Component, HostListener, OnInit } from '@angular/core';
import { SeoService } from '../../../services/seo.service'; import { SeoService } from '../../../services/seo.service';
import { WebsocketService } from '../../../services/websocket.service'; import { WebsocketService } from '../../../services/websocket.service';
import { Acceleration, BlockExtended } from '../../../interfaces/node-api.interface'; import { Acceleration, BlockExtended } from '../../../interfaces/node-api.interface';
@ -30,6 +30,8 @@ export class AcceleratorDashboardComponent implements OnInit {
minedAccelerations$: Observable<Acceleration[]>; minedAccelerations$: Observable<Acceleration[]>;
loadingBlocks: boolean = true; loadingBlocks: boolean = true;
graphHeight: number = 300;
constructor( constructor(
private seoService: SeoService, private seoService: SeoService,
private websocketService: WebsocketService, private websocketService: WebsocketService,
@ -40,6 +42,7 @@ export class AcceleratorDashboardComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.onResize();
this.websocketService.want(['blocks', 'mempool-blocks', 'stats']); this.websocketService.want(['blocks', 'mempool-blocks', 'stats']);
this.pendingAccelerations$ = interval(30000).pipe( this.pendingAccelerations$ = interval(30000).pipe(
@ -121,4 +124,15 @@ export class AcceleratorDashboardComponent implements OnInit {
return normalColors[feeLevelIndex] || normalColors[mempoolFeeColors.length - 1]; return normalColors[feeLevelIndex] || normalColors[mempoolFeeColors.length - 1];
} }
} }
@HostListener('window:resize', ['$event'])
onResize(): void {
if (window.innerWidth >= 992) {
this.graphHeight = 330;
} else if (window.innerWidth >= 768) {
this.graphHeight = 245;
} else {
this.graphHeight = 210;
}
}
} }