From f37fea92fb59e0c440b6c38480d71322c91a9b93 Mon Sep 17 00:00:00 2001
From: Nathan Bockisch <nbockisc@nrao.edu>
Date: Wed, 7 Sep 2022 16:31:45 -0400
Subject: [PATCH] WS-1193: Added pagination to the active requests page

---
 .../active-capability-requests.component.html  |  9 ++++++++-
 .../active-capability-requests.component.ts    | 18 ++++++++++++++++++
 .../src/app/workspaces/workspaces.module.ts    |  2 ++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html
index 5a5c37eea..63912dda6 100644
--- a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html
+++ b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.html
@@ -51,6 +51,13 @@
 
 <div>
   <app-filter-menu *ngIf="showFilterMenu" [state]="statesToFilter" [daStaff]="qaStaff['DA']" [aodStaff]="qaStaff['AOD']" [srdpStatus]="srdpOptions" [filters]="filters" (filterMenuEventEmitter)="emitFilterEvent($event)"></app-filter-menu>
+  <mat-paginator
+    [length]="(sortedActiveRequests$ | async)?.length"
+    [pageSize]="pageSize"
+    [pageSizeOptions]="pageSizeOptions"
+    (page)="changePage($event)"
+    >
+  </mat-paginator>
 </div>
 <table class="mr-2 ml-2 table table-bordered">
   <thead class="thead-light">
@@ -113,7 +120,7 @@
     </tr>
   </thead>
   <tbody>
-    <tr *ngFor="let request of sortedActiveRequests$ | async">
+    <tr *ngFor="let request of (sortedActiveRequests$ | async) | slice:pageStart:pageStop">
       <td>
         <button
           type="button"
diff --git a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts
index 6dbff58a2..448be2513 100644
--- a/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts
+++ b/apps/web/src/app/workspaces/components/active-capability-requests/active-capability-requests.component.ts
@@ -17,6 +17,7 @@
  * along with Workspaces.  If not, see <https://www.gnu.org/licenses/>.
  */
 import { Component, OnInit, OnDestroy } from "@angular/core";
+import { SlicePipe } from "@angular/common";
 import { Title } from "@angular/platform-browser";
 import { ActivatedRoute, Router, Params } from "@angular/router";
 import { Capability } from "../../model/capability";
@@ -33,6 +34,7 @@ import {ActiveRequestsService} from "../../services/active-requests.service";
 import {StorageService} from "../../../shared/storage/storage.service";
 import { Filter } from "./components/filter-menu/filter-menu.component";
 import { FormControl } from "@angular/forms";
+import { PageEvent } from '@angular/material/paginator';
 
 export const defaultSortOrder = "desc"
 
@@ -71,6 +73,12 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy {
   filteredAodStaff: Observable<Staff[]>;
   filteredDaStaff: Observable<Staff[]>;
 
+  // Needed for pagination of requests table
+  pageSize: number;
+  pageSizeOptions = [5, 10, 20, 40];
+  pageStart: number;
+  pageStop: number;
+
   public statesToFilter = [
     {"name":"Complete"},
     {"name":"Submitted"},
@@ -154,6 +162,10 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy {
     this.qaStaff = [];
     this.getRoutes()
 
+    this.pageSize = this.pageSizeOptions[1];
+    this.pageStart = 0;
+    this.pageStop = this.pageSize;
+
     // get list of enabled capabilities
     const enabledCapabilitiesObserver = {
       next: (capabilities) => {
@@ -539,4 +551,10 @@ export class ActiveCapabilityRequestsComponent implements OnInit, OnDestroy {
   staffSelectDisplay(staff: Staff): string {
     return "";
   }
+
+  // Handles event when paginator changes page size or moves to next page
+  changePage(pageChange: PageEvent) {
+    this.pageStart = pageChange.pageIndex * pageChange.pageSize;
+    this.pageStop = this.pageStart + pageChange.pageSize;
+  }
 }
diff --git a/apps/web/src/app/workspaces/workspaces.module.ts b/apps/web/src/app/workspaces/workspaces.module.ts
index 7dbaec480..b32cd6c33 100644
--- a/apps/web/src/app/workspaces/workspaces.module.ts
+++ b/apps/web/src/app/workspaces/workspaces.module.ts
@@ -49,6 +49,7 @@ import {MatAutocompleteModule} from '@angular/material/autocomplete';
 import {MatFormFieldModule} from '@angular/material/form-field';
 import {MatSelectModule} from '@angular/material/select';
 import {MatInputModule} from '@angular/material/input';
+import {MatPaginatorModule} from '@angular/material/paginator';
 
 @NgModule({
     declarations: [
@@ -88,6 +89,7 @@ import {MatInputModule} from '@angular/material/input';
         MatFormFieldModule,
         MatSelectModule,
         MatInputModule,
+        MatPaginatorModule,
     ],
 })
 export class WorkspacesModule {}
-- 
GitLab