--- Added: v2.0.0 Status: Active Last reviewed: 2018-04-16 --- # DataTable component Displays data as a table with customizable columns and presentation. ![DataTable demo](../docassets/images/datatable-demo.png) See it live: [DataTable Quickstart](https://embed.plnkr.co/80qr4YFBeHjLMdAV0F6l/) ## Contents - [Basic usage](#basic-usage) - [Properties](#properties) - [Events](#events) - [Details](#details) - [Supplying data for the table](#supplying-data-for-the-table) - [Customizing columns](#customizing-columns) - [DataTable DOM Events](#datatable-dom-events) - [Card view](#card-view) - [Custom Empty content template](#custom-empty-content-template) - [Loading content template](#loading-content-template) - [Using events](#using-events) - [See also](#see-also) ## Basic usage **app.component.html** ```html ``` **app.component.ts** ```ts import { ObjectDataTableAdapter } from '@alfresco/adf-core'; @Component({...}) export class DataTableDemo { data: ObjectDataTableAdapter; constructor() { this.data = new ObjectDataTableAdapter( // data [ {id: 1, name: 'Name 1'}, {id: 2, name: 'Name 2'} ], // schema [ { type: 'text', key: 'id', title: 'Id', sortable: true }, { type: 'text', key: 'name', title: 'Name', cssClass: 'full-width', sortable: true } ] ); } } ``` You can also use HTML-based schema declaration like shown below: ```html ``` ```ts import { ObjectDataTableAdapter } from '@alfresco/adf-core'; @Component({...}) export class DataTableDemo { data: ObjectDataTableAdapter; constructor() { this.data = new ObjectDataTableAdapter( // data [ { id: 1, name: 'Name 1', createdBy : { name: 'user'}, createdOn: 123, icon: 'http://example.com/img.png' }, { id: 2, name: 'Name 2', createdBy : { name: 'user 2'}, createdOn: 123, icon: 'http://example.com/img.png' } ] ); } } ``` ## Class members ### Properties | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | data | `DataTableAdapter` | | Data source for the table | | display | `string` | `DisplayMode.List` | Selects the display mode of the table. Can be "list" or "gallery". | | rows | `any[]` | `[]` | The rows that the datatable will show. | | selectionMode | `string` | `'single'` | Row selection mode. Can be none, `single` or `multiple`. For `multiple` mode, you can use Cmd (macOS) or Ctrl (Win) modifier key to toggle selection for multiple rows. | | multiselect | `boolean` | `false` | Toggles multiple row selection, which renders checkboxes at the beginning of each row. | | actions | `boolean` | `false` | Toggles the data actions column. | | actionsPosition | `string` | `'right'` | Position of the actions dropdown menu. Can be "left" or "right". | | fallbackThumbnail | `string` | | Fallback image for rows where the thumbnail is missing. | | contextMenu | `boolean` | `false` | Toggles custom context menu for the component. | | allowDropFiles | `boolean` | `false` | Toggles file drop support for rows (see [Upload directive](upload.directive.md) for further details). | | rowStyle | `string` | | The inline style to apply to every row. See [NgStyle](https://angular.io/docs/ts/latest/api/common/index/NgStyle-directive.html) docs for more details and usage examples. | | rowStyleClass | `string` | `''` | The CSS class to apply to every row. | | showHeader | `boolean` | `true` | Toggles the header. | | loading | `boolean` | `false` | Flag that indicates if the datatable is in loading state and needs to show the loading template (see the docs to learn how to configure a loading template). | | noPermission | `boolean` | `false` | Flag that indicates if the datatable should show the "no permission" template. | ### Events | Name | Type | Description | | ---- | ---- | ----------- | | rowClick | `EventEmitter` | Emitted when the user clicks a row. | | rowDblClick | `EventEmitter` | Emitted when the user double-clicks a row. | | showRowContextMenu | `EventEmitter` | Emitted before the context menu is displayed for a row. | | showRowActionsMenu | `EventEmitter` | Emitted before the actions menu is displayed for a row. | | executeRowAction | `EventEmitter` | Emitted when the user executes a row action. | ## Details ### Supplying data for the table The column layout and row data are supplied to the table using an object that implements the DataTableAdapter interface. This interface hides the internal details of the class that provides the data, which gives a lot of flexibility in how the data can be stored and accessed. The DataTable library includes a standard adapter class called `ObjectDataTableAdapter` that is useful in many common cases. See the [DataTableAdapter](datatable-adapter.interface.md) for full details about the interface and the `ObjectDataTableAdapter` class. ### Customizing columns You can define custom HTML templates for columns and also add tooltips, automatic column title translation and other features. See the [Data Column component](data-column.component.md) page for more information. ### DataTable DOM Events Below are the DOM events emitted by the DataTable component. These events bubble up the component tree and can be handled by any parent component. | Name | Description | | ---- | ----------- | | row-click | Raised when user clicks a row | | row-dblclick | Raised when user double-clicks a row | | row-select | Raised after user selects a row | | row-unselect | Raised after user unselects a row | | row-keyup | Raised on the 'keyup' event for the focused row. | | sorting-changed | Raised after user clicks the sortable column header. | For example: ```html ``` ```ts onRowClick(event) { console.log(event); } ``` ![](../docassets/images/datatable-dom-events.png) ### Card view Set the `display` property to "gallery" to enable Card View mode: ```html

Sorry, no content

``` You can use the empty list component to show the default ADF empty template. You can place any HTML layout or Angular component as content in the empty template section by using the ``, ``, and `` elements: ```html "'My custom Header'" "'My custom body'" "'My custom footer'" "'HTML Layout'" ``` | Name | Type | Default | Description | | ---- | ---- | ------- | ----------- | | emptyListImageUrl | String | empty_doc_lib.svg | The default image used as the background | | emptyMsg | String | This list is empty | The default title message | | dragDropMsg | String | Drag and drop | The default drag and drop message | | additionalMsg | String | Drag and drop | The default additional message | ![](../docassets/images/adf-empty-list.png) ### Loading content template You can add a template to be shown while your data is loading: ```html ``` ```js isLoading(): boolean { //your custom logic to identify if you are in a loading state } ``` Note: the `` and `` can be used together. ### Using events #### row-keyup DOM event Emitted on the 'keyup' event for the focused row. This is an instance of `CustomEvent` with the `details` property containing the following object: ```ts row: DataRow, keyboardEvent: KeyboardEvent, sender: any ``` #### rowClick event Emitted when the user clicks a row. Event properties: ```ts sender: any // DataTable instance value: DataRow, // row clicked event: Event // original HTML DOM event ``` Handler example: ```ts onRowClicked(event: DataRowEvent) { console.log(event.value); } ``` This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. #### rowDblClick event Emitted when the user double-clicks a row. Event properties: ```ts sender: any // DataTable instance value: DataRow, // row clicked event: Event // original HTML DOM event ``` Handler example: ```ts onRowDblClicked(event: DataRowEvent) { console.log(event.value); } ``` This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. #### showRowContextMenu event Emitted before the context menu is displayed for a row. Note that the DataTable itself does not populate the context menu with items. You can provide all necessary content via the handler. Event properties: ```ts value: { row: DataRow, col: DataColumn, actions: [] } ``` Handler example: ```ts onShowRowContextMenu(event: DataCellEvent) { event.value.actions = [ { ... }, { ... } ] } ``` This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. The DataTable will automatically render the supplied menu items. See the [ContextMenu](https://www.npmjs.com/package/ng2-alfresco-core) documentation for more details on the format and behavior of context actions. #### showRowActionsMenu event Emitted before the actions menu is displayed for a row. Requires the `actions` property to be set to `true`. Event properties: ```ts value: { row: DataRow, action: any } ``` Note that the DataTable itself does not populate the action menu with items. You can provide all necessary content via the handler. This event is cancellable. You can use `event.preventDefault()` to prevent the default behavior. #### executeRowAction event Emitted when the user executes a row action. This usually accompanies a `showRowActionsMenu` event. The DataTable itself does not execute actions but provides support for external integration. If actions are provided using the `showRowActionsMenu` event then `executeRowAction` will be automatically executed when the user clicks a corresponding menu item. ```html ``` ```ts import { DataCellEvent, DataRowActionEvent } from '@alfresco/adf-core'; onShowRowActionsMenu(event: DataCellEvent) { let myAction = { title: 'Hello' // your custom metadata needed for onExecuteRowAction }; event.value.actions = [ myAction ]; } onExecuteRowAction(event: DataRowActionEvent) { let args = event.value; console.log(args.row); console.log(args.action); window.alert(`My custom action: ${args.action.title}`); } ``` ![](../docassets/images/datatable-actions-ui.png) ![](../docassets/images/datatable-actions-console.png) You can use any payloads for row actions. The only requirement for the objects is that they must have a `title` property. When an action is selected in the dropdown menu, the DataTable invokes the `executeRowAction` event. Use this to handle the response, inspect the action payload (and all custom properties defined earlier), and perform the corresponding actions. ## See also - [Data column component](data-column.component.md) - [Pagination component](pagination.component.md) - [DataTableAdapter](datatable-adapter.interface.md) - [Document list component](../content-services/document-list.component.md)