| Author: | relair |
|---|---|
| Official Page: | Go to website |
| Publish Date: | November 25, 2019 |
| License: | MIT |
Description:
A dynamic data table component built with Angular Material Table.
Supports sorting, pagination, filtering, sticky header, custom action on each row and much more.
Basic Usage:
1. Install and import the component.
# NPM $ npm install material-dynamic-table --save
2. Import the Dynamic Data Table Component.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { DynamicTableModule } from 'material-dynamic-table';
import { AppComponent } from './app';
@NgModule({
...
imports: [
...
DynamicTableModule
],
})
export class AppModule {}
3. Use the component in your app.
<mdt-dynamic-table [columns]="columns" [dataSource]="dataSource" [pageSize]="5"></mdt-dynamic-table> <button mat-button (click)="clearFilters()">Clear filters</button> <button mat-button (click)="setFilter()">Set filter</button>
4. Define the columns, filters, and tabular data.
export class AppComponent {
title = 'material-dynamic-table-demo';
@ViewChild(DynamicTableComponent) dynamicTable: DynamicTableComponent;
columns: ColumnConfig[] = [
{
name: 'product',
displayName: 'Product',
type: 'string'
},
{
name: 'description',
displayName: 'Description',
type: 'string'
},
{
name: 'recievedOn',
displayName: 'Recieved On',
type: 'date'
},
{
name: 'created',
displayName: 'Created Date',
type: 'date',
options: {
dateFormat: 'shortDate'
}
},
{
type: 'options'
}
];
data: Product[] = [
{
product: 'Mouse',
description: 'Fast and wireless',
recievedOn: new Date('2018-01-02T11:05:53.212Z'),
created: new Date('2015-04-22T18:12:21.111Z')
},
{
product: 'Keyboard',
description: 'Loud and Mechanical',
recievedOn: new Date('2018-06-09T12:08:23.511Z'),
created: new Date('2015-03-11T11:44:11.431Z')
},
{
product: 'Laser',
description: 'It\'s bright',
recievedOn: new Date('2017-05-22T18:25:43.511Z'),
created: new Date('2015-04-21T17:15:23.111Z')
},
{
product: 'Baby food',
description: 'It\'s good for you',
recievedOn: new Date('2017-08-26T18:25:43.511Z'),
created: new Date('2016-01-01T01:25:13.055Z')
},
{
product: 'Coffee',
description: 'Prepared from roasted coffee beans',
recievedOn: new Date('2015-04-16T23:52:23.565Z'),
created: new Date('2016-12-21T21:05:03.253Z')
},
{
product: 'Cheese',
description: 'A dairy product',
recievedOn: new Date('2017-11-06T21:22:53.542Z'),
created: new Date('2014-02-11T11:34:12.442Z')
}
];
dataSource = new FilteredDataSource(this.data);
clearFilters() {
this.dynamicTable.clearFilters();
}
setFilter() {
const createdColumnName = 'created';
const appliedFilter = this.dynamicTable.getFilter(createdColumnName);
if (!appliedFilter) {
const filter = new DateFilter(createdColumnName);
filter.fromDate = new Date(2015, 0, 1);
filter.toDate = new Date(2015, 11, 31);
this.dynamicTable.setFilter(createdColumnName, filter);
} else {
const columnName = 'description';
const filter = new TextFilter(columnName);
filter.value = 'Loud';
this.dynamicTable.setFilter(columnName, filter);
}
}
}