diff --git a/ng2-components/ng2-alfresco-datatable/README.md b/ng2-components/ng2-alfresco-datatable/README.md
index 621d864df4..1233c10340 100644
--- a/ng2-components/ng2-alfresco-datatable/README.md
+++ b/ng2-components/ng2-alfresco-datatable/README.md
@@ -162,16 +162,53 @@ platformBrowserDynamic().bootstrapModule(AppModule);
You can also use HTML-based schema declaration like shown below:
-```html
-
-
-
-
-
-
-
-
-
+```ts
+import { NgModule, Component } from '@angular/core';
+import { BrowserModule } from '@angular/platform-browser';
+import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
+import { CoreModule } from 'ng2-alfresco-core';
+import { DataTableModule, ObjectDataTableAdapter } from 'ng2-alfresco-datatable';
+
+@Component({
+ selector: 'alfresco-app-demo',
+ template: `
+
+
+
+
+
+
+
+
+
+ `
+})
+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'}
+ ]
+ );
+ }
+}
+
+@NgModule({
+ imports: [
+ BrowserModule,
+ CoreModule.forRoot(),
+ DataTableModule.forRoot()
+ ],
+ declarations: [DataTableDemo],
+ bootstrap: [DataTableDemo]
+})
+export class AppModule {}
+
+platformBrowserDynamic().bootstrapModule(AppModule);
```
### DataTable Properties
diff --git a/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.spec.ts b/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.spec.ts
index 5a90089387..5004b55cfa 100644
--- a/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.spec.ts
+++ b/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.spec.ts
@@ -15,6 +15,7 @@
* limitations under the License.
*/
+import { SimpleChange } from '@angular/core';
import { ComponentFixture, TestBed, async } from '@angular/core/testing';
import { CoreModule } from 'ng2-alfresco-core';
import { DataTableComponent } from './datatable.component';
@@ -55,7 +56,8 @@ describe('DataTable', () => {
// dataTable = new DataTableComponent();
eventMock = {
- preventDefault: function () {}
+ preventDefault: function () {
+ }
};
});
@@ -95,6 +97,15 @@ describe('DataTable', () => {
expect(table.data).toEqual(jasmine.any(ObjectDataTableAdapter));
});
+ it('should load data table on onChange', () => {
+ let table = new DataTableComponent(null);
+ let data = new ObjectDataTableAdapter([], []);
+
+ expect(table.data).toBeUndefined();
+ table.ngOnChanges({'data': new SimpleChange('123', data)});
+ expect(table.data).toEqual(data);
+ });
+
it('should initialize with custom data', () => {
let data = new ObjectDataTableAdapter([], []);
dataTable.data = data;
diff --git a/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.ts b/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.ts
index 44bc6a2c11..39481b380d 100644
--- a/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.ts
+++ b/ng2-components/ng2-alfresco-datatable/src/components/datatable/datatable.component.ts
@@ -15,7 +15,19 @@
* limitations under the License.
*/
-import { Component, Input, Output, EventEmitter, ElementRef, TemplateRef, AfterContentInit, ContentChild, Optional } from '@angular/core';
+import {
+ Component,
+ OnChanges,
+ SimpleChanges,
+ Input,
+ Output,
+ EventEmitter,
+ ElementRef,
+ TemplateRef,
+ AfterContentInit,
+ ContentChild,
+ Optional
+} from '@angular/core';
import { DataTableAdapter, DataRow, DataColumn, DataSorting, DataRowEvent, ObjectDataTableAdapter } from '../../data/index';
import { DataCellEvent } from './data-cell.event';
import { DataRowActionEvent } from './data-row-action.event';
@@ -29,7 +41,7 @@ declare var componentHandler;
styleUrls: ['./datatable.component.css'],
templateUrl: './datatable.component.html'
})
-export class DataTableComponent implements AfterContentInit {
+export class DataTableComponent implements AfterContentInit, OnChanges {
@ContentChild(DataColumnListComponent) columnList: DataColumnListComponent;
@@ -80,6 +92,17 @@ export class DataTableComponent implements AfterContentInit {
}
ngAfterContentInit() {
+ this.loadTable();
+ }
+
+ ngOnChanges(changes: SimpleChanges) {
+ if (changes['data'] && changes['data'].currentValue) {
+ this.loadTable();
+ return;
+ }
+ }
+
+ loadTable() {
let schema: DataColumn[] = [];
if (this.columnList && this.columnList.columns) {
@@ -88,16 +111,22 @@ export class DataTableComponent implements AfterContentInit {
if (!this.data) {
this.data = new ObjectDataTableAdapter([], schema);
- } else if (schema && schema.length > 0) {
- this.data.setColumns(schema);
+ } else {
+ this.setHtmlColumnConfigurationOnObjectAdapter(schema);
}
- // workaround for MDL issues with dynamic components
+ // workaround for MDL issues with dynamic components
if (componentHandler) {
componentHandler.upgradeAllRegistered();
}
}
+ private setHtmlColumnConfigurationOnObjectAdapter(schema: DataColumn[]) {
+ if (schema && schema.length > 0) {
+ this.data.setColumns(schema);
+ }
+ }
+
onRowClick(row: DataRow, e?: Event) {
if (e) {
e.preventDefault();