Skip to content
This repository was archived by the owner on Mar 14, 2022. It is now read-only.

Commit 3ebd239

Browse files
committed
Fix a problem with being unable to declare renderers/editors with vanilla JS + refine the autoSize warning mechanism.
1 parent 94f9890 commit 3ebd239

1 file changed

Lines changed: 22 additions & 11 deletions

File tree

src/hotTable.tsx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -336,34 +336,41 @@ class HotTable extends React.Component<HotTableProps, {}> {
336336
newSettings.editor = this.getEditorClass(globalEditorNode);
337337

338338
} else {
339-
newSettings.editor = void 0;
339+
newSettings.editor = this.props.editor || this.props.settings ? this.props.settings.editor : void 0;
340340
}
341341

342342
if (globalRendererNode) {
343343
newSettings.renderer = this.getRendererWrapper(globalRendererNode);
344344

345345
} else {
346-
newSettings.renderer = void 0;
346+
newSettings.renderer = this.props.renderer || this.props.settings ? this.props.settings.renderer : void 0;
347347
}
348348

349349
return newSettings;
350350
}
351351

352352
/**
353353
* Detect if `autoRowSize` or `autoColumnSize` is defined, and if so, throw an incompatibility warning.
354+
*
355+
* @param {Handsontable.GridSettings} newGlobalSettings New global settings passed as Handsontable config.
354356
*/
355-
displayAutoSizeWarning(): void {
357+
displayAutoSizeWarning(newGlobalSettings: Handsontable.GridSettings): void {
356358
if (this.hotInstance.getPlugin('autoRowSize').enabled || this.hotInstance.getPlugin('autoColumnSize').enabled) {
357-
const hotSettings = this.hotInstance.getSettings();
359+
const _this = this;
360+
const isNativeRenderer = function (renderer, column?) {
361+
return column ? (_this.props.columns && _this.props.columns[column] && _this.props.columns[column].renderer === renderer) ||
362+
(_this.props.settings && _this.props.settings.columns && _this.props.settings.columns[column] && _this.props.settings.columns[column].renderer === renderer) :
363+
_this.props.renderer === renderer || _this.props.settings.renderer === renderer;
364+
};
358365
let rendererDefined = false;
359366

360-
if (hotSettings.renderer) {
367+
if (newGlobalSettings.renderer && !isNativeRenderer(newGlobalSettings.renderer)) {
361368
rendererDefined = true;
362369
}
363370

364-
if (!rendererDefined && hotSettings.columns) {
365-
for (let i = 0; i < hotSettings.columns.length; i++) {
366-
if (hotSettings.columns[i].renderer) {
371+
if (!rendererDefined && newGlobalSettings.columns) {
372+
for (let i = 0; i < newGlobalSettings.columns.length; i++) {
373+
if (newGlobalSettings.columns[i].renderer && !isNativeRenderer(newGlobalSettings.columns[i].renderer, i)) {
367374
rendererDefined = true;
368375
break;
369376
}
@@ -445,8 +452,9 @@ class HotTable extends React.Component<HotTableProps, {}> {
445452
*/
446453
componentDidMount(): void {
447454
const hotTableComponent = this;
455+
const newGlobalSettings = this.createNewGlobalSettings();
448456

449-
this.hotInstance = new Handsontable.Core(this.hotElementRef, this.createNewGlobalSettings());
457+
this.hotInstance = new Handsontable.Core(this.hotElementRef, newGlobalSettings);
450458

451459
this.hotInstance.addHook('beforeRender', function (isForced) {
452460
hotTableComponent.handsontableBeforeRender();
@@ -459,7 +467,7 @@ class HotTable extends React.Component<HotTableProps, {}> {
459467
// `init` missing in Handsontable's type definitions.
460468
(this.hotInstance as any).init();
461469

462-
this.displayAutoSizeWarning();
470+
this.displayAutoSizeWarning(newGlobalSettings);
463471
}
464472

465473
/**
@@ -474,7 +482,10 @@ class HotTable extends React.Component<HotTableProps, {}> {
474482
* Logic performed after the component update.
475483
*/
476484
componentDidUpdate(): void {
477-
this.updateHot(this.createNewGlobalSettings());
485+
const newGlobalSettings = this.createNewGlobalSettings();
486+
this.updateHot(newGlobalSettings);
487+
488+
this.displayAutoSizeWarning(newGlobalSettings);
478489
}
479490

480491
/**

0 commit comments

Comments
 (0)