Adding fee estimation component to front page

fixes #98
This commit is contained in:
softsimon 2020-07-29 15:16:09 +07:00
parent 4c5ff7714e
commit 9e0097e7b6
No known key found for this signature in database
GPG Key ID: 488D7DCFB5A430D7
5 changed files with 70 additions and 1 deletions

View File

@ -40,6 +40,7 @@ import { StatusViewComponent } from './components/status-view/status-view.compon
import { MinerComponent } from './components/miner/miner.component';
import { SharedModule } from './shared/shared.module';
import { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
import { FeesBoxComponent } from './components/fees-box/fees-box.component';
@NgModule({
declarations: [
@ -70,6 +71,7 @@ import { NgbTypeaheadModule } from '@ng-bootstrap/ng-bootstrap';
AssetsComponent,
MinerComponent,
StatusViewComponent,
FeesBoxComponent,
],
imports: [
BrowserModule,

View File

@ -0,0 +1,19 @@
<table class="table mx-auto text-center" style="width: 500px">
<tr>
<td style="border-top: 0px; width: 33%;">1 hour</td>
<td style="border-top: 0px; width: 33%;">30 minutes</td>
<td style="border-top: 0px; width: 33%;">Next block</td>
</tr>
<tr *ngIf="(feeEstimations$ | async) as feeEstimations; else loadingFees">
<td>{{ feeEstimations.fastestFee }} sat/vB (<app-fiat [value]="feeEstimations.fastestFee * 250"></app-fiat>)</td>
<td>{{ feeEstimations.halfHourFee }} sat/vB (<app-fiat [value]="feeEstimations.halfHourFee * 250"></app-fiat>)</td>
<td>{{ feeEstimations.hourFee }} sat/vB (<app-fiat [value]="feeEstimations.hourFee * 250"></app-fiat>)</td>
</tr>
<ng-template #loadingFees>
<tr>
<td><span class="skeleton-loader"></span></td>
<td><span class="skeleton-loader"></span></td>
<td><span class="skeleton-loader"></span></td>
</tr>
</ng-template>
</table>

View File

@ -0,0 +1,47 @@
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { StateService } from 'src/app/services/state.service';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs';
interface FeeEstimations {
fastestFee: number;
halfHourFee: number;
hourFee: number;
}
@Component({
selector: 'app-fees-box',
templateUrl: './fees-box.component.html',
styleUrls: ['./fees-box.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class FeesBoxComponent implements OnInit {
feeEstimations$: Observable<FeeEstimations>;
constructor(
private stateService: StateService,
) { }
ngOnInit(): void {
this.feeEstimations$ = this.stateService.mempoolBlocks$
.pipe(
map((pBlocks) => {
let firstMedianFee = Math.ceil(pBlocks[0].medianFee);
if (pBlocks.length === 1 && pBlocks[0].blockVSize <= 500000) {
firstMedianFee = 1;
}
const secondMedianFee = pBlocks[1] ? Math.ceil(pBlocks[1].medianFee) : firstMedianFee;
const thirdMedianFee = pBlocks[2] ? Math.ceil(pBlocks[2].medianFee) : secondMedianFee;
return {
'fastestFee': firstMedianFee,
'halfHourFee': secondMedianFee,
'hourFee': thirdMedianFee,
};
})
);
}
}

View File

@ -1,5 +1,6 @@
<div class="container-xl">
<app-fees-box class="d-block mb-4"></app-fees-box>
<div class="container-xl">
<hr>
<table class="table table-borderless" [alwaysCallback]="true" [fromRoot]="true" [infiniteScrollContainer]="'body'" infiniteScroll [infiniteScrollDistance]="1.5" [infiniteScrollUpDistance]="1.5" [infiniteScrollThrottle]="50" (scrolled)="loadMore()">