--- Title: File Lists --- ## Custom File lists layout In this tutorial, we are going to implement the following features: - [Add a column in the Files list using a Node property](#add-a-column-in-the-files-list-using-a-node-property) - [Replace a column in the Files list](#replace-a-column-in-the-files-list) - [Add a Column in the Files list using a custom template](#add-a-column-in-the-files-list-using-a-node-property) ## File lists layout The file list layout of: - files - libraries - favoriteLibraries - shared - recent - favorites - trashcan - searchLibraries are all defined in the `/src/assets/app.extensions.json` of the content-app. All the possible properties customizable in the column are: ### Properties | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | id | `string` | | Unique identifier of the column | | key | `string` | | Data source key. Can be either a column/property key like `title` or a property path like `createdBy.name`. | | 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', 'image', 'date', 'fileSize', 'location', and 'json'. | | class | `string` | | Additional CSS class to be applied to column (header and cells). | | sortable | `boolean` | true | Toggles ability to sort by this column, for example by clicking the column header. | | template | `string` | optional |Custom layout template ID | | desktopOnly | `string` | | Show the column only in bigger viewport | | order | `string` | | Visualization order of the column | #### Type - **text** this will show the property as a plain text - **fileSize** will convert the text into kb/mb/gb as needed. - **json** Shows a JSON-formatted value - **date** For the `date` column type, the Angular [DatePipe](https://angular.io/docs/ts/latest/api/common/DatePipe-class.html) formatting is used. - **Location** this displays a clickable location link pointing to the parent path of the node. ### Add a column in the Files list using a Node property Update the `your-app.extensions.json` file, and insert a new entry to the `features.documentList` section: ```json { "features": { "documentList": { "files": [ { "id": "app.files.type", "key": "nodeType", "title": "APP.DOCUMENT_LIST.COLUMNS.TYPE", "type": "text", "class": "adf-ellipsis-cell adf-expand-cell-5", "sortable": true, "desktopOnly": false, "order": 102 } ] } } } ``` Now, once you run the application, you should see an extra column that contain the code of your custom component ### Replace a column in the Files list In order to replace a column in the list you need to use the same `id` in your extension file. For example to replace the modifedOn column add the following JSON in `your-app.extensions.json` ```json { "features": { "documentList": { "files": [ { "id": "app.files.modifiedOn", "key": "modifiedByUser.displayName", "title": "APP.DOCUMENT_LIST.COLUMNS.MODIFIED_FROM", "type": "text", "class": "adf-ellipsis-cell", "sortable": true, "desktopOnly": true, "order": 40 } ] } } } ``` ### Add a Column in the Files list using a custom component template As first step we can create our custom component in our extension: ```typescript import { NameColumnComponent } from '@alfresco/adf-content-services'; import { Component, ChangeDetectionStrategy, ViewEncapsulation, ElementRef, OnInit, OnDestroy } from '@angular/core'; import { AlfrescoApiService } from '@alfresco/adf-core'; @Component({ selector: 'custom-template-column', template: `
This is a custom Template For File
This is a custom Template For Folders
`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'adf-datatable-content-cell adf-name-column' }, }) export class CustomTemplateComponent extends NameColumnComponent implements OnInit, OnDestroy { constructor(public elementRef: ElementRef, private apiService: AlfrescoApiService) { super(elementRef, apiService); } isFile(){ return this.node.entry.isFile; } } ``` In order to understand how to register a custom component refer to the [Registration](/extending/registration) documentation Once your component is registered. Register your new template component: ```typescript extensions.setComponents({ 'app.columns.custom': CustomTemplateComponent, }); ``` Add your new Column in `your-app.extensions.json` : ```json { "features": { "documentList": { "files": [ { "id": "app.files.custom", "key": "name", "title": "APP.DOCUMENT_LIST.COLUMNS.CUSTOM", "type": "text", "class": "adf-ellipsis-cell adf-expand-cell-5", "sortable": true, "template": "app.columns.custom", "desktopOnly": false } ] } } } ```