PrimeNG Create Static Table with Filtering and Sorting
08-09-2022HTML form
<div class="flex flex-col flex-auto min-w-0"> <div class="flex-auto p-6 sm:p-10 "> <p-table #dt2 [value]="users" [loading]="loading" dataKey="id" [paginator]="true" [rows]="10" [rowsPerPageOptions]="[10,25,50]" styleClass="p-datatable-gridlines" [globalFilterFields]="filterColumns"> <ng-template pTemplate="caption"> <div class="flex"> <span class="p-input-icon-left ml-auto"> <i class="pi pi-search"></i> <input pInputText type="text" (input)="dt2.filterGlobal($event.target.value, 'contains')" placeholder="Search keyword" class="p-inputtext p-component p-element"/> </span> </div> </ng-template> <ng-template pTemplate="header"> <tr> <th *ngFor="let col of cols" pSortableColumn="{{col.field}}"> {{col.header}} <p-sortIcon field="{{col.field}}"></p-sortIcon> <p-columnFilter type="{{col.type}}" field="{{col.field}}" display="menu"></p-columnFilter> </th> </tr> </ng-template> <ng-template pTemplate="body" let-car> <tr> <ng-template ngFor let-item [ngForOf]="cols"> <td *ngIf="item.field!='enabled'"> {{car[item.field]}} </td> </ng-template> <td class="text-center"> <i class="pi" [ngClass]="{'true-icon pi-check-circle': car.enabled, 'false-icon pi-times-circle': !car.enabled}"></i> </td> </tr> </ng-template> </p-table> </div> </div>
Typscript File
import {Component, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core'; import {map, Subject, takeUntil} from 'rxjs'; import {UserService} from './user.service'; @Component({ selector: 'admin-user', templateUrl: './user.component.html', encapsulation: ViewEncapsulation.None }) export class UserComponent implements OnInit, OnDestroy { users: any[]; totalRecords: number; cols = [ {field: 'username', type:'text', header: 'UserId'}, {field: 'firstName', type:'text', header: 'First Name'}, {field: 'lastName', type:'text', header: 'Last Name'}, {field: 'email', type:'text', header: 'Email'}, {field: 'enabled', type:'boolean', header: 'Enabled'}, ]; loading: boolean; private subject = new Subject<boolean>(); filterColumns=this.cols.filter(p=>p.field!='enabled').map<string>(q=>q.field); constructor(private userService: UserService) { } ngOnInit(): void { this.loadCars(); } public loadCars() { setTimeout(() => { this.userService.list().pipe( map(apiResponse => { this.users = apiResponse.data.rows; this.totalRecords = apiResponse.data.records; this.loading = false; }), takeUntil(this.subject) ).subscribe(); },10); } ngOnDestroy(): void { this.subject.next(true); this.subject.complete(); } }
Result