import {AfterViewInit, ChangeDetectionStrategy, Component, OnInit, ViewChild} from '@angular/core'; import {BlockSyncService, TransactionService} 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'; @Component({ selector: 'app-transactions', templateUrl: './transactions.component.html', styleUrls: ['./transactions.component.scss'], changeDetection: ChangeDetectionStrategy.OnPush }) export class TransactionsComponent implements OnInit, AfterViewInit { transactionDataSource: MatTableDataSource; transactionDisplayedColumns = ['sender', 'recipient', 'value', 'created', 'type']; defaultPageSize = 10; pageSizeOptions = [10, 20, 50, 100]; transactions: any[]; transaction: any; transactionsType = 'all'; @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; constructor( private blockSyncService: BlockSyncService, private transactionService: TransactionService, ) { this.blockSyncService.blockSync(); } ngOnInit(): void { this.transactionService.transactionsSubject.subscribe(transactions => { this.transactionDataSource = new MatTableDataSource(transactions); this.transactionDataSource.paginator = this.paginator; this.transactionDataSource.sort = this.sort; this.transactions = transactions; }); } 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'); } }