mempool/frontend/src/app/components/asset-circulation/asset-circulation.component.ts
2022-11-24 12:19:19 +09:00

59 lines
2 KiB
TypeScript

import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core';
import { combineLatest, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { moveDec } from '../../bitcoin.utils';
import { AssetsService } from '../../services/assets.service';
import { ElectrsApiService } from '../../services/electrs-api.service';
import { environment } from '../../../environments/environment';
@Component({
selector: 'app-asset-circulation',
templateUrl: './asset-circulation.component.html',
styleUrls: ['./asset-circulation.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AssetCirculationComponent implements OnInit {
@Input() assetId: string;
circulatingAmount$: Observable<{ amount: number, ticker: string}>;
constructor(
private electrsApiService: ElectrsApiService,
private assetsService: AssetsService,
@Inject(LOCALE_ID) private locale: string,
) { }
ngOnInit(): void {
this.circulatingAmount$ = combineLatest([
this.electrsApiService.getAsset$(this.assetId),
this.assetsService.getAssetsMinimalJson$]
)
.pipe(
map(([asset, assetsMinimal]) => {
const assetData = assetsMinimal[asset.asset_id];
if (!asset.chain_stats.has_blinded_issuances) {
if (asset.asset_id === environment.nativeAssetId) {
return {
amount: this.formatAmount(asset.chain_stats.peg_in_amount - asset.chain_stats.burned_amount - asset.chain_stats.peg_out_amount, assetData[3]),
ticker: assetData[1]
};
} else {
return {
amount: this.formatAmount(asset.chain_stats.issued_amount - asset.chain_stats.burned_amount, assetData[3]),
ticker: assetData[1]
};
}
} else {
return {
amount: -1,
ticker: '',
};
}
}),
);
}
formatAmount(value: number, precision = 0): number {
return parseFloat(moveDec(value, -precision));
}
}