UNPKG

@lordkriegan/mat-data-table

Version:

[!npm version](https://www.npmjs.com/package/@lordkriegan/mat-data-table) [!npm license](https://www.npmjs.com/package/@lordkriegan/mat-data-table)

68 lines (61 loc) 2.84 kB
@if (mergedOptions.showFilter) { <mat-form-field> <mat-label>{{mergedOptions.filterOptions?.label || 'Filter'}}</mat-label> <input matInput (keyup)="applyFilter($event)" [placeholder]="mergedOptions.filterOptions?.placeholder || ''" #input> </mat-form-field> } <div class="mat-elevation-z8"> <table mat-table [dataSource]="dataSource" matSort [matSortActive]="mergedOptions.sorterOptions?.defaultSortColumn || ''" [matSortDirection]="mergedOptions.sorterOptions?.defaultSortDirection || 'asc'" [matSortDisabled]="!mergedOptions.showSorter"> @for (column of columnMappings; track $index) { <ng-container [matColumnDef]="column.key"> <th [style]="column?.headerCellStyles || {}" mat-header-cell *matHeaderCellDef mat-sort-header>{{column.label}}</th> <td [style]="column?.dataCellStyles || {}" mat-cell *matCellDef="let row"> @if (column?.component; as component) { <ng-container *ngComponentOutlet="component; inputs: { data: row[column.key] }"></ng-container> } @else if (column?.transformer) { {{column.transformer!(row[column.key])}} } @else { {{row[column.key]}} } </td> </ng-container> } @if (mergedOptions.showActions) { <ng-container matColumnDef="actions"> <th mat-header-cell *matHeaderCellDef></th> <td mat-cell *matCellDef="let row"> <button mat-icon-button [matMenuTriggerFor]="menu"><mat-icon>more_vert</mat-icon></button> <mat-menu #menu="matMenu"> @for (action of mergedOptions.actionOptions?.actions; track action) { @if (action.divider) { <mat-divider></mat-divider> } @else { <button mat-menu-item (click)="action.fxn!(row)"> @if (action.icon) { <mat-icon>{{action.icon}}</mat-icon> } <span>{{action.label}}</span> </button> } } </mat-menu> </td> </ng-container> } <tr mat-header-row *matHeaderRowDef="generateDisplayColumns()"></tr> <tr mat-row *matRowDef="let row; columns: generateDisplayColumns();"></tr> <!-- Row shown when there is no matching data. --> <tr class="mat-row" *matNoDataRow> <td class="mat-cell" [attr.colspan]="generateDisplayColumns().length"> @if (mergedOptions.showFilter) { No data matching the filter "{{dataSource.filter}}" } @else { No data found } </td> </tr> </table> @if (mergedOptions.showPaginator) { <mat-paginator [pageSizeOptions]="mergedOptions.paginatorOptions?.pageSizeOptions || [5, 10, 25, 100]" aria-label="Select page of users"></mat-paginator> } </div>