2020-07-03 23:45:19 +07:00
|
|
|
import { Component, OnInit } from '@angular/core';
|
2020-07-13 15:16:12 +07:00
|
|
|
import { BisqTransaction, BisqOutput } from '../bisq.interfaces';
|
2020-07-24 18:41:15 +07:00
|
|
|
import { Subject, merge } from 'rxjs';
|
|
|
|
import { switchMap, tap, map } from 'rxjs/operators';
|
2020-07-13 15:16:12 +07:00
|
|
|
import { BisqApiService } from '../bisq-api.service';
|
2020-07-13 21:46:25 +07:00
|
|
|
import { SeoService } from 'src/app/services/seo.service';
|
2020-07-24 18:41:15 +07:00
|
|
|
import { FormGroup, FormBuilder } from '@angular/forms';
|
2020-07-03 23:45:19 +07:00
|
|
|
|
|
|
|
@Component({
|
|
|
|
selector: 'app-bisq-transactions',
|
|
|
|
templateUrl: './bisq-transactions.component.html',
|
|
|
|
styleUrls: ['./bisq-transactions.component.scss']
|
|
|
|
})
|
|
|
|
export class BisqTransactionsComponent implements OnInit {
|
|
|
|
transactions: BisqTransaction[];
|
|
|
|
totalCount: number;
|
|
|
|
page = 1;
|
|
|
|
itemsPerPage: number;
|
2020-07-13 15:16:12 +07:00
|
|
|
contentSpace = window.innerHeight - (165 + 75);
|
2020-07-03 23:45:19 +07:00
|
|
|
fiveItemsPxSize = 250;
|
2020-07-15 13:10:13 +07:00
|
|
|
isLoading = true;
|
|
|
|
loadingItems: number[];
|
2020-07-03 23:45:19 +07:00
|
|
|
pageSubject$ = new Subject<number>();
|
2020-07-24 18:41:15 +07:00
|
|
|
radioGroupForm: FormGroup;
|
|
|
|
types: string[] = [];
|
2020-07-03 23:45:19 +07:00
|
|
|
|
2020-07-19 13:46:30 +07:00
|
|
|
// @ts-ignore
|
|
|
|
paginationSize: 'sm' | 'lg' = 'md';
|
|
|
|
paginationMaxSize = 10;
|
|
|
|
|
2020-07-03 23:45:19 +07:00
|
|
|
constructor(
|
2020-07-13 15:16:12 +07:00
|
|
|
private bisqApiService: BisqApiService,
|
2020-07-13 21:46:25 +07:00
|
|
|
private seoService: SeoService,
|
2020-07-24 18:41:15 +07:00
|
|
|
private formBuilder: FormBuilder,
|
2020-07-03 23:45:19 +07:00
|
|
|
) { }
|
|
|
|
|
|
|
|
ngOnInit(): void {
|
2020-07-13 21:46:25 +07:00
|
|
|
this.seoService.setTitle('Transactions', true);
|
|
|
|
|
2020-07-24 18:41:15 +07:00
|
|
|
this.radioGroupForm = this.formBuilder.group({
|
|
|
|
UNVERIFIED: false,
|
|
|
|
INVALID: false,
|
|
|
|
GENESIS: false,
|
|
|
|
TRANSFER_BSQ: false,
|
|
|
|
PAY_TRADE_FEE: false,
|
|
|
|
PROPOSAL: false,
|
|
|
|
COMPENSATION_REQUEST: false,
|
|
|
|
REIMBURSEMENT_REQUEST: false,
|
|
|
|
BLIND_VOTE: false,
|
|
|
|
VOTE_REVEAL: false,
|
|
|
|
LOCKUP: false,
|
|
|
|
UNLOCK: false,
|
|
|
|
ASSET_LISTING_FEE: false,
|
|
|
|
PROOF_OF_BURN: false,
|
|
|
|
});
|
|
|
|
|
2020-07-03 23:45:19 +07:00
|
|
|
this.itemsPerPage = Math.max(Math.round(this.contentSpace / this.fiveItemsPxSize) * 5, 10);
|
2020-07-15 13:10:13 +07:00
|
|
|
this.loadingItems = Array(this.itemsPerPage);
|
2020-07-03 23:45:19 +07:00
|
|
|
|
2020-07-19 13:46:30 +07:00
|
|
|
if (document.body.clientWidth < 768) {
|
|
|
|
this.paginationSize = 'sm';
|
|
|
|
this.paginationMaxSize = 3;
|
|
|
|
}
|
|
|
|
|
2020-07-24 18:41:15 +07:00
|
|
|
merge(
|
|
|
|
this.pageSubject$,
|
|
|
|
this.radioGroupForm.valueChanges
|
|
|
|
.pipe(
|
|
|
|
map((data) => {
|
|
|
|
const types: string[] = [];
|
|
|
|
for (const i in data) {
|
|
|
|
if (data[i]) {
|
|
|
|
types.push(i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.types = types;
|
|
|
|
return 1;
|
|
|
|
})
|
|
|
|
)
|
|
|
|
)
|
2020-07-03 23:45:19 +07:00
|
|
|
.pipe(
|
2020-07-15 13:10:13 +07:00
|
|
|
tap(() => this.isLoading = true),
|
2020-07-24 18:41:15 +07:00
|
|
|
switchMap((page) => this.bisqApiService.listTransactions$((page - 1) * this.itemsPerPage, this.itemsPerPage, this.types))
|
2020-07-03 23:45:19 +07:00
|
|
|
)
|
|
|
|
.subscribe((response) => {
|
2020-07-15 13:10:13 +07:00
|
|
|
this.isLoading = false;
|
2020-07-03 23:45:19 +07:00
|
|
|
this.transactions = response.body;
|
|
|
|
this.totalCount = parseInt(response.headers.get('x-total-count'), 10);
|
|
|
|
}, (error) => {
|
|
|
|
console.log(error);
|
|
|
|
});
|
|
|
|
|
|
|
|
this.pageSubject$.next(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
pageChange(page: number) {
|
|
|
|
this.pageSubject$.next(page);
|
|
|
|
}
|
|
|
|
|
|
|
|
calculateTotalOutput(outputs: BisqOutput[]): number {
|
|
|
|
return outputs.reduce((acc: number, output: BisqOutput) => acc + output.bsqAmount, 0);
|
|
|
|
}
|
2020-07-13 15:16:12 +07:00
|
|
|
|
|
|
|
trackByFn(index: number) {
|
|
|
|
return index;
|
|
|
|
}
|
2020-07-03 23:45:19 +07:00
|
|
|
}
|