From 2b7ae8c8c49afc3f025108e34fcfe7028db3da58 Mon Sep 17 00:00:00 2001
From: Christoph Reiter <reiter.christoph@gmail.com>
Date: Tue, 3 Dec 2019 12:56:19 +0100
Subject: [PATCH] Don't require a columns-count attribute

Instead infer that from the columns and defer the init of the table to when we actually set
the columns data.
---
 .../src/vpu-data-table-view-demo.js           |  4 ++--
 .../src/vpu-data-table-view.js                | 21 +++++++++----------
 2 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/packages/data-table-view/src/vpu-data-table-view-demo.js b/packages/data-table-view/src/vpu-data-table-view-demo.js
index 56426b7a..a252e215 100644
--- a/packages/data-table-view/src/vpu-data-table-view-demo.js
+++ b/packages/data-table-view/src/vpu-data-table-view-demo.js
@@ -163,12 +163,12 @@ class DataTableViewDemo extends LitElement {
                     <h4>DataTable: with data, paging and searching AND exportable</h4>
                      <div class="box">
                         <vpu-data-table-view paging searching exportable export-name="Demo Export"
-                                             lang="${this.lang}" id="vdtv1" columns-count="5"></vpu-data-table-view>
+                                             lang="${this.lang}" id="vdtv1"></vpu-data-table-view>
                     </div>
                     <h4>DataTable: no data, no paging, no searching</h4>
                     <div class="box">
                     <button @click="${this.vdtv2_add_rows}">noch etwas...</button>
-                        <vpu-data-table-view lang="${this.lang}" id="vdtv2" columns-count="5">></vpu-data-table-view>
+                        <vpu-data-table-view lang="${this.lang}" id="vdtv2">></vpu-data-table-view>
                     </div>
                 </div>
                 <div class="content">
diff --git a/packages/data-table-view/src/vpu-data-table-view.js b/packages/data-table-view/src/vpu-data-table-view.js
index c2ea0a35..3d5e9cc6 100644
--- a/packages/data-table-view/src/vpu-data-table-view.js
+++ b/packages/data-table-view/src/vpu-data-table-view.js
@@ -32,10 +32,9 @@ class DataTableView extends LitElement {
         this.responsive = null;
         this.paging = false;
         this.searching = false;
-        this.columns = [{title: 'uninitialized'}];
+        this.columns = [];
         this.columnDefs = [];
         this.data = [];
-        this.cc = 1;
         this.cssStyle = '';
         this.exportable = false;
         this.exportName = 'Data Export';
@@ -54,7 +53,6 @@ class DataTableView extends LitElement {
             columns: { type: Array, attribute: false },
             columnDefs: { type: Array, attribute: false },
             data: { type: Array, attribute: false },
-            cc: {type: Number, attribute: 'columns-count'},
             cssStyle: { type: String, attribute: false },
             exportable: { type: Boolean },
             exportName: { type: String, attribute: 'export-name' }
@@ -82,10 +80,10 @@ class DataTableView extends LitElement {
     set_datatable(data) {
         const lang_obj = this.lang === 'de' ? de : en;
 
-        if (this.cc > this.columns.length) {
-            for (let i = this.columns.length; i < this.cc; ++i) {
-                this.columns.push({title: ''});
-            }
+        if (!this.columns.length) {
+            if (data.length)
+                throw new Error('columns not set-up');
+            return;
         }
 
         this.table = $(this.shadowRoot.querySelector('table')).DataTable({
@@ -125,9 +123,9 @@ class DataTableView extends LitElement {
         } catch (e) {
             // XXX: it throws, but it still works
         }
-        if (data) {
-            this.data = data;
-        }
+
+        this.data = data;
+
         this.table.clear().rows.add(this.data).draw();
     }
 
@@ -139,7 +137,8 @@ class DataTableView extends LitElement {
         });
 
         super.update(changedProperties);
-        this.updateComplete.then(this.set_datatable()).catch(e => { console.log(e)});
+
+        this.updateComplete.then(this.set_datatable(this.data)).catch(e => { console.log(e)});
     }
 
     static get styles() {
-- 
GitLab