mempool/frontend/src/app/components/assets/assets.component.ts

100 lines
3.1 KiB
TypeScript
Raw Normal View History

2020-08-13 02:35:10 +07:00
import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
2022-09-21 17:23:45 +02:00
import { AssetsService } from '../../services/assets.service';
2022-11-24 12:19:19 +09:00
import { environment } from '../../../environments/environment';
2022-02-06 03:31:50 +04:00
import { FormGroup } from '@angular/forms';
import { filter, map, switchMap, take } from 'rxjs/operators';
2020-08-13 00:46:44 +07:00
import { ActivatedRoute, Router } from '@angular/router';
2022-02-06 03:31:50 +04:00
import { combineLatest, Observable } from 'rxjs';
2022-09-21 17:23:45 +02:00
import { AssetExtended } from '../../interfaces/electrs.interface';
import { SeoService } from '../../services/seo.service';
import { StateService } from '../../services/state.service';
@Component({
selector: 'app-assets',
templateUrl: './assets.component.html',
2020-08-13 00:46:44 +07:00
styleUrls: ['./assets.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush
})
export class AssetsComponent implements OnInit {
2021-12-28 17:59:11 +04:00
nativeAssetId = this.stateService.network === 'liquidtestnet' ? environment.nativeTestAssetId : environment.nativeAssetId;
2022-02-06 04:44:40 +04:00
paginationMaxSize = window.matchMedia('(max-width: 670px)').matches ? 4 : 6;
ellipses = window.matchMedia('(max-width: 670px)').matches ? false : true;
2021-12-28 17:59:11 +04:00
2020-08-13 00:46:44 +07:00
assets: AssetExtended[];
assetsCache: AssetExtended[];
searchForm: FormGroup;
2020-08-13 00:46:44 +07:00
assets$: Observable<AssetExtended[]>;
2022-02-06 01:20:26 +04:00
page = 1;
error: any;
2020-06-01 15:56:32 +07:00
itemsPerPage: number;
contentSpace = window.innerHeight - (250 + 200);
fiveItemsPxSize = 250;
constructor(
private assetsService: AssetsService,
2020-08-13 00:46:44 +07:00
private route: ActivatedRoute,
private router: Router,
2020-12-03 18:34:19 +07:00
private seoService: SeoService,
2021-12-28 17:59:11 +04:00
private stateService: StateService,
) { }
ngOnInit() {
2020-12-03 18:34:19 +07:00
this.seoService.setTitle($localize`:@@ee8f8008bae6ce3a49840c4e1d39b4af23d4c263:Assets`);
this.itemsPerPage = Math.max(Math.round(this.contentSpace / this.fiveItemsPxSize) * 5, 10);
2020-06-01 15:56:32 +07:00
2020-08-13 00:46:44 +07:00
this.assets$ = combineLatest([
this.assetsService.getAssetsJson$,
2022-02-06 01:20:26 +04:00
this.route.queryParams,
2020-08-13 00:46:44 +07:00
])
2022-02-06 03:31:50 +04:00
.pipe(
take(1),
switchMap(([assets, qp]) => {
2022-02-06 04:18:56 +04:00
this.assets = assets.array;
2020-08-13 00:46:44 +07:00
2022-02-06 03:31:50 +04:00
return this.route.queryParams
2020-08-13 00:46:44 +07:00
.pipe(
filter((queryParams) => {
const newPage = parseInt(queryParams.page, 10);
2022-02-06 03:31:50 +04:00
if (newPage !== this.page) {
2020-08-13 00:46:44 +07:00
return true;
}
return false;
}),
map((queryParams) => {
if (queryParams.page) {
const newPage = parseInt(queryParams.page, 10);
this.page = newPage;
} else {
this.page = 1;
}
return '';
})
2022-02-06 03:31:50 +04:00
);
}),
map(() => {
const start = (this.page - 1) * this.itemsPerPage;
2020-08-13 00:46:44 +07:00
return this.assets.slice(start, this.itemsPerPage + start);
2022-02-06 03:31:50 +04:00
})
);
}
pageChange(page: number) {
2022-02-06 03:31:50 +04:00
const queryParams = { page: page };
2020-08-13 00:46:44 +07:00
if (queryParams.page === 1) {
queryParams.page = null;
}
this.page = -1;
this.router.navigate([], {
relativeTo: this.route,
queryParams: queryParams,
queryParamsHandling: 'merge',
});
}
trackByAsset(index: number, asset: any) {
return asset.asset_id;
}
}