From d92fc5e969f5eb1cf0e3b9c3bdfc94a279fcc119 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Tue, 17 Sep 2019 19:00:11 +0530 Subject: [PATCH] feat: Allow overriding individual components --- src/cellmanager.js | 2 +- src/datatable.js | 40 ++++++++++++++++++++++++++++++++-------- src/defaults.js | 3 +++ 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/cellmanager.js b/src/cellmanager.js index 9c49fc8..a796297 100644 --- a/src/cellmanager.js +++ b/src/cellmanager.js @@ -788,7 +788,7 @@ export default class CellManager { isHeader ? 'dt-cell--header' : '', isHeader ? `dt-cell--header-${colIndex}` : '', isFilter ? 'dt-cell--filter' : '', - isBodyCell && row.meta.isTreeNodeClose ? 'dt-cell--tree-close' : '' + isBodyCell && (row && row.meta.isTreeNodeClose) ? 'dt-cell--tree-close' : '' ].join(' '); return ` diff --git a/src/datatable.js b/src/datatable.js index dc21c79..0d7991b 100644 --- a/src/datatable.js +++ b/src/datatable.js @@ -8,6 +8,16 @@ import Style from './style'; import Keyboard from './keyboard'; import DEFAULT_OPTIONS from './defaults'; +let defaultComponents = { + DataManager, + CellManager, + ColumnManager, + RowManager, + BodyRenderer, + Style, + Keyboard +}; + class DataTable { constructor(wrapper, options) { DataTable.instances++; @@ -23,14 +33,7 @@ class DataTable { this.buildOptions(options); this.prepare(); - - this.style = new Style(this); - this.keyboard = new Keyboard(this.wrapper); - this.datamanager = new DataManager(this.options); - this.rowmanager = new RowManager(this); - this.columnmanager = new ColumnManager(this); - this.cellmanager = new CellManager(this); - this.bodyRenderer = new BodyRenderer(this); + this.initializeComponents(); if (this.options.data) { this.refresh(); @@ -66,6 +69,27 @@ class DataTable { this.unfreeze(); } + initializeComponents() { + let components = Object.assign({}, defaultComponents, this.options.overrideComponents); + let { + Style, + Keyboard, + DataManager, + RowManager, + ColumnManager, + CellManager, + BodyRenderer + } = components; + + this.style = new Style(this); + this.keyboard = new Keyboard(this.wrapper); + this.datamanager = new DataManager(this.options); + this.rowmanager = new RowManager(this); + this.columnmanager = new ColumnManager(this); + this.cellmanager = new CellManager(this); + this.bodyRenderer = new BodyRenderer(this); + } + prepareDom() { this.wrapper.innerHTML = `
diff --git a/src/defaults.js b/src/defaults.js index 7dff8b4..1a2cbd9 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -46,6 +46,9 @@ export default { desc: '↓', none: '' }, + overrideComponents: { + // ColumnManager: CustomColumnManager + }, filterRows: filterRows, freezeMessage: '', getEditor: null,