ipsos-components
Version:
Material Design components for Angular
305 lines (261 loc) • 12 kB
HTML
<div class="demo-data-source-actions">
<div>
<button mat-raised-button (click)="connect()">Connect New Data Source</button>
<button mat-raised-button (click)="disconnect()" [disabled]="!dataSource">Disconnect Data Source</button>
</div>
<div>
<button mat-raised-button (click)="_peopleDatabase.shuffle(changeReferences)">Randomize Data</button>
<mat-checkbox [(ngModel)]="changeReferences">Change references</mat-checkbox>
</div>
<div class="demo-track-by-select">
<div class="demo-track-by-label">Track By</div>
<mat-radio-group [(ngModel)]="trackByStrategy">
<mat-radio-button [value]="'reference'">Reference</mat-radio-button>
<mat-radio-button [value]="'id'">ID</mat-radio-button>
<mat-radio-button [value]="'index'">Index</mat-radio-button>
</mat-radio-group>
</div>
</div>
<mat-card class="demo-table-card">
<h3>
CdkTable With Dynamic Column Def
<div>
<button mat-raised-button
(click)="addDynamicColumnDef()"
[disabled]="dynamicColumnIds.length >= 4">
Add Column Def
</button>
<button mat-raised-button
(click)="removeDynamicColumnDef()"
[disabled]="dynamicColumnIds.length == 0">
Remove Column Def
</button>
</div>
</h3>
<cdk-table [dataSource]="dataSource">
<ng-container [cdkColumnDef]="column.id" *ngFor="let column of dynamicColumnDefs">
<cdk-header-cell *cdkHeaderCellDef> {{column.headerText}} </cdk-header-cell>
<cdk-cell *cdkCellDef="let row"> {{row[column.property]}} </cdk-cell>
</ng-container>
<cdk-header-row *cdkHeaderRowDef="dynamicColumnIds"></cdk-header-row>
<cdk-row *cdkRowDef="let row; columns: dynamicColumnIds;"></cdk-row>
</cdk-table>
</mat-card>
<mat-card class="demo-table-card">
<h3>CdkTable Example</h3>
<div class="demo-highlighter">
Highlight:
<mat-checkbox (change)="toggleHighlight('first', $event.checked)">First Row</mat-checkbox>
<mat-checkbox (change)="toggleHighlight('last', $event.checked)">Last Row</mat-checkbox>
<mat-checkbox (change)="toggleHighlight('even', $event.checked)">Even Rows</mat-checkbox>
<mat-checkbox (change)="toggleHighlight('odd', $event.checked)">Odd Rows</mat-checkbox>
</div>
<cdk-table #table matSort
[dataSource]="dataSource"
[trackBy]="userTrackBy">
<!-- Column Definition: ID -->
<ng-container cdkColumnDef="userId">
<cdk-header-cell *cdkHeaderCellDef
mat-sort-header arrowPosition="before">
ID
</cdk-header-cell>
<cdk-cell *cdkCellDef="let row"> {{row.id}} </cdk-cell>
</ng-container>
<!-- Column Definition: Progress -->
<ng-container cdkColumnDef="progress">
<cdk-header-cell *cdkHeaderCellDef
mat-sort-header start="desc">
Progress
</cdk-header-cell>
<cdk-cell *cdkCellDef="let row">
<div class="demo-progress-stat">{{row.progress}}%</div>
<div class="demo-progress-indicator-container">
<div class="demo-progress-indicator"
[style.background]="row.progress > 50 ? 'green' : 'red'"
[style.opacity]="getOpacity(row.progress)"
[style.width.%]="row.progress"></div>
</div>
</cdk-cell>
</ng-container>
<!-- Column Definition: Name -->
<ng-container cdkColumnDef="userName">
<cdk-header-cell *cdkHeaderCellDef mat-sort-header>
Name
</cdk-header-cell>
<cdk-cell *cdkCellDef="let row"> {{row.name}} </cdk-cell>
</ng-container>
<!-- Column Definition: Color -->
<ng-container cdkColumnDef="color">
<cdk-header-cell *cdkHeaderCellDef
mat-sort-header disableClear>
Color
</cdk-header-cell>
<cdk-cell *cdkCellDef="let row" [style.color]="row.color"> {{row.color}} </cdk-cell>
</ng-container>
<cdk-header-row *cdkHeaderRowDef="displayedColumns"></cdk-header-row>
<cdk-row *cdkRowDef="let row; columns: displayedColumns;
let first = first; let last = last; let even = even; let odd = odd"
[ngClass]="{
'demo-row-highlight-first': highlights.has('first') && first,
'demo-row-highlight-last': highlights.has('last') && last,
'demo-row-highlight-even': highlights.has('even') && even,
'demo-row-highlight-odd': highlights.has('odd') && odd
}">
</cdk-row>
</cdk-table>
</mat-card>
<h3>MatTable Example</h3>
<div class="demo-table-container demo-mat-table-example mat-elevation-z4">
<table-header-demo (shiftColumns)="displayedColumns.push(displayedColumns.shift())"
(toggleColorColumn)="toggleColorColumn()">
</table-header-demo>
<mat-table [dataSource]="dataSource" [trackBy]="userTrackBy">
<!-- Column Definition: ID -->
<ng-container cdkColumnDef="userId">
<mat-header-cell *matHeaderCellDef> ID </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.id}} </mat-cell>
</ng-container>
<!-- Column Definition: Progress -->
<ng-container matColumnDef="progress">
<mat-header-cell *matHeaderCellDef> Progress </mat-header-cell>
<mat-cell *matCellDef="let row">
<div class="demo-progress-stat">{{row.progress}}%</div>
<div class="demo-progress-indicator-container">
<div class="demo-progress-indicator"
[style.background]="row.progress > 50 ? 'green' : 'red'"
[style.opacity]="getOpacity(row.progress)"
[style.width.%]="row.progress"></div>
</div>
</mat-cell>
</ng-container>
<!-- Column Definition: Name -->
<ng-container matColumnDef="userName">
<mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.name}} </mat-cell>
</ng-container>
<!-- Column Definition: Color -->
<ng-container matColumnDef="color">
<mat-header-cell *matHeaderCellDef>Color</mat-header-cell>
<mat-cell *matCellDef="let row" [style.color]="row.color"> {{row.color}} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns"></mat-row>
</mat-table>
<mat-paginator #paginator
[length]="_peopleDatabase.data.length"
[pageSize]="10"
[pageSizeOptions]="[5, 10, 25, 100]">
</mat-paginator>
</div>
<mat-card class="demo-table-card">
<h3> MatTable Using 'When' Rows for Interactive Details</h3>
<mat-table [dataSource]="dataSourceWithDetails">
<!-- Column Definition: ID -->
<ng-container matColumnDef="userId">
<mat-header-cell *matHeaderCellDef> ID </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.id}} </mat-cell>
</ng-container>
<!-- Column Definition: Name -->
<ng-container matColumnDef="userName">
<mat-header-cell *matHeaderCellDef> Name </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.name}} </mat-cell>
</ng-container>
<!-- Detail Column -->
<ng-container matColumnDef="details">
<mat-cell *matCellDef="let row">
<ng-container *ngIf="wasExpanded.has(row.data)">
{{row.data.name.split(' ')[0]}}'s favorite color is {{row.data.color}} and has a progress
of {{row.data.progress}}%.
</ng-container>
</mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="['userId', 'userName']"></mat-header-row>
<mat-row *matRowDef="let row; columns: ['userId', 'userName'];"
matRipple
class="user-row"
[style.borderBottomColor]="expandedPerson == row ? 'transparent' : ''"
(click)="expandedPerson = row; wasExpanded.add(row)"></mat-row>
<mat-row *matRowDef="let row; columns: ['details']; when: isDetailRow"
[@detailExpand]="row.data == expandedPerson ? 'expanded' : 'collapsed'"
style="overflow: hidden">
</mat-row>
</mat-table>
</mat-card>
<h3>MatTable With MatTableDataSource Example</h3>
<mat-form-field>
<input matInput #filter placeholder="Filter users">
</mat-form-field>
<div class="demo-table-container demo-mat-table-example mat-elevation-z4 mat-table-selectable">
<table-header-demo (shiftColumns)="displayedColumns.push(displayedColumns.shift())"
(toggleColorColumn)="toggleColorColumn()" *ngIf="selection.isEmpty()">
<button mat-menu-item (click)="progressSortingDisabled = !progressSortingDisabled">
<mat-icon>sort</mat-icon>
Toggle Progress Sorting
</button>
</table-header-demo>
<div class="example-header example-selection-header"
*ngIf="!selection.isEmpty()">
{{selection.selected.length}}
{{selection.selected.length == 1 ? 'user' : 'users'}}
selected
</div>
<mat-table [dataSource]="matTableDataSource" [trackBy]="userTrackBy" matSort
#sortForDataSource="matSort">
<!-- Checkbox Column -->
<ng-container matColumnDef="select">
<mat-header-cell *matHeaderCellDef>
<mat-checkbox (change)="$event ? masterToggle() : null"
[disabled]="!matTableDataSource.filteredData.length"
[checked]="isMasterToggleChecked()"
[indeterminate]="isMasterToggleIndeterminate()">
</mat-checkbox>
</mat-header-cell>
<mat-cell *matCellDef="let row">
<mat-checkbox (click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)">
</mat-checkbox>
</mat-cell>
</ng-container>
<!-- Column Definition: ID -->
<ng-container cdkColumnDef="userId">
<mat-header-cell *matHeaderCellDef mat-sort-header> ID </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.id}} </mat-cell>
</ng-container>
<!-- Column Definition: Progress -->
<ng-container matColumnDef="progress">
<mat-header-cell
*matHeaderCellDef
[disabled]="progressSortingDisabled"
mat-sort-header> Progress </mat-header-cell>
<mat-cell *matCellDef="let row">
<div class="demo-progress-stat">{{row.progress}}%</div>
<div class="demo-progress-indicator-container">
<div class="demo-progress-indicator"
[style.background]="row.progress > 50 ? 'green' : 'red'"
[style.opacity]="getOpacity(row.progress)"
[style.width.%]="row.progress"></div>
</div>
</mat-cell>
</ng-container>
<!-- Column Definition: Name -->
<ng-container matColumnDef="userName">
<mat-header-cell *matHeaderCellDef mat-sort-header> Name </mat-header-cell>
<mat-cell *matCellDef="let row"> {{row.name}} </mat-cell>
</ng-container>
<!-- Column Definition: Color -->
<ng-container matColumnDef="color">
<mat-header-cell *matHeaderCellDef mat-sort-header>Color</mat-header-cell>
<mat-cell *matCellDef="let row" [style.color]="row.color"> {{row.color}} </mat-cell>
</ng-container>
<mat-header-row *matHeaderRowDef="matTableDataSourceColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: matTableDataSourceColumns;"
[class.selected]="selection.isSelected(row)"
(click)="selection.toggle(row)">
</mat-row>
</mat-table>
<mat-paginator #paginatorForDataSource
[length]="_peopleDatabase.data.length"
[pageSizeOptions]="[10, 25, 100]">
</mat-paginator>
</div>