Title | Added | Status | Last reviewed |
---|---|---|---|
Data Column Component |
v2.0.0 |
Active |
2019-04-12 |
Defines column properties for DataTable, Tasklist, Document List and other components.
<adf-datatable [data]="data">
<data-columns>
<data-column key="icon" type="image" [sortable]="false"></data-column>
<data-column key="id" title="Id"></data-column>
<data-column key="createdOn" title="Created"></data-column>
<data-column key="name" title="Name" class="full-width name-column"></data-column>
<data-column key="createdBy.name" title="Created By"></data-column>
</data-columns>
</adf-datatable>
Name | Type | Default value | Description |
---|---|---|---|
copyContent | boolean |
Enables/disables a Clipboard directive to allow copying of cell contents. | |
cssClass | string |
Additional CSS class to be applied to column (header and cells). | |
customData | any |
You can specify any custom data which can be used by any specific feature | |
draggable | boolean |
false | Enable drag and drop for header column |
resizable | boolean |
true | Enable column resizing |
editable | boolean |
false | Toggles the editing support of the column data. |
focus | boolean |
true | Enable or disable cell focus |
format | string |
Value format (if supported by the parent component), for example format of the date. | |
formatTooltip | Function |
Custom tooltip formatter function. | |
id | string |
"" | Id of the Column |
isHidden | boolean |
false | Hide column |
key | string |
Data source key. Can be either a column/property key like title or a property path like createdBy.name . |
|
sortable | boolean |
true | Toggles ability to sort by this column, for example by clicking the column header. |
sortingKey | string |
When using server side sorting the column used by the api call where the sorting will be performed | |
srTitle | string |
Title to be used for screen readers. | |
title | string |
"" | Display title of the column, typically used for column headers. You can use the i18n resource key to get it translated automatically. |
type | string |
"text" | Value type for the column. Possible settings are 'text', 'boolean', 'icon', 'image', 'date', 'fileSize', 'location', 'json', 'amount' and 'number'. |
order | number |
Sets position of column. | |
currencyConfig | CurrencyConfig |
Default currency config | Currency configuration to customize the formatting and display of currency values within the component. |
decimalConfig | DecimalConfig |
Default decimal config | Decimal configuration to customize the formatting and display of decimal values within the component. |
dateConfig | DateConfig |
Default date config | Date configuration to customize the formatting and localization of date values within the component. |
The type
input allows us to specify the type of hosted values for a given column. The complete array of possible values is outlined below:
text
- The given values are represented as a strings (default option).boolean
- The column expects true / false (boolean values) and in addition accepts two strings - 'false' and 'true'. Other values are not recognized by the column, and the cell remains empty.date
- This column is responsible for displaying dates. It expects date represented by a string, number or Date object. This type comes withdateConfig
,amount
- This column is responsible for displaying currencies. It expects numerals represented by a string or a number. This type comes withcurrencyConfig
,number
- This column is responsible for displaying numbers (integers and decimals). It expects numerals represented by a string or a number. This type comes withdecimalConfig
location
- This column displays a clickable location link pointing to the parent path of the node. Note: This type is strongly related to the document list component (document-list.component.md).icon
- Allows us to display Material Icons supported by Google. Example values: group, favorite, thumb_up and many more. The complete list of the icons - Google Icons.
The currencyConfig
input allows you to customize the formatting and display of currency values within the component. It accepts an object of type CurrencyConfig
with optional properties for specifying the currency code, display format, decimal precision, and locale.
code
(optional): A string representing the currency code (e.g., "USD" for US Dollars).display
(optional): A string specifying how the currency value should be displayed.digitsInfo
(optional): A string determining the number of decimal places and other formatting details.locale
(optional): A string indicating the locale or region-specific formatting to use for the currency.
By default, the currencyConfig
input is not required. If not provided, the component will use the following default values:
code
: "USD"display
: "symbol"digitsInfo
: undefinedlocale
: undefined
These properties offer flexibility in customizing how currency values are presented within the component.
For more details on the possible use cases of the above properties, see the official Angular documents.
The decimalConfig
input allows you to customize the formatting and display of decimal values within the component. It accepts an object of type DecimalConfig
with optional properties for specifying the decimal precision and locale.
digitsInfo
(optional): A string determining the number of decimal places and other formatting details.locale
(optional): A string indicating the locale or region-specific formatting to use for the currency.
By default, the decimalConfig
input is not required. If not provided, the component will use the following default values:
digitsInfo
: undefinedlocale
: undefined
These properties offer flexibility in customizing how decimal values are presented within the component.
For more details on the possible use cases of the above properties, see the official Angular documents.
The dateConfig
input allows you to configure date formatting and localization for a component. It accepts an object of type DateConfig
with optional properties for specifying the format of displayed date, tooltip and locale.
format
(optional): A string specifying the date format (pre-defined formats).tooltipFormat
(optional): A string specifying the date format for tooltips.locale
(optional): A string indicating the locale or region-specific formatting to use for the currency.
By default, the dateConfig
object is not required. If not provided, the component will use the following default values:
format
: "medium"tooltipFormat
: "medium"locale
: undefined
These properties offer flexibility in customizing how date values are presented within the component.
For more details on the possible use cases of the above properties, see the official Angular documents.
You can use ngIf
directives to provide conditional visibility support for the columns:
<data-column
*nfIg="showNameColumn"
key="name"
title="MY.RESOURCE.KEY">
</data-column>
You can use i18n resource keys with the
DataColumn
title
property.
The component will automatically check the appropriate i18n resources and fetch the corresponding value.
<data-column
key="name"
title="MY.RESOURCE.KEY">
</data-column>
This feature is optional. Regular text (either plain or converted via the translate
pipe) will still work as normal.
You can create custom tooltips for the table cells by providing a formatTooltip
property with a tooltip formatter function when declaring a data column.
<data-column
title="Name"
key="name"
[formatTooltip]="getNodeNameTooltip"
class="full-width ellipsis-cell">
</data-column>
And the code in this case will be similar to the following:
import { DataColumn, DataRow } from '@alfresco/adf-core';
@Component({...})
export class MyComponent {
...
getNodeNameTooltip(row: DataRow, col: DataColumn): string {
if (row) {
return row.getValue('name');
}
return null;
}
}
To disable the tooltip your function can return null
or an empty string.
You can provide custom column/cell header and templates that may contain other Angular components or HTML elements:
Every cell in the DataTable component is bound to the dynamic data context containing the following properties:
Name | Type | Description |
---|---|---|
data | DataTableAdapter |
Data adapter instance. |
row | DataRow |
Current data row instance. |
col | DataColumn |
Current data column instance. |
You can use all three properties to gain full access to underlying data from within your custom templates.
In order to wire HTML templates with the data context you will need to define a variable that is bound to $implicit
as shown below:
<ng-template let-context="$implicit">
<!-- template body -->
</ng-template>
The name format is let-VARIABLE_NAME="$implicit"
where VARIABLE_NAME
is the name of the variable you want to bind the template data context to.
You can also get a cell value from the underlying DataTableAdapter
:
context.data.getValue(entry.row, entry.col);
You can retrieve all property values for the underlying node, including nested properties (via property paths):
context.row.getValue('name')
context.row.getValue('createdByUser.displayName')
You may want to use the row API to get access to the raw values.
<data-column title="Name" key="name" sortable="true" class="full-width ellipsis-cell">
<ng-template let-context="$implicit">
<span>Hi! {{context.row.getValue('createdByUser.displayName')}}</span>
<span>Hi! {{context.row.getValue('name')}}</span>
</ng-template>
</data-column>
Use the data API to get values with post-processing (eg, datetime or icon conversion).
In the Example below we will prepend Hi!
to each file and folder name in the list:
<data-column title="Name" key="name" sortable="true" class="full-width ellipsis-cell">
<ng-template let-entry="$implicit">
<span>Hi! {{entry.data.getValue(entry.row, entry.col)}}</span>
</ng-template>
</data-column>
In the example below we will show capitalised custom name for a column:
<data-column title="Name" key="name" sortable="true" class="full-width ellipsis-cell">
<adf-data-column-header>
<ng-template let-entry="$implicit">
<span>NAME</span>
</ng-template>
</adf-data-column-header>
</data-column>
In the Example below we will integrate the adf-tag-node-list component within the document list.
<data-column
title="Tag"
key="id"
sortable="true"
class="full-width ellipsis-cell">
<ng-template let-entry="$implicit">
<adf-tag-node-list [nodeId]="entry.data.getValue(entry.row, entry.col)"></adf-tag-node-list>
</ng-template>
</data-column>
You can add a custom CSS class to a column using its class
property. This is useful for
many purposes - some examples are given below.
Custom styling can be used to change the look and feel of the icon for the selected rows.
Let's start by assigning an "image-table-cell" class to the thumbnail column:
<adf-document-list ...>
<data-columns>
<data-column
key="$thumbnail"
type="image"
[sortable]="false"
class="adf-image-table-cell">
</data-column>
...
</data-columns>
</adf-document-list>
Now your application can define styles to change the content of the column based on conditions such as the selection state:
adf-document-list ::ng-deep adf-datatable > table > tbody > tr.is-selected > td.adf-datatable-cell.adf-datatable-cell--image.adf-image-table-cell > div > div > mat-icon > svg {
fill: #00bcd4;
}
Once your application starts you should see the following icon for each selected row:
You can hide columns on small screens using custom CSS rules:
@media all and (max-width: 768px) {
alfresco-document-list ::ng-deep th.desktop-only .cell-value {
display: none;
}
alfresco-document-list ::ng-deep td.desktop-only .cell-value {
display: none;
}
}
Now you can declare columns and assign the desktop-only
class where needed:
<adf-document-list ...>
<data-columns>
<!-- always visible columns -->
<data-column key="$thumbnail" type="image"></data-column>
<data-column
title="Name"
key="name"
class="full-width ellipsis-cell">
</data-column>
<!-- desktop-only columns -->
<data-column
title="Created by"
key="createdByUser.displayName"
class="desktop-only">
</data-column>
<data-column
title="Created on"
key="createdAt"
type="date"
format="medium"
class="desktop-only">
</data-column>
</data-columns>
</adf-document-list>
Desktop View
Mobile View
When the copyContent
property is true, a
Clipboard directive
is added to each cell in the column. This lets the user copy the cell content
to the clipboard with a mouse click.
See the Clipboard Directive page for full details of the directive.
Example of using copyContent
from a JSON config file:
[
{"type": "text", "key": "id", "title": "Id", "copyContent": "true"},
{"type": "text", "key": "name", "title": "name"},
]
HTML <data-column>
element example:
<adf-tasklist ...>
<data-columns>
<data-column [copyContent]="true" key="id" title="Id"></data-column>
...
</data-columns>
</adf-tasklist>
If you would like to pass any custom data related to your specific feature, you can use customData
HTML <data-column>
element example:
<data-column [customData]="MyCustomData" key="id" title="Id"></data-column>
You can use generic type for DataColumn
in order to get intellisense working e.g.
const dataColumn: DataColumn<{ shouldPerformActionIfDisplayed: boolean }> = {
...
customData: { shouldPerformActionIfDisplayed: true }
}
// We should get proper types
consol.log(dataColumn.customData.shouldPerformActionIfDisplayed);
// Now we can use this data in our feature e.g.
const shouldPerformAction = this.columns
.filter(column => column.isHidden)
.some(column => column.customData?.shouldPerformActionIfDisplayed === true);
if (shouldPerformAction) { /* action */}