From beb37a2dedd539ae9d1de6e5657598d9caaf0081 Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Tue, 19 Jul 2016 10:21:22 +0100 Subject: [PATCH] test and doc generateSchema --- .../ng2-alfresco-datatable/README.md | 34 +++++++++++++++++++ .../src/data/object-datatable-adapter.spec.ts | 13 +++++++ .../src/data/object-datatable-adapter.ts | 26 ++++++++------ .../src/webscript.component.ts | 2 +- 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/ng2-components/ng2-alfresco-datatable/README.md b/ng2-components/ng2-alfresco-datatable/README.md index 26681e0ca7..7f68b788ff 100644 --- a/ng2-components/ng2-alfresco-datatable/README.md +++ b/ng2-components/ng2-alfresco-datatable/README.md @@ -307,6 +307,7 @@ a custom `DataTableAdapter` using the following interfaces: ```ts interface DataTableAdapter { + generateSchema(row: DataRow): col: DataColumn; getRows(): Array; setRows(rows: Array): void; getColumns(): Array; @@ -363,6 +364,39 @@ let data = new ObjectDataTableAdapter( ); ``` +## Generate schema +Is possible to auto generate your schema if you have only the data row + +```ts +let data = [ + { id: 2, name: 'abs' }, + { id: 1, name: 'xyz' } +]; + +let schema = ObjectDataTableAdapter.generateSchema(data); + +/*Auto generated schema value: + + [ + { + type: 'text', + key: 'id', + title: 'Id', + sortable: false + }, + { + type: 'text', + key: 'name', + title: 'Name', + sortable: false + } + ] + + */ + +``` + + ## Build from sources Alternatively you can build component from sources with the following commands: diff --git a/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.spec.ts b/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.spec.ts index 95eeb8ee97..75d4c1abb5 100644 --- a/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.spec.ts +++ b/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.spec.ts @@ -367,4 +367,17 @@ describe('ObjectDataRow', () => { expect(row.hasValue('some.other.prop')).toBeFalsy(); }); + it('should generateSchema generate a schema from data', () => { + let data = [ + { id: 2, name: 'abs' }, + { id: 1, name: 'xyz' } + ]; + + let schema = ObjectDataTableAdapter.generateSchema(data); + + expect(schema.length).toBe(2); + expect(schema[0].title).toBe('id'); + expect(schema[1].title).toBe('name'); + }); + }); diff --git a/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts b/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts index d0094fb1b5..b86de45d14 100644 --- a/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts +++ b/ng2-components/ng2-alfresco-datatable/src/data/object-datatable-adapter.ts @@ -32,22 +32,26 @@ export class ObjectDataTableAdapter implements DataTableAdapter { private _rows: DataRow[]; private _columns: DataColumn[]; - static generateSchema(rowToExaminate: any) { + static generateSchema(data: any[]) { let schema = []; - if (typeof rowToExaminate === 'object') { - for (let key in rowToExaminate) { - if (rowToExaminate.hasOwnProperty(key)) { - schema.push({ - type: 'text', - key: key, - title: key, - sortable: false - }); + if (data && data.length) { + let rowToExaminate = data[0]; + + if (typeof rowToExaminate === 'object') { + for (let key in rowToExaminate) { + if (rowToExaminate.hasOwnProperty(key)) { + schema.push({ + type: 'text', + key: key, + title: key, + sortable: false + }); + } } } - } + } return schema; } diff --git a/ng2-components/ng2-alfresco-webscript/src/webscript.component.ts b/ng2-components/ng2-alfresco-webscript/src/webscript.component.ts index 72354fc6c7..e7cc434bdb 100644 --- a/ng2-components/ng2-alfresco-webscript/src/webscript.component.ts +++ b/ng2-components/ng2-alfresco-webscript/src/webscript.component.ts @@ -163,7 +163,7 @@ export class WebscriptComponent { let datatableShow = true; try { if (!data.schema) { - data.schema = ObjectDataTableAdapter.generateSchema(data.data[0]); + data.schema = ObjectDataTableAdapter.generateSchema(data.data); } if (data.schema && data.schema.length > 0) { this.data = new ObjectDataTableAdapter(data.data, data.schema);