import { AfterViewInit, ChangeDetectionStrategy, Component, OnInit, ViewChild, } from '@angular/core'; import { BlockSyncService, TransactionService, UserService } from '@app/_services'; import { MatTableDataSource } from '@angular/material/table'; import { MatPaginator } from '@angular/material/paginator'; import { MatSort } from '@angular/material/sort'; import { exportCsv } from '@app/_helpers'; import { first } from 'rxjs/operators'; import { Transaction } from '@app/_models'; @Component({ selector: 'app-transactions', templateUrl: './transactions.component.html', styleUrls: ['./transactions.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush, }) export class TransactionsComponent implements OnInit, AfterViewInit { transactionDataSource: MatTableDataSource; transactionDisplayedColumns: Array = ['sender', 'recipient', 'value', 'created', 'type']; defaultPageSize: number = 10; pageSizeOptions: Array = [10, 20, 50, 100]; transactions: Array; transaction: Transaction; transactionsType: string = 'all'; transactionsTypes: Array; @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; constructor( private blockSyncService: BlockSyncService, private transactionService: TransactionService, private userService: UserService ) {} async ngOnInit(): Promise { this.transactionService.transactionsSubject.subscribe((transactions) => { this.transactionDataSource = new MatTableDataSource(transactions); this.transactionDataSource.paginator = this.paginator; this.transactionDataSource.sort = this.sort; this.transactions = transactions; }); await this.blockSyncService.init(); await this.transactionService.init(); await this.userService.init(); await this.blockSyncService.blockSync(); this.userService .getTransactionTypes() .pipe(first()) .subscribe((res) => (this.transactionsTypes = res)); } viewTransaction(transaction): void { this.transaction = transaction; } doFilter(value: string, dataSource): void { dataSource.filter = value.trim().toLocaleLowerCase(); } filterTransactions(): void { if (this.transactionsType === 'all') { this.transactionService.transactionsSubject.subscribe((transactions) => { this.transactionDataSource.data = transactions; this.transactions = transactions; }); } else { this.transactionDataSource.data = this.transactions.filter( (transaction) => transaction.type === this.transactionsType ); } } ngAfterViewInit(): void { this.transactionDataSource.paginator = this.paginator; this.transactionDataSource.sort = this.sort; } downloadCsv(): void { exportCsv(this.transactions, 'transactions'); } }