Data table with support for essential features such as filtering, pagination, row selection, row expansion and checkbox based selection that works based on a class and data source provided. Has high customization and robust built-in validation. Needs a class and its instances as a data source to work with.
- Pagination: The data is paginated based on the quantity per page provided.
- Filtering: Generic or column based filters to specify the displayed data.
- Click: Click event to handle actions based on an element selected by the user.
- Expand: Expandable rows that display a property value and/or ng-template content specified as HTML.
- Checkbox Selection: Emit a list of elements selected by the user.
- Composition of Classes: Display data from composed objects based on a property mapping provided.
- Date Format: Formats dates based on input provided.
- Built-in Validation: Automatically performs multiple validations to ensure proper functionality, providing explanation in the console.
- Robust Customization: Use the PropertyMapping exported class to specify how the table should handle the data provided.
NPM
npm install ngx-s-data-table
example.component.ts
import { Component } from '@angular/core';
import { DataTableModule } from 'ngx-s-data-table';
@Component({
selector: 'app-example',
imports: [DataTableModule],
templateUrl: './example.component.html',
styleUrl: './example.component.css'
})
export class ExampleComponent { }
example.module.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ExampleComponent } from './example.component';
import { DataTableModule } from 'ngx-s-data-table';
@NgModule({
declarations: [ExampleComponent],
imports: [
CommonModule,
DataTableModule
],
exports: [ExampleComponent]
})
export class ExampleModule { }
Basic:
Use the ngx-s-data-table component with a data source and corresponding class:
import { Component } from '@angular/core';
import { users } from './sample-data.data';
import { User } from '../classes/user.class';
@Component({
selector: 'app-example',
standalone: false,
templateUrl: './example.component.html',
styleUrl: './example.component.css'
})
export class ExampleComponent {
// Replace the class and data source with your own.
dataClass = User;
dataSource = users;
}
In template use the ngx-s-data-table providing the source and class
<ngx-s-data-table
[dataClass]="dataClass"
[dataSource]="dataSource"
>
</ngx-s-data-table>
The table should be filled with the data provided.
Customization and compositions The library exports a PropertyMapping class that allows you to specify how the table should handle the data. Especially useful when working with complex or nested data structures.
import { Component } from '@angular/core';
import { orders } from './sample-data.data';
import { Order } from '../classes/order.class';
import { PropertyMapping } from 'ngx-s-data-table';
@Component({
selector: 'app-example',
standalone: false,
templateUrl: './example.component.html',
styleUrl: './example.component.css'
})
export class ExampleComponent {
dataClass = Order;
dataSource = orders;
propertyMappings: PropertyMapping[] = [
// both are compositions, this is telling the table to display the "name"
// property for each one of them
new PropertyMapping("user")
.withCompositionProperty("name"),
new PropertyMapping("products")
.withCompositionProperty("name"),
// this is adding a collumn that will display the price of each product
new PropertyMapping("products").namedAs("prices")
.withCompositionProperty("price"),
// this tells the table that the id will be unique and is meant to not
// be displayed
new PropertyMapping("id")
.beingPrimaryKey().beingIgnored()
];
}
And then input the mappings specified to the component
<ngx-s-data-table
[dataClass]="dataClass"
[dataSource]="dataSource"
[mappingParams]="propertyMappings"
>
</ngx-s-data-table>
To handle compositions with same property meant to be displayed, it's possible to input the component with a default one. Many more default behaviors can be assigned inputing data to the component, see the API for further information.
<ngx-s-data-table
[dataClass]="dataClass"
[dataSource]="dataSource"
[mappingParams]="propertyMappings"
[defaultCompositionProperty]="'name'"
[primaryKeyProperty]="'id'"
[expandableProperty]="'htmlDescription'"
[headBackgroundColor]="'rgb(150, 150, 150)'"
>
</ngx-s-data-table>
Options The table by default won't have click, expansion, filtering or pagination features enabled, needing you to specify which features to use and, possibly, define a valid primary key to assure proper behavior.
<ngx-s-data-table
[dataClass]="dataClass"
[dataSource]="dataSource"
[primaryKeyProperty]="'id'"
[expandableProperty]="'htmlDescription'"
[useExpantion]="true"
[useGeneralFilter]="true"
[useColumnsFilter]="true"
[usePagination]="true"
[pageSize]="25"
[useSelection]="true"
(selectedActionEvent)="handleSelectedItens($event)"
>
</ngx-s-data-table>
Again, look for the API for further information.
Input | Type | Usage |
---|---|---|
[dataClass] | new (...args: any[]) => any | Class of the data source. |
[dataSource] | Record<string, any>[] | Data source, an array of objects to be displayed. |
[mappingParams] | PropertyMapping[] | Specific configuration for the properties to be displayed. |
[headBackgroundColor] | string | background-color css attribute value for the thead element. |
[primaryKeyProperty] | string | Name of the property that is unique across the source of data. |
[defaultCompositionProperty] | string | Name of the default property to be displayed whenever there is a composition. |
[expandableProperty] | string | Name of the property which value is to be displayed as HTML whenever a row is expanded. |
[useExpantion] | boolean | Enables the row expantion feature. |
[useGeneralFilter] | boolean | Enables a general filter. |
[useColumnsFilter] | boolean | Enables a column based filter. |
[useSelection] | boolean | Enables a checkbox based selection. |
[usePagination] | boolean | Enables pagination. |
[useClick] | boolean | Enables emitting click events by clicking a row. |
[pageSize] | number | Number of rows to be displayed by page. Default is 50. |
[dateFormat] | string | Date format. Example: "MM/dd/yyyy". |
[Output] | Event type | Usage |
---|---|---|
(clickEvent) | any | emits the value of the primary key property from the clicked row object |
(selectedActionEvent) | Record<string, any>[] | emits the selected rows objects |
Method | Usage |
---|---|
new PropertyMapping(propertyName: string, isIgnored: boolean = false) | PropertyMapping class constructor, defines the mapped property name |
namedAs(columnName: string) | Defines the column name for the property specified |
withCompositionProperty(compositionPropertyName: string) | Defines which property within the object should be displayed by the table |
beingPrimaryKey(isPrimaryKey: boolean = true) | Defines the property as a primary key |
beingIgnored(isIgnored: boolean = true) | Defines that the property shouldn't be displayed |
beingExpandableContent(isExpandableContent: boolean = true) | Defines the property as the content to be displayed when the row's object is expanded |
get propertyName() | gets the property name |
get columnName() | gets the column name |
isIgnored() | gets if the property is to be ignored |
isPrimaryKey | gets if the property is a primary key |
isExpandableContent | gets if the property is expandable content |
compositionPropertyName | gets the name of the property whose value is to be displayed |
|