From 901c9979089d1d5165dce9619b894f5d5d639d57 Mon Sep 17 00:00:00 2001 From: Yash Solanki Date: Fri, 4 Nov 2022 00:46:30 +0530 Subject: [PATCH] Add pagination to activities table (#1404) * Add pagination to activities table --- .../transactions/transactions-page.html | 2 +- apps/client/src/styles.scss | 12 +++++++ libs/common/src/lib/config.ts | 1 + .../activities-table.component.html | 30 ++++++++++++---- .../activities-table.component.ts | 36 ++++++++++++++++--- .../activities-table.module.ts | 2 ++ 6 files changed, 71 insertions(+), 12 deletions(-) diff --git a/apps/client/src/app/pages/portfolio/transactions/transactions-page.html b/apps/client/src/app/pages/portfolio/transactions/transactions-page.html index 31d29b1df..ee2e4181c 100644 --- a/apps/client/src/app/pages/portfolio/transactions/transactions-page.html +++ b/apps/client/src/app/pages/portfolio/transactions/transactions-page.html @@ -29,8 +29,8 @@ class="align-items-center d-flex justify-content-center" color="primary" mat-fab - [routerLink]="[]" [queryParams]="{ createDialog: true }" + [routerLink]="[]" > diff --git a/apps/client/src/styles.scss b/apps/client/src/styles.scss index 024b21a19..d521f0fcf 100644 --- a/apps/client/src/styles.scss +++ b/apps/client/src/styles.scss @@ -90,6 +90,10 @@ body { } } + .mat-paginator { + background-color: rgba(var(--palette-foreground-base-dark), 0.02); + } + .svgMap-tooltip { background: var(--dark-background); @@ -220,6 +224,14 @@ ngx-skeleton-loader { } } +.mat-paginator { + background-color: rgba(var(--palette-foreground-base-light), 0.02); + + .mat-paginator-page-size { + display: none; + } +} + .no-min-width { min-width: unset !important; } diff --git a/libs/common/src/lib/config.ts b/libs/common/src/lib/config.ts index ffd67667b..1389200a6 100644 --- a/libs/common/src/lib/config.ts +++ b/libs/common/src/lib/config.ts @@ -40,6 +40,7 @@ export const DATA_GATHERING_QUEUE_PRIORITY_HIGH = 1; export const DEFAULT_DATE_FORMAT_MONTH_YEAR = 'MMM yyyy'; export const DEFAULT_LANGUAGE_CODE = 'en'; +export const DEFAULT_PAGE_SIZE = 50; export const GATHER_ASSET_PROFILE_PROCESS = 'GATHER_ASSET_PROFILE'; export const GATHER_ASSET_PROFILE_PROCESS_OPTIONS: JobOptions = { diff --git a/libs/ui/src/lib/activities-table/activities-table.component.html b/libs/ui/src/lib/activities-table/activities-table.component.html index ddc1b79b8..6ed4b293b 100644 --- a/libs/ui/src/lib/activities-table/activities-table.component.html +++ b/libs/ui/src/lib/activities-table/activities-table.component.html @@ -9,10 +9,10 @@
@@ -27,7 +27,11 @@ class="d-none d-lg-table-cell px-1 text-right" mat-cell > - {{ dataSource.data.length - i }} + {{ + dataSource.data.length > pageSize + ? dataSource.data.length - pageSize * pageIndex - i + : dataSource.data.length - i + }} + + (); @Output() import = new EventEmitter(); + @ViewChild(MatPaginator) paginator: MatPaginator; @ViewChild(MatSort) sort: MatSort; public allFilters: Filter[]; @@ -59,6 +63,7 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy { public isAfter = isAfter; public isLoading = true; public isUUID = isUUID; + public pageIndex = 0; public placeholder = ''; public routeQueryParams: Subscription; public searchKeywords: string[] = []; @@ -119,12 +124,20 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy { } return contains; }; + this.dataSource.paginator = this.paginator; this.dataSource.sort = this.sort; this.updateFilters(); } } + public onChangePage(page: PageEvent) { + this.pageIndex = page.pageIndex; + + this.totalFees = this.getTotalFees(); + this.totalValue = this.getTotalValue(); + } + public onCloneActivity(aActivity: OrderWithAccount) { this.activityToClone.emit(aActivity); } @@ -231,6 +244,21 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy { return Object.values(fieldValueMap); } + private getPaginatedData() { + if (this.dataSource.data.length > this.pageSize) { + const sortedData = this.dataSource.sortData( + this.dataSource.filteredData, + this.dataSource.sort + ); + + return sortedData.slice( + this.pageIndex * this.pageSize, + (this.pageIndex + 1) * this.pageSize + ); + } + return this.dataSource.filteredData; + } + private getSearchableFieldValues(activities: OrderWithAccount[]): Filter[] { const fieldValueMap: { [id: string]: Filter } = {}; @@ -243,8 +271,8 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy { private getTotalFees() { let totalFees = new Big(0); - - for (const activity of this.dataSource.filteredData) { + const paginatedData = this.getPaginatedData(); + for (const activity of paginatedData) { if (isNumber(activity.feeInBaseCurrency)) { totalFees = totalFees.plus(activity.feeInBaseCurrency); } else { @@ -257,8 +285,8 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy { private getTotalValue() { let totalValue = new Big(0); - - for (const activity of this.dataSource.filteredData) { + const paginatedData = this.getPaginatedData(); + for (const activity of paginatedData) { if (isNumber(activity.valueInBaseCurrency)) { if (activity.type === 'BUY' || activity.type === 'ITEM') { totalValue = totalValue.plus(activity.valueInBaseCurrency); diff --git a/libs/ui/src/lib/activities-table/activities-table.module.ts b/libs/ui/src/lib/activities-table/activities-table.module.ts index 2d009fb4f..4f38bcd2a 100644 --- a/libs/ui/src/lib/activities-table/activities-table.module.ts +++ b/libs/ui/src/lib/activities-table/activities-table.module.ts @@ -2,6 +2,7 @@ import { CommonModule } from '@angular/common'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; import { MatMenuModule } from '@angular/material/menu'; +import { MatPaginatorModule } from '@angular/material/paginator'; import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; import { RouterModule } from '@angular/router'; @@ -26,6 +27,7 @@ import { ActivitiesTableComponent } from './activities-table.component'; GfValueModule, MatButtonModule, MatMenuModule, + MatPaginatorModule, MatSortModule, MatTableModule, NgxSkeletonLoaderModule,
Type - +