@handsontable/react 14.1.0 → 14.2.0-next-7ae341f-20240229
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commonjs/react-handsontable.js +86 -39
- package/dist/react-handsontable.js +89 -44
- package/dist/react-handsontable.js.map +1 -1
- package/dist/react-handsontable.min.js +2 -2
- package/dist/react-handsontable.min.js.map +1 -1
- package/es/react-handsontable.mjs +86 -40
- package/helpers.d.ts +3 -1
- package/hotTableClass.d.ts +17 -3
- package/index.d.ts +1 -0
- package/package.json +3 -3
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var ReactDOM = require('react-dom');
|
|
7
7
|
var Handsontable = require('handsontable/base');
|
|
8
|
+
var registry$1 = require('handsontable/renderers/registry');
|
|
9
|
+
var registry = require('handsontable/editors/registry');
|
|
8
10
|
|
|
9
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
12
|
|
|
@@ -310,23 +312,27 @@ function getExtendedEditorElement(children, editorCache) {
|
|
|
310
312
|
* @param {React.ReactElement} rElement React element to be used as a base for the component.
|
|
311
313
|
* @param {Object} props Props to be passed to the cloned element.
|
|
312
314
|
* @param {Document} [ownerDocument] The owner document to set the portal up into.
|
|
315
|
+
* @param {String} portalKey The key to be used for the portal.
|
|
316
|
+
* @param {HTMLElement} [cachedContainer] The cached container to be used for the portal.
|
|
313
317
|
* @returns {{portal: React.ReactPortal, portalContainer: HTMLElement}} An object containing the portal and its container.
|
|
314
318
|
*/
|
|
315
319
|
function createPortal(rElement, props) {
|
|
316
320
|
var ownerDocument = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;
|
|
321
|
+
var portalKey = arguments.length > 3 ? arguments[3] : undefined;
|
|
322
|
+
var cachedContainer = arguments.length > 4 ? arguments[4] : undefined;
|
|
317
323
|
if (!ownerDocument) {
|
|
318
324
|
ownerDocument = document;
|
|
319
325
|
}
|
|
320
326
|
if (!bulkComponentContainer) {
|
|
321
327
|
bulkComponentContainer = ownerDocument.createDocumentFragment();
|
|
322
328
|
}
|
|
323
|
-
var portalContainer = ownerDocument.createElement('DIV');
|
|
329
|
+
var portalContainer = cachedContainer !== null && cachedContainer !== void 0 ? cachedContainer : ownerDocument.createElement('DIV');
|
|
324
330
|
bulkComponentContainer.appendChild(portalContainer);
|
|
325
331
|
var extendedRendererElement = React__default["default"].cloneElement(rElement, _objectSpread2({
|
|
326
332
|
key: "".concat(props.row, "-").concat(props.col)
|
|
327
333
|
}, props));
|
|
328
334
|
return {
|
|
329
|
-
portal: ReactDOM__default["default"].createPortal(extendedRendererElement, portalContainer,
|
|
335
|
+
portal: ReactDOM__default["default"].createPortal(extendedRendererElement, portalContainer, portalKey),
|
|
330
336
|
portalContainer: portalContainer
|
|
331
337
|
};
|
|
332
338
|
}
|
|
@@ -511,7 +517,7 @@ var RenderersPortalManager = /*#__PURE__*/function (_React$Component) {
|
|
|
511
517
|
return RenderersPortalManager;
|
|
512
518
|
}(React__default["default"].Component);
|
|
513
519
|
|
|
514
|
-
var version="14.
|
|
520
|
+
var version="14.2.0-next-7ae341f-20240229";
|
|
515
521
|
|
|
516
522
|
function createCommonjsModule(fn, module) {
|
|
517
523
|
return module = { exports: {} }, fn(module, module.exports), module.exports;
|
|
@@ -1692,9 +1698,17 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1692
1698
|
*/
|
|
1693
1699
|
_this.renderersPortalManager = null;
|
|
1694
1700
|
/**
|
|
1695
|
-
*
|
|
1701
|
+
* Map that stores React portals.
|
|
1702
|
+
* @type {Map<string, React.ReactPortal>}
|
|
1696
1703
|
*/
|
|
1697
|
-
_this.
|
|
1704
|
+
_this.portalCache = new Map();
|
|
1705
|
+
/**
|
|
1706
|
+
* Portal Container Cache
|
|
1707
|
+
*
|
|
1708
|
+
* @private
|
|
1709
|
+
* @type {Map}
|
|
1710
|
+
*/
|
|
1711
|
+
_this.portalContainerCache = new Map();
|
|
1698
1712
|
/**
|
|
1699
1713
|
* The rendered cells cache.
|
|
1700
1714
|
*
|
|
@@ -1746,6 +1760,16 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1746
1760
|
set: function set(hotInstance) {
|
|
1747
1761
|
this.__hotInstance = hotInstance;
|
|
1748
1762
|
}
|
|
1763
|
+
/**
|
|
1764
|
+
* Get Portal Container Cache
|
|
1765
|
+
*
|
|
1766
|
+
* @returns {Map}
|
|
1767
|
+
*/
|
|
1768
|
+
}, {
|
|
1769
|
+
key: "getPortalContainerCache",
|
|
1770
|
+
value: function getPortalContainerCache() {
|
|
1771
|
+
return this.portalContainerCache;
|
|
1772
|
+
}
|
|
1749
1773
|
/**
|
|
1750
1774
|
* Get the rendered table cell cache.
|
|
1751
1775
|
*
|
|
@@ -1808,30 +1832,44 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1808
1832
|
key: "getRendererWrapper",
|
|
1809
1833
|
value: function getRendererWrapper(rendererElement) {
|
|
1810
1834
|
var hotTableComponent = this;
|
|
1811
|
-
return function (instance, TD, row, col, prop, value, cellProperties) {
|
|
1835
|
+
return function __internalRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
|
1812
1836
|
var renderedCellCache = hotTableComponent.getRenderedCellCache();
|
|
1813
|
-
|
|
1814
|
-
|
|
1837
|
+
var portalContainerCache = hotTableComponent.getPortalContainerCache();
|
|
1838
|
+
var key = "".concat(row, "-").concat(col);
|
|
1839
|
+
// Handsontable.Core type is missing guid
|
|
1840
|
+
var instanceGuid = instance.guid;
|
|
1841
|
+
var portalContainerKey = "".concat(instanceGuid, "-").concat(key);
|
|
1842
|
+
var portalKey = "".concat(key, "-").concat(instanceGuid);
|
|
1843
|
+
if (renderedCellCache.has(key)) {
|
|
1844
|
+
TD.innerHTML = renderedCellCache.get(key).innerHTML;
|
|
1815
1845
|
}
|
|
1816
1846
|
if (TD && !TD.getAttribute('ghost-table')) {
|
|
1817
|
-
var
|
|
1818
|
-
|
|
1819
|
-
row: row,
|
|
1820
|
-
col: col,
|
|
1821
|
-
prop: prop,
|
|
1822
|
-
value: value,
|
|
1823
|
-
cellProperties: cellProperties,
|
|
1824
|
-
isRenderer: true
|
|
1825
|
-
}, TD.ownerDocument),
|
|
1826
|
-
portal = _createPortal.portal,
|
|
1827
|
-
portalContainer = _createPortal.portalContainer;
|
|
1847
|
+
var cachedPortal = hotTableComponent.portalCache.get(portalKey);
|
|
1848
|
+
var cachedPortalContainer = portalContainerCache.get(portalContainerKey);
|
|
1828
1849
|
while (TD.firstChild) {
|
|
1829
1850
|
TD.removeChild(TD.firstChild);
|
|
1830
1851
|
}
|
|
1831
|
-
|
|
1832
|
-
|
|
1852
|
+
// if portal already exists, do not recreate
|
|
1853
|
+
if (cachedPortal && cachedPortalContainer) {
|
|
1854
|
+
TD.appendChild(cachedPortalContainer);
|
|
1855
|
+
} else {
|
|
1856
|
+
var _createPortal = createPortal(rendererElement, {
|
|
1857
|
+
TD: TD,
|
|
1858
|
+
row: row,
|
|
1859
|
+
col: col,
|
|
1860
|
+
prop: prop,
|
|
1861
|
+
value: value,
|
|
1862
|
+
cellProperties: cellProperties,
|
|
1863
|
+
isRenderer: true
|
|
1864
|
+
}, TD.ownerDocument, portalKey, cachedPortalContainer),
|
|
1865
|
+
portal = _createPortal.portal,
|
|
1866
|
+
portalContainer = _createPortal.portalContainer;
|
|
1867
|
+
portalContainerCache.set(portalContainerKey, portalContainer);
|
|
1868
|
+
TD.appendChild(portalContainer);
|
|
1869
|
+
hotTableComponent.portalCache.set(portalKey, portal);
|
|
1870
|
+
}
|
|
1833
1871
|
}
|
|
1834
|
-
renderedCellCache.set(
|
|
1872
|
+
renderedCellCache.set(key, TD);
|
|
1835
1873
|
return TD;
|
|
1836
1874
|
};
|
|
1837
1875
|
}
|
|
@@ -1940,13 +1978,23 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1940
1978
|
if (globalEditorNode) {
|
|
1941
1979
|
newSettings.editor = this.getEditorClass(globalEditorNode, GLOBAL_EDITOR_SCOPE);
|
|
1942
1980
|
} else {
|
|
1943
|
-
|
|
1981
|
+
var _this$props$settings;
|
|
1982
|
+
if (this.props.editor || (_this$props$settings = this.props.settings) !== null && _this$props$settings !== void 0 && _this$props$settings.editor) {
|
|
1983
|
+
newSettings.editor = this.props.editor || this.props.settings.editor;
|
|
1984
|
+
} else {
|
|
1985
|
+
newSettings.editor = registry.getEditor('text');
|
|
1986
|
+
}
|
|
1944
1987
|
}
|
|
1945
1988
|
if (globalRendererNode) {
|
|
1946
1989
|
newSettings.renderer = this.getRendererWrapper(globalRendererNode);
|
|
1947
1990
|
this.componentRendererColumns.set('global', true);
|
|
1948
1991
|
} else {
|
|
1949
|
-
|
|
1992
|
+
var _this$props$settings2;
|
|
1993
|
+
if (this.props.renderer || (_this$props$settings2 = this.props.settings) !== null && _this$props$settings2 !== void 0 && _this$props$settings2.renderer) {
|
|
1994
|
+
newSettings.renderer = this.props.renderer || this.props.settings.renderer;
|
|
1995
|
+
} else {
|
|
1996
|
+
newSettings.renderer = registry$1.getRenderer('text');
|
|
1997
|
+
}
|
|
1950
1998
|
}
|
|
1951
1999
|
return newSettings;
|
|
1952
2000
|
}
|
|
@@ -1982,6 +2030,7 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1982
2030
|
}, {
|
|
1983
2031
|
key: "handsontableBeforeViewRender",
|
|
1984
2032
|
value: function handsontableBeforeViewRender() {
|
|
2033
|
+
this.portalCache.clear();
|
|
1985
2034
|
this.getRenderedCellCache().clear();
|
|
1986
2035
|
}
|
|
1987
2036
|
/**
|
|
@@ -1990,11 +2039,8 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1990
2039
|
}, {
|
|
1991
2040
|
key: "handsontableAfterViewRender",
|
|
1992
2041
|
value: function handsontableAfterViewRender() {
|
|
1993
|
-
var _this3 = this;
|
|
1994
2042
|
this.renderersPortalManager.setState({
|
|
1995
|
-
portals: _toConsumableArray(this.
|
|
1996
|
-
}, function () {
|
|
1997
|
-
_this3.portalCacheArray = [];
|
|
2043
|
+
portals: _toConsumableArray(this.portalCache.values())
|
|
1998
2044
|
});
|
|
1999
2045
|
}
|
|
2000
2046
|
/**
|
|
@@ -2030,14 +2076,14 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
2030
2076
|
}, {
|
|
2031
2077
|
key: "componentDidMount",
|
|
2032
2078
|
value: function componentDidMount() {
|
|
2033
|
-
var
|
|
2079
|
+
var _this3 = this;
|
|
2034
2080
|
var newGlobalSettings = this.createNewGlobalSettings();
|
|
2035
2081
|
this.hotInstance = new Handsontable__default["default"].Core(this.hotElementRef, newGlobalSettings);
|
|
2036
2082
|
this.hotInstance.addHook('beforeViewRender', function () {
|
|
2037
|
-
return
|
|
2083
|
+
return _this3.handsontableBeforeViewRender();
|
|
2038
2084
|
});
|
|
2039
2085
|
this.hotInstance.addHook('afterViewRender', function () {
|
|
2040
|
-
return
|
|
2086
|
+
return _this3.handsontableAfterViewRender();
|
|
2041
2087
|
});
|
|
2042
2088
|
// `init` missing in Handsontable's type definitions.
|
|
2043
2089
|
this.hotInstance.init();
|
|
@@ -2071,7 +2117,7 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
2071
2117
|
}, {
|
|
2072
2118
|
key: "render",
|
|
2073
2119
|
value: function render() {
|
|
2074
|
-
var
|
|
2120
|
+
var _this4 = this;
|
|
2075
2121
|
var isHotColumn = function isHotColumn(childNode) {
|
|
2076
2122
|
return childNode.type === HotColumn;
|
|
2077
2123
|
};
|
|
@@ -2081,14 +2127,14 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
2081
2127
|
return isHotColumn(childNode);
|
|
2082
2128
|
}).map(function (childNode, columnIndex) {
|
|
2083
2129
|
return React__default["default"].cloneElement(childNode, {
|
|
2084
|
-
_componentRendererColumns:
|
|
2085
|
-
_emitColumnSettings:
|
|
2130
|
+
_componentRendererColumns: _this4.componentRendererColumns,
|
|
2131
|
+
_emitColumnSettings: _this4.setHotColumnSettings.bind(_this4),
|
|
2086
2132
|
_columnIndex: columnIndex,
|
|
2087
|
-
_getChildElementByType: getChildElementByType.bind(
|
|
2088
|
-
_getRendererWrapper:
|
|
2089
|
-
_getEditorClass:
|
|
2090
|
-
_getOwnerDocument:
|
|
2091
|
-
_getEditorCache:
|
|
2133
|
+
_getChildElementByType: getChildElementByType.bind(_this4),
|
|
2134
|
+
_getRendererWrapper: _this4.getRendererWrapper.bind(_this4),
|
|
2135
|
+
_getEditorClass: _this4.getEditorClass.bind(_this4),
|
|
2136
|
+
_getOwnerDocument: _this4.getOwnerDocument.bind(_this4),
|
|
2137
|
+
_getEditorCache: _this4.getEditorCache.bind(_this4),
|
|
2092
2138
|
children: childNode.props.children
|
|
2093
2139
|
});
|
|
2094
2140
|
});
|
|
@@ -2403,4 +2449,5 @@ var BaseEditorComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
2403
2449
|
exports.BaseEditorComponent = BaseEditorComponent;
|
|
2404
2450
|
exports.HotColumn = HotColumn;
|
|
2405
2451
|
exports.HotTable = HotTable;
|
|
2452
|
+
exports.HotTableClass = HotTableClass;
|
|
2406
2453
|
exports["default"] = HotTable;
|
|
@@ -25,13 +25,13 @@
|
|
|
25
25
|
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
|
|
26
26
|
* USE OR INABILITY TO USE THIS SOFTWARE.
|
|
27
27
|
*
|
|
28
|
-
* Version: 14.
|
|
28
|
+
* Version: 14.2.0-next-7ae341f-20240229 (built at Thu Feb 29 2024 08:45:57 GMT+0000 (Coordinated Universal Time))
|
|
29
29
|
*/
|
|
30
30
|
(function (global, factory) {
|
|
31
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react-dom'), require('handsontable/base')) :
|
|
32
|
-
typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom', 'handsontable/base'], factory) :
|
|
33
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.Handsontable = global.Handsontable || {}, global.Handsontable.react = {}), global.React, global.ReactDOM, global.Handsontable));
|
|
34
|
-
})(this, (function (exports, React, ReactDOM, Handsontable) { 'use strict';
|
|
31
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react'), require('react-dom'), require('handsontable/base'), require('handsontable/renderers/registry'), require('handsontable/editors/registry')) :
|
|
32
|
+
typeof define === 'function' && define.amd ? define(['exports', 'react', 'react-dom', 'handsontable/base', 'handsontable/renderers/registry', 'handsontable/editors/registry'], factory) :
|
|
33
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.Handsontable = global.Handsontable || {}, global.Handsontable.react = {}), global.React, global.ReactDOM, global.Handsontable, global.Handsontable.renderers, global.Handsontable.editors));
|
|
34
|
+
})(this, (function (exports, React, ReactDOM, Handsontable, registry$1, registry) { 'use strict';
|
|
35
35
|
|
|
36
36
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
37
37
|
|
|
@@ -337,23 +337,27 @@ function getExtendedEditorElement(children, editorCache) {
|
|
|
337
337
|
* @param {React.ReactElement} rElement React element to be used as a base for the component.
|
|
338
338
|
* @param {Object} props Props to be passed to the cloned element.
|
|
339
339
|
* @param {Document} [ownerDocument] The owner document to set the portal up into.
|
|
340
|
+
* @param {String} portalKey The key to be used for the portal.
|
|
341
|
+
* @param {HTMLElement} [cachedContainer] The cached container to be used for the portal.
|
|
340
342
|
* @returns {{portal: React.ReactPortal, portalContainer: HTMLElement}} An object containing the portal and its container.
|
|
341
343
|
*/
|
|
342
344
|
function createPortal(rElement, props) {
|
|
343
345
|
var ownerDocument = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document;
|
|
346
|
+
var portalKey = arguments.length > 3 ? arguments[3] : undefined;
|
|
347
|
+
var cachedContainer = arguments.length > 4 ? arguments[4] : undefined;
|
|
344
348
|
if (!ownerDocument) {
|
|
345
349
|
ownerDocument = document;
|
|
346
350
|
}
|
|
347
351
|
if (!bulkComponentContainer) {
|
|
348
352
|
bulkComponentContainer = ownerDocument.createDocumentFragment();
|
|
349
353
|
}
|
|
350
|
-
var portalContainer = ownerDocument.createElement('DIV');
|
|
354
|
+
var portalContainer = cachedContainer !== null && cachedContainer !== void 0 ? cachedContainer : ownerDocument.createElement('DIV');
|
|
351
355
|
bulkComponentContainer.appendChild(portalContainer);
|
|
352
356
|
var extendedRendererElement = React__default["default"].cloneElement(rElement, _objectSpread2({
|
|
353
357
|
key: "".concat(props.row, "-").concat(props.col)
|
|
354
358
|
}, props));
|
|
355
359
|
return {
|
|
356
|
-
portal: ReactDOM__default["default"].createPortal(extendedRendererElement, portalContainer,
|
|
360
|
+
portal: ReactDOM__default["default"].createPortal(extendedRendererElement, portalContainer, portalKey),
|
|
357
361
|
portalContainer: portalContainer
|
|
358
362
|
};
|
|
359
363
|
}
|
|
@@ -538,7 +542,7 @@ var RenderersPortalManager = /*#__PURE__*/function (_React$Component) {
|
|
|
538
542
|
return RenderersPortalManager;
|
|
539
543
|
}(React__default["default"].Component);
|
|
540
544
|
|
|
541
|
-
var version="14.
|
|
545
|
+
var version="14.2.0-next-7ae341f-20240229";
|
|
542
546
|
|
|
543
547
|
function createCommonjsModule(fn, module) {
|
|
544
548
|
return module = { exports: {} }, fn(module, module.exports), module.exports;
|
|
@@ -941,9 +945,17 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
941
945
|
*/
|
|
942
946
|
_this.renderersPortalManager = null;
|
|
943
947
|
/**
|
|
944
|
-
*
|
|
948
|
+
* Map that stores React portals.
|
|
949
|
+
* @type {Map<string, React.ReactPortal>}
|
|
945
950
|
*/
|
|
946
|
-
_this.
|
|
951
|
+
_this.portalCache = new Map();
|
|
952
|
+
/**
|
|
953
|
+
* Portal Container Cache
|
|
954
|
+
*
|
|
955
|
+
* @private
|
|
956
|
+
* @type {Map}
|
|
957
|
+
*/
|
|
958
|
+
_this.portalContainerCache = new Map();
|
|
947
959
|
/**
|
|
948
960
|
* The rendered cells cache.
|
|
949
961
|
*
|
|
@@ -995,6 +1007,16 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
995
1007
|
set: function set(hotInstance) {
|
|
996
1008
|
this.__hotInstance = hotInstance;
|
|
997
1009
|
}
|
|
1010
|
+
/**
|
|
1011
|
+
* Get Portal Container Cache
|
|
1012
|
+
*
|
|
1013
|
+
* @returns {Map}
|
|
1014
|
+
*/
|
|
1015
|
+
}, {
|
|
1016
|
+
key: "getPortalContainerCache",
|
|
1017
|
+
value: function getPortalContainerCache() {
|
|
1018
|
+
return this.portalContainerCache;
|
|
1019
|
+
}
|
|
998
1020
|
/**
|
|
999
1021
|
* Get the rendered table cell cache.
|
|
1000
1022
|
*
|
|
@@ -1057,30 +1079,44 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1057
1079
|
key: "getRendererWrapper",
|
|
1058
1080
|
value: function getRendererWrapper(rendererElement) {
|
|
1059
1081
|
var hotTableComponent = this;
|
|
1060
|
-
return function (instance, TD, row, col, prop, value, cellProperties) {
|
|
1082
|
+
return function __internalRenderer(instance, TD, row, col, prop, value, cellProperties) {
|
|
1061
1083
|
var renderedCellCache = hotTableComponent.getRenderedCellCache();
|
|
1062
|
-
|
|
1063
|
-
|
|
1084
|
+
var portalContainerCache = hotTableComponent.getPortalContainerCache();
|
|
1085
|
+
var key = "".concat(row, "-").concat(col);
|
|
1086
|
+
// Handsontable.Core type is missing guid
|
|
1087
|
+
var instanceGuid = instance.guid;
|
|
1088
|
+
var portalContainerKey = "".concat(instanceGuid, "-").concat(key);
|
|
1089
|
+
var portalKey = "".concat(key, "-").concat(instanceGuid);
|
|
1090
|
+
if (renderedCellCache.has(key)) {
|
|
1091
|
+
TD.innerHTML = renderedCellCache.get(key).innerHTML;
|
|
1064
1092
|
}
|
|
1065
1093
|
if (TD && !TD.getAttribute('ghost-table')) {
|
|
1066
|
-
var
|
|
1067
|
-
|
|
1068
|
-
row: row,
|
|
1069
|
-
col: col,
|
|
1070
|
-
prop: prop,
|
|
1071
|
-
value: value,
|
|
1072
|
-
cellProperties: cellProperties,
|
|
1073
|
-
isRenderer: true
|
|
1074
|
-
}, TD.ownerDocument),
|
|
1075
|
-
portal = _createPortal.portal,
|
|
1076
|
-
portalContainer = _createPortal.portalContainer;
|
|
1094
|
+
var cachedPortal = hotTableComponent.portalCache.get(portalKey);
|
|
1095
|
+
var cachedPortalContainer = portalContainerCache.get(portalContainerKey);
|
|
1077
1096
|
while (TD.firstChild) {
|
|
1078
1097
|
TD.removeChild(TD.firstChild);
|
|
1079
1098
|
}
|
|
1080
|
-
|
|
1081
|
-
|
|
1099
|
+
// if portal already exists, do not recreate
|
|
1100
|
+
if (cachedPortal && cachedPortalContainer) {
|
|
1101
|
+
TD.appendChild(cachedPortalContainer);
|
|
1102
|
+
} else {
|
|
1103
|
+
var _createPortal = createPortal(rendererElement, {
|
|
1104
|
+
TD: TD,
|
|
1105
|
+
row: row,
|
|
1106
|
+
col: col,
|
|
1107
|
+
prop: prop,
|
|
1108
|
+
value: value,
|
|
1109
|
+
cellProperties: cellProperties,
|
|
1110
|
+
isRenderer: true
|
|
1111
|
+
}, TD.ownerDocument, portalKey, cachedPortalContainer),
|
|
1112
|
+
portal = _createPortal.portal,
|
|
1113
|
+
portalContainer = _createPortal.portalContainer;
|
|
1114
|
+
portalContainerCache.set(portalContainerKey, portalContainer);
|
|
1115
|
+
TD.appendChild(portalContainer);
|
|
1116
|
+
hotTableComponent.portalCache.set(portalKey, portal);
|
|
1117
|
+
}
|
|
1082
1118
|
}
|
|
1083
|
-
renderedCellCache.set(
|
|
1119
|
+
renderedCellCache.set(key, TD);
|
|
1084
1120
|
return TD;
|
|
1085
1121
|
};
|
|
1086
1122
|
}
|
|
@@ -1189,13 +1225,23 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1189
1225
|
if (globalEditorNode) {
|
|
1190
1226
|
newSettings.editor = this.getEditorClass(globalEditorNode, GLOBAL_EDITOR_SCOPE);
|
|
1191
1227
|
} else {
|
|
1192
|
-
|
|
1228
|
+
var _this$props$settings;
|
|
1229
|
+
if (this.props.editor || (_this$props$settings = this.props.settings) !== null && _this$props$settings !== void 0 && _this$props$settings.editor) {
|
|
1230
|
+
newSettings.editor = this.props.editor || this.props.settings.editor;
|
|
1231
|
+
} else {
|
|
1232
|
+
newSettings.editor = registry.getEditor('text');
|
|
1233
|
+
}
|
|
1193
1234
|
}
|
|
1194
1235
|
if (globalRendererNode) {
|
|
1195
1236
|
newSettings.renderer = this.getRendererWrapper(globalRendererNode);
|
|
1196
1237
|
this.componentRendererColumns.set('global', true);
|
|
1197
1238
|
} else {
|
|
1198
|
-
|
|
1239
|
+
var _this$props$settings2;
|
|
1240
|
+
if (this.props.renderer || (_this$props$settings2 = this.props.settings) !== null && _this$props$settings2 !== void 0 && _this$props$settings2.renderer) {
|
|
1241
|
+
newSettings.renderer = this.props.renderer || this.props.settings.renderer;
|
|
1242
|
+
} else {
|
|
1243
|
+
newSettings.renderer = registry$1.getRenderer('text');
|
|
1244
|
+
}
|
|
1199
1245
|
}
|
|
1200
1246
|
return newSettings;
|
|
1201
1247
|
}
|
|
@@ -1231,6 +1277,7 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1231
1277
|
}, {
|
|
1232
1278
|
key: "handsontableBeforeViewRender",
|
|
1233
1279
|
value: function handsontableBeforeViewRender() {
|
|
1280
|
+
this.portalCache.clear();
|
|
1234
1281
|
this.getRenderedCellCache().clear();
|
|
1235
1282
|
}
|
|
1236
1283
|
/**
|
|
@@ -1239,11 +1286,8 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1239
1286
|
}, {
|
|
1240
1287
|
key: "handsontableAfterViewRender",
|
|
1241
1288
|
value: function handsontableAfterViewRender() {
|
|
1242
|
-
var _this3 = this;
|
|
1243
1289
|
this.renderersPortalManager.setState({
|
|
1244
|
-
portals: _toConsumableArray(this.
|
|
1245
|
-
}, function () {
|
|
1246
|
-
_this3.portalCacheArray = [];
|
|
1290
|
+
portals: _toConsumableArray(this.portalCache.values())
|
|
1247
1291
|
});
|
|
1248
1292
|
}
|
|
1249
1293
|
/**
|
|
@@ -1279,14 +1323,14 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1279
1323
|
}, {
|
|
1280
1324
|
key: "componentDidMount",
|
|
1281
1325
|
value: function componentDidMount() {
|
|
1282
|
-
var
|
|
1326
|
+
var _this3 = this;
|
|
1283
1327
|
var newGlobalSettings = this.createNewGlobalSettings();
|
|
1284
1328
|
this.hotInstance = new Handsontable__default["default"].Core(this.hotElementRef, newGlobalSettings);
|
|
1285
1329
|
this.hotInstance.addHook('beforeViewRender', function () {
|
|
1286
|
-
return
|
|
1330
|
+
return _this3.handsontableBeforeViewRender();
|
|
1287
1331
|
});
|
|
1288
1332
|
this.hotInstance.addHook('afterViewRender', function () {
|
|
1289
|
-
return
|
|
1333
|
+
return _this3.handsontableAfterViewRender();
|
|
1290
1334
|
});
|
|
1291
1335
|
// `init` missing in Handsontable's type definitions.
|
|
1292
1336
|
this.hotInstance.init();
|
|
@@ -1320,7 +1364,7 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1320
1364
|
}, {
|
|
1321
1365
|
key: "render",
|
|
1322
1366
|
value: function render() {
|
|
1323
|
-
var
|
|
1367
|
+
var _this4 = this;
|
|
1324
1368
|
var isHotColumn = function isHotColumn(childNode) {
|
|
1325
1369
|
return childNode.type === HotColumn;
|
|
1326
1370
|
};
|
|
@@ -1330,14 +1374,14 @@ var HotTableClass = /*#__PURE__*/function (_React$Component) {
|
|
|
1330
1374
|
return isHotColumn(childNode);
|
|
1331
1375
|
}).map(function (childNode, columnIndex) {
|
|
1332
1376
|
return React__default["default"].cloneElement(childNode, {
|
|
1333
|
-
_componentRendererColumns:
|
|
1334
|
-
_emitColumnSettings:
|
|
1377
|
+
_componentRendererColumns: _this4.componentRendererColumns,
|
|
1378
|
+
_emitColumnSettings: _this4.setHotColumnSettings.bind(_this4),
|
|
1335
1379
|
_columnIndex: columnIndex,
|
|
1336
|
-
_getChildElementByType: getChildElementByType.bind(
|
|
1337
|
-
_getRendererWrapper:
|
|
1338
|
-
_getEditorClass:
|
|
1339
|
-
_getOwnerDocument:
|
|
1340
|
-
_getEditorCache:
|
|
1380
|
+
_getChildElementByType: getChildElementByType.bind(_this4),
|
|
1381
|
+
_getRendererWrapper: _this4.getRendererWrapper.bind(_this4),
|
|
1382
|
+
_getEditorClass: _this4.getEditorClass.bind(_this4),
|
|
1383
|
+
_getOwnerDocument: _this4.getOwnerDocument.bind(_this4),
|
|
1384
|
+
_getEditorCache: _this4.getEditorCache.bind(_this4),
|
|
1341
1385
|
children: childNode.props.children
|
|
1342
1386
|
});
|
|
1343
1387
|
});
|
|
@@ -1652,6 +1696,7 @@ var BaseEditorComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
1652
1696
|
exports.BaseEditorComponent = BaseEditorComponent;
|
|
1653
1697
|
exports.HotColumn = HotColumn;
|
|
1654
1698
|
exports.HotTable = HotTable;
|
|
1699
|
+
exports.HotTableClass = HotTableClass;
|
|
1655
1700
|
exports["default"] = HotTable;
|
|
1656
1701
|
|
|
1657
1702
|
Object.defineProperty(exports, '__esModule', { value: true });
|