@handsontable/react-wrapper 17.1.0-rc9 → 18.0.0-rc1
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/README.md +0 -3
- package/commonjs/react-handsontable.js +87 -58
- package/dist/react-handsontable.js +88 -59
- 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 +88 -59
- package/hotTableContext.d.ts +7 -0
- package/hotTableInner.d.ts +1 -1
- package/package.json +5 -3
- package/types.d.ts +9 -4
package/README.md
CHANGED
|
@@ -56,9 +56,6 @@
|
|
|
56
56
|
✅ [Hiding columns](https://handsontable.com/docs/react-data-grid/column-hiding/) <br>
|
|
57
57
|
✅ [Right-click context menu](https://handsontable.com/docs/react-data-grid/context-menu/) <br>
|
|
58
58
|
✅ [Row pagination](https://handsontable.com/docs/react-data-grid/rows-pagination/) <br>
|
|
59
|
-
✅ [Server-side data](https://handsontable.com/docs/react-data-grid/server-side-data/) <br>
|
|
60
|
-
✅ [Notifications](https://handsontable.com/docs/react-data-grid/notification/) <br>
|
|
61
|
-
✅ [Export to Excel](https://handsontable.com/docs/react-data-grid/export-to-excel/) <br>
|
|
62
59
|
|
|
63
60
|
<div id="installation">
|
|
64
61
|
|
|
@@ -186,7 +186,7 @@ function _toPrimitive(t, r) {
|
|
|
186
186
|
if ("object" != typeof i) return i;
|
|
187
187
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
188
188
|
}
|
|
189
|
-
return (String )(t);
|
|
189
|
+
return ("string" === r ? String : Number)(t);
|
|
190
190
|
}
|
|
191
191
|
function _toPropertyKey(t) {
|
|
192
192
|
var i = _toPrimitive(t, "string");
|
|
@@ -355,11 +355,18 @@ function createPortal(rElement) {
|
|
|
355
355
|
if (!ownerDocument) {
|
|
356
356
|
ownerDocument = document;
|
|
357
357
|
}
|
|
358
|
-
|
|
359
|
-
|
|
358
|
+
var portalContainer = cachedContainer;
|
|
359
|
+
|
|
360
|
+
// A new container needs an anchor before React mounts into it. A cached
|
|
361
|
+
// container is already attached (typically inside its TD) and must be
|
|
362
|
+
// left in place to avoid wiping the DOM on every grid render.
|
|
363
|
+
if (!portalContainer) {
|
|
364
|
+
if (!bulkComponentContainer) {
|
|
365
|
+
bulkComponentContainer = ownerDocument.createDocumentFragment();
|
|
366
|
+
}
|
|
367
|
+
portalContainer = ownerDocument.createElement('DIV');
|
|
368
|
+
bulkComponentContainer.appendChild(portalContainer);
|
|
360
369
|
}
|
|
361
|
-
var portalContainer = cachedContainer !== null && cachedContainer !== void 0 ? cachedContainer : ownerDocument.createElement('DIV');
|
|
362
|
-
bulkComponentContainer.appendChild(portalContainer);
|
|
363
370
|
return {
|
|
364
371
|
portal: /*#__PURE__*/ReactDOM__default["default"].createPortal(rElement, portalContainer, portalKey),
|
|
365
372
|
portalContainer: portalContainer
|
|
@@ -535,6 +542,9 @@ var HotTableContextProvider = function HotTableContextProvider(_ref) {
|
|
|
535
542
|
var setHotColumnSettings = React.useCallback(function (columnSettings, columnIndex) {
|
|
536
543
|
columnsSettings.current[columnIndex] = columnSettings;
|
|
537
544
|
}, []);
|
|
545
|
+
var trimColumnSettings = React.useCallback(function (length) {
|
|
546
|
+
columnsSettings.current.length = length;
|
|
547
|
+
}, []);
|
|
538
548
|
var componentRendererColumns = React.useRef(new Map());
|
|
539
549
|
var renderedCellCache = React.useRef(new Map());
|
|
540
550
|
var clearRenderedCellCache = React.useCallback(function () {
|
|
@@ -553,38 +563,36 @@ var HotTableContextProvider = function HotTableContextProvider(_ref) {
|
|
|
553
563
|
var instanceGuid = instance.guid;
|
|
554
564
|
var portalContainerKey = "".concat(instanceGuid, "-").concat(key);
|
|
555
565
|
var portalKey = "".concat(key, "-").concat(instanceGuid);
|
|
556
|
-
if (renderedCellCache.current.has(key)) {
|
|
557
|
-
TD.innerHTML = renderedCellCache.current.get(key).innerHTML;
|
|
558
|
-
}
|
|
559
566
|
if (TD && !TD.getAttribute('ghost-table')) {
|
|
560
|
-
var cachedPortal = portalCache.current.get(portalKey);
|
|
561
567
|
var cachedPortalContainer = portalContainerCache.current.get(portalContainerKey);
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
//
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
568
|
+
// When the cached portal container is still attached to the same
|
|
569
|
+
// TD as the previous render, the DOM is already correct and must
|
|
570
|
+
// not be wiped. Wiping detaches the React-managed children, which
|
|
571
|
+
// forces a full remount of the renderer component on every grid
|
|
572
|
+
// render (see issue #10800).
|
|
573
|
+
var containerInPlace = !!cachedPortalContainer && cachedPortalContainer.parentNode === TD;
|
|
574
|
+
var rendererElement = /*#__PURE__*/React__default["default"].createElement(Renderer, {
|
|
575
|
+
instance: instance,
|
|
576
|
+
TD: TD,
|
|
577
|
+
row: row,
|
|
578
|
+
col: col,
|
|
579
|
+
prop: prop,
|
|
580
|
+
value: value,
|
|
581
|
+
cellProperties: cellProperties
|
|
582
|
+
});
|
|
583
|
+
var _createPortal = createPortal(rendererElement, TD.ownerDocument, portalKey, cachedPortalContainer),
|
|
584
|
+
portal = _createPortal.portal,
|
|
585
|
+
portalContainer = _createPortal.portalContainer;
|
|
586
|
+
if (!containerInPlace) {
|
|
587
|
+
while (TD.firstChild) {
|
|
588
|
+
TD.removeChild(TD.firstChild);
|
|
589
|
+
}
|
|
583
590
|
TD.appendChild(portalContainer);
|
|
584
|
-
portalCache.current.set(portalKey, portal);
|
|
585
591
|
}
|
|
592
|
+
portalContainerCache.current.set(portalContainerKey, portalContainer);
|
|
593
|
+
portalCache.current.set(portalKey, portal);
|
|
586
594
|
}
|
|
587
|
-
renderedCellCache.current.set(
|
|
595
|
+
renderedCellCache.current.set(key, TD);
|
|
588
596
|
return TD;
|
|
589
597
|
};
|
|
590
598
|
}, []);
|
|
@@ -602,13 +610,14 @@ var HotTableContextProvider = function HotTableContextProvider(_ref) {
|
|
|
602
610
|
componentRendererColumns: componentRendererColumns.current,
|
|
603
611
|
columnsSettings: columnsSettings.current,
|
|
604
612
|
emitColumnSettings: setHotColumnSettings,
|
|
613
|
+
trimColumnSettings: trimColumnSettings,
|
|
605
614
|
getRendererWrapper: getRendererWrapper,
|
|
606
615
|
clearPortalCache: clearPortalCache,
|
|
607
616
|
clearRenderedCellCache: clearRenderedCellCache,
|
|
608
617
|
setRenderersPortalManagerRef: setRenderersPortalManagerRef,
|
|
609
618
|
pushCellPortalsIntoPortalManager: pushCellPortalsIntoPortalManager
|
|
610
619
|
};
|
|
611
|
-
}, [setHotColumnSettings, getRendererWrapper, clearRenderedCellCache, setRenderersPortalManagerRef, pushCellPortalsIntoPortalManager]);
|
|
620
|
+
}, [setHotColumnSettings, trimColumnSettings, getRendererWrapper, clearRenderedCellCache, setRenderersPortalManagerRef, pushCellPortalsIntoPortalManager]);
|
|
612
621
|
return /*#__PURE__*/React__default["default"].createElement(HotTableContext.Provider, {
|
|
613
622
|
value: contextImpl
|
|
614
623
|
}, children);
|
|
@@ -677,11 +686,12 @@ function makeEditorClass(hooksRef, instanceRef) {
|
|
|
677
686
|
args[_key] = arguments[_key];
|
|
678
687
|
}
|
|
679
688
|
if (!AbstractMethods.includes(propName)) {
|
|
680
|
-
|
|
689
|
+
var _ref;
|
|
690
|
+
result = (_ref = baseMethod).call.apply(_ref, [this].concat(args)); // call super
|
|
681
691
|
}
|
|
682
692
|
if (MethodsMap[propName] && (_hooksRef$current = hooksRef.current) !== null && _hooksRef$current !== void 0 && _hooksRef$current[MethodsMap[propName]]) {
|
|
683
|
-
var
|
|
684
|
-
result = (
|
|
693
|
+
var _ref2;
|
|
694
|
+
result = (_ref2 = hooksRef.current[MethodsMap[propName]]).call.apply(_ref2, [this].concat(args));
|
|
685
695
|
}
|
|
686
696
|
return result;
|
|
687
697
|
}.bind(_this);
|
|
@@ -722,10 +732,10 @@ var EditorContext = /*#__PURE__*/React.createContext(undefined);
|
|
|
722
732
|
* @param {Ref} hooksRef Reference for component-based editor overridden hooks object.
|
|
723
733
|
* @param {RefObject} hotCustomEditorInstanceRef Reference to Handsontable-native editor instance.
|
|
724
734
|
*/
|
|
725
|
-
var EditorContextProvider = function EditorContextProvider(
|
|
726
|
-
var hooksRef =
|
|
727
|
-
hotCustomEditorInstanceRef =
|
|
728
|
-
children =
|
|
735
|
+
var EditorContextProvider = function EditorContextProvider(_ref3) {
|
|
736
|
+
var hooksRef = _ref3.hooksRef,
|
|
737
|
+
hotCustomEditorInstanceRef = _ref3.hotCustomEditorInstanceRef,
|
|
738
|
+
children = _ref3.children;
|
|
729
739
|
return /*#__PURE__*/React__default["default"].createElement(EditorContext.Provider, {
|
|
730
740
|
value: {
|
|
731
741
|
hooksRef: hooksRef,
|
|
@@ -794,9 +804,9 @@ function applyEditorPosition(el, editor, hot, td) {
|
|
|
794
804
|
* @returns {UseHotEditorImpl} Editor API methods
|
|
795
805
|
*/
|
|
796
806
|
function useHotEditor(overriddenHooks, deps) {
|
|
797
|
-
var
|
|
798
|
-
hooksRef =
|
|
799
|
-
hotCustomEditorInstanceRef =
|
|
807
|
+
var _ref4 = React.useContext(EditorContext),
|
|
808
|
+
hooksRef = _ref4.hooksRef,
|
|
809
|
+
hotCustomEditorInstanceRef = _ref4.hotCustomEditorInstanceRef;
|
|
800
810
|
var _useState = React.useState(0),
|
|
801
811
|
_useState2 = _slicedToArray(_useState, 2),
|
|
802
812
|
rerenderTrigger = _useState2[0],
|
|
@@ -840,11 +850,13 @@ function useHotEditor(overriddenHooks, deps) {
|
|
|
840
850
|
},
|
|
841
851
|
get row() {
|
|
842
852
|
var _hotCustomEditorInsta6;
|
|
843
|
-
|
|
853
|
+
var row = (_hotCustomEditorInsta6 = hotCustomEditorInstanceRef.current) === null || _hotCustomEditorInsta6 === void 0 ? void 0 : _hotCustomEditorInsta6.row;
|
|
854
|
+
return row !== null && row !== void 0 ? row : undefined;
|
|
844
855
|
},
|
|
845
856
|
get col() {
|
|
846
857
|
var _hotCustomEditorInsta7;
|
|
847
|
-
|
|
858
|
+
var col = (_hotCustomEditorInsta7 = hotCustomEditorInstanceRef.current) === null || _hotCustomEditorInsta7 === void 0 ? void 0 : _hotCustomEditorInsta7.col;
|
|
859
|
+
return col !== null && col !== void 0 ? col : undefined;
|
|
848
860
|
}
|
|
849
861
|
};
|
|
850
862
|
}, [rerenderTrigger, hotCustomEditorInstanceRef, deferredValue]);
|
|
@@ -854,23 +866,23 @@ function useHotEditor(overriddenHooks, deps) {
|
|
|
854
866
|
|
|
855
867
|
// EditorComponent props - children typed to work with JSX syntax
|
|
856
868
|
|
|
857
|
-
function EditorComponent(
|
|
858
|
-
var _onPrepare =
|
|
859
|
-
_onClose =
|
|
860
|
-
_onOpen =
|
|
861
|
-
_onFocus =
|
|
862
|
-
children =
|
|
863
|
-
|
|
864
|
-
shortcutsGroup =
|
|
865
|
-
shortcuts =
|
|
869
|
+
function EditorComponent(_ref5) {
|
|
870
|
+
var _onPrepare = _ref5.onPrepare,
|
|
871
|
+
_onClose = _ref5.onClose,
|
|
872
|
+
_onOpen = _ref5.onOpen,
|
|
873
|
+
_onFocus = _ref5.onFocus,
|
|
874
|
+
children = _ref5.children,
|
|
875
|
+
_ref5$shortcutsGroup = _ref5.shortcutsGroup,
|
|
876
|
+
shortcutsGroup = _ref5$shortcutsGroup === void 0 ? "custom-editor" : _ref5$shortcutsGroup,
|
|
877
|
+
shortcuts = _ref5.shortcuts;
|
|
866
878
|
var mainElementRef = React.useRef(null);
|
|
867
879
|
var currentValue = React.useRef(undefined);
|
|
868
880
|
var _useState5 = React.useState(),
|
|
869
881
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
870
882
|
themeClassName = _useState6[0],
|
|
871
883
|
setThemeClassName = _useState6[1];
|
|
872
|
-
var
|
|
873
|
-
hotCustomEditorInstanceRef =
|
|
884
|
+
var _ref6 = React.useContext(EditorContext),
|
|
885
|
+
hotCustomEditorInstanceRef = _ref6.hotCustomEditorInstanceRef;
|
|
874
886
|
var registerShortcuts = React.useCallback(function () {
|
|
875
887
|
var _hotCustomEditorInsta8, _hotCustomEditorInsta9, _hotCustomEditorInsta0;
|
|
876
888
|
if (!((_hotCustomEditorInsta8 = hotCustomEditorInstanceRef.current) !== null && _hotCustomEditorInsta8 !== void 0 && _hotCustomEditorInsta8.hot)) return;
|
|
@@ -1074,7 +1086,7 @@ var HotColumn = function HotColumn(props) {
|
|
|
1074
1086
|
}, editorPortal);
|
|
1075
1087
|
};
|
|
1076
1088
|
|
|
1077
|
-
var version="
|
|
1089
|
+
var version="18.0.0-rc1";
|
|
1078
1090
|
|
|
1079
1091
|
/**
|
|
1080
1092
|
* Component used to manage the renderer component portals.
|
|
@@ -2330,6 +2342,12 @@ var HotTableInner = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
2330
2342
|
* Initialize Handsontable after the component has mounted.
|
|
2331
2343
|
*/
|
|
2332
2344
|
React.useEffect(function () {
|
|
2345
|
+
// React guarantees child effects run before parent effects on each
|
|
2346
|
+
// commit, so by the time this parent useEffect runs, every HotColumn
|
|
2347
|
+
// has already written its slot. Trim to drop any leftover slots from
|
|
2348
|
+
// a previous mount (e.g. StrictMode's double-invoke or HMR).
|
|
2349
|
+
var hotColumnCount = React.Children.toArray(props.children).filter(isHotColumn).length;
|
|
2350
|
+
context.trimColumnSettings(hotColumnCount);
|
|
2333
2351
|
var newGlobalSettings = createNewGlobalSettings(true);
|
|
2334
2352
|
|
|
2335
2353
|
// Update prevProps with the current props
|
|
@@ -2372,6 +2390,13 @@ var HotTableInner = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
2372
2390
|
useUpdateEffect(function () {
|
|
2373
2391
|
clearCache();
|
|
2374
2392
|
var hotInstance = getHotInstance();
|
|
2393
|
+
|
|
2394
|
+
// React guarantees child effects run before parent effects on each
|
|
2395
|
+
// commit, so by the time this parent useUpdateEffect runs, every
|
|
2396
|
+
// surviving HotColumn has already written its slot. Trim to drop
|
|
2397
|
+
// stale entries left behind by HotColumns that unmounted.
|
|
2398
|
+
var hotColumnCount = React.Children.toArray(props.children).filter(isHotColumn).length;
|
|
2399
|
+
context.trimColumnSettings(hotColumnCount);
|
|
2375
2400
|
var newGlobalSettings = createNewGlobalSettings(false, prevProps.current);
|
|
2376
2401
|
|
|
2377
2402
|
// Update prevProps with the current props
|
|
@@ -2409,7 +2434,11 @@ var HotTableInner = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
2409
2434
|
var editorPortal = createEditorPortal(getOwnerDocument(), props.editor);
|
|
2410
2435
|
return /*#__PURE__*/React__default["default"].createElement(React.Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", _extends({
|
|
2411
2436
|
ref: hotElementRef
|
|
2412
|
-
}, containerProps
|
|
2437
|
+
}, containerProps, {
|
|
2438
|
+
style: _objectSpread2({
|
|
2439
|
+
height: '100%'
|
|
2440
|
+
}, containerProps.style)
|
|
2441
|
+
}), hotColumnWrapped), /*#__PURE__*/React__default["default"].createElement(RenderersPortalManager, {
|
|
2413
2442
|
ref: context.setRenderersPortalManagerRef
|
|
2414
2443
|
}), /*#__PURE__*/React__default["default"].createElement(EditorContextProvider, {
|
|
2415
2444
|
hooksRef: globalEditorHooksRef,
|
|
@@ -25,7 +25,7 @@
|
|
|
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:
|
|
28
|
+
* Version: 18.0.0-rc1 (built at Tue Jun 16 2026 10:11:54 GMT+0000 (Coordinated Universal Time))
|
|
29
29
|
*/
|
|
30
30
|
(function (global, factory) {
|
|
31
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')) :
|
|
@@ -211,7 +211,7 @@ function _toPrimitive(t, r) {
|
|
|
211
211
|
if ("object" != typeof i) return i;
|
|
212
212
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
213
213
|
}
|
|
214
|
-
return (String )(t);
|
|
214
|
+
return ("string" === r ? String : Number)(t);
|
|
215
215
|
}
|
|
216
216
|
function _toPropertyKey(t) {
|
|
217
217
|
var i = _toPrimitive(t, "string");
|
|
@@ -380,11 +380,18 @@ function createPortal(rElement) {
|
|
|
380
380
|
if (!ownerDocument) {
|
|
381
381
|
ownerDocument = document;
|
|
382
382
|
}
|
|
383
|
-
|
|
384
|
-
|
|
383
|
+
var portalContainer = cachedContainer;
|
|
384
|
+
|
|
385
|
+
// A new container needs an anchor before React mounts into it. A cached
|
|
386
|
+
// container is already attached (typically inside its TD) and must be
|
|
387
|
+
// left in place to avoid wiping the DOM on every grid render.
|
|
388
|
+
if (!portalContainer) {
|
|
389
|
+
if (!bulkComponentContainer) {
|
|
390
|
+
bulkComponentContainer = ownerDocument.createDocumentFragment();
|
|
391
|
+
}
|
|
392
|
+
portalContainer = ownerDocument.createElement('DIV');
|
|
393
|
+
bulkComponentContainer.appendChild(portalContainer);
|
|
385
394
|
}
|
|
386
|
-
var portalContainer = cachedContainer !== null && cachedContainer !== void 0 ? cachedContainer : ownerDocument.createElement('DIV');
|
|
387
|
-
bulkComponentContainer.appendChild(portalContainer);
|
|
388
395
|
return {
|
|
389
396
|
portal: /*#__PURE__*/ReactDOM__default["default"].createPortal(rElement, portalContainer, portalKey),
|
|
390
397
|
portalContainer: portalContainer
|
|
@@ -560,6 +567,9 @@ var HotTableContextProvider = function HotTableContextProvider(_ref) {
|
|
|
560
567
|
var setHotColumnSettings = React.useCallback(function (columnSettings, columnIndex) {
|
|
561
568
|
columnsSettings.current[columnIndex] = columnSettings;
|
|
562
569
|
}, []);
|
|
570
|
+
var trimColumnSettings = React.useCallback(function (length) {
|
|
571
|
+
columnsSettings.current.length = length;
|
|
572
|
+
}, []);
|
|
563
573
|
var componentRendererColumns = React.useRef(new Map());
|
|
564
574
|
var renderedCellCache = React.useRef(new Map());
|
|
565
575
|
var clearRenderedCellCache = React.useCallback(function () {
|
|
@@ -578,38 +588,36 @@ var HotTableContextProvider = function HotTableContextProvider(_ref) {
|
|
|
578
588
|
var instanceGuid = instance.guid;
|
|
579
589
|
var portalContainerKey = "".concat(instanceGuid, "-").concat(key);
|
|
580
590
|
var portalKey = "".concat(key, "-").concat(instanceGuid);
|
|
581
|
-
if (renderedCellCache.current.has(key)) {
|
|
582
|
-
TD.innerHTML = renderedCellCache.current.get(key).innerHTML;
|
|
583
|
-
}
|
|
584
591
|
if (TD && !TD.getAttribute('ghost-table')) {
|
|
585
|
-
var cachedPortal = portalCache.current.get(portalKey);
|
|
586
592
|
var cachedPortalContainer = portalContainerCache.current.get(portalContainerKey);
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
//
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
593
|
+
// When the cached portal container is still attached to the same
|
|
594
|
+
// TD as the previous render, the DOM is already correct and must
|
|
595
|
+
// not be wiped. Wiping detaches the React-managed children, which
|
|
596
|
+
// forces a full remount of the renderer component on every grid
|
|
597
|
+
// render (see issue #10800).
|
|
598
|
+
var containerInPlace = !!cachedPortalContainer && cachedPortalContainer.parentNode === TD;
|
|
599
|
+
var rendererElement = /*#__PURE__*/React__default["default"].createElement(Renderer, {
|
|
600
|
+
instance: instance,
|
|
601
|
+
TD: TD,
|
|
602
|
+
row: row,
|
|
603
|
+
col: col,
|
|
604
|
+
prop: prop,
|
|
605
|
+
value: value,
|
|
606
|
+
cellProperties: cellProperties
|
|
607
|
+
});
|
|
608
|
+
var _createPortal = createPortal(rendererElement, TD.ownerDocument, portalKey, cachedPortalContainer),
|
|
609
|
+
portal = _createPortal.portal,
|
|
610
|
+
portalContainer = _createPortal.portalContainer;
|
|
611
|
+
if (!containerInPlace) {
|
|
612
|
+
while (TD.firstChild) {
|
|
613
|
+
TD.removeChild(TD.firstChild);
|
|
614
|
+
}
|
|
608
615
|
TD.appendChild(portalContainer);
|
|
609
|
-
portalCache.current.set(portalKey, portal);
|
|
610
616
|
}
|
|
617
|
+
portalContainerCache.current.set(portalContainerKey, portalContainer);
|
|
618
|
+
portalCache.current.set(portalKey, portal);
|
|
611
619
|
}
|
|
612
|
-
renderedCellCache.current.set(
|
|
620
|
+
renderedCellCache.current.set(key, TD);
|
|
613
621
|
return TD;
|
|
614
622
|
};
|
|
615
623
|
}, []);
|
|
@@ -627,13 +635,14 @@ var HotTableContextProvider = function HotTableContextProvider(_ref) {
|
|
|
627
635
|
componentRendererColumns: componentRendererColumns.current,
|
|
628
636
|
columnsSettings: columnsSettings.current,
|
|
629
637
|
emitColumnSettings: setHotColumnSettings,
|
|
638
|
+
trimColumnSettings: trimColumnSettings,
|
|
630
639
|
getRendererWrapper: getRendererWrapper,
|
|
631
640
|
clearPortalCache: clearPortalCache,
|
|
632
641
|
clearRenderedCellCache: clearRenderedCellCache,
|
|
633
642
|
setRenderersPortalManagerRef: setRenderersPortalManagerRef,
|
|
634
643
|
pushCellPortalsIntoPortalManager: pushCellPortalsIntoPortalManager
|
|
635
644
|
};
|
|
636
|
-
}, [setHotColumnSettings, getRendererWrapper, clearRenderedCellCache, setRenderersPortalManagerRef, pushCellPortalsIntoPortalManager]);
|
|
645
|
+
}, [setHotColumnSettings, trimColumnSettings, getRendererWrapper, clearRenderedCellCache, setRenderersPortalManagerRef, pushCellPortalsIntoPortalManager]);
|
|
637
646
|
return /*#__PURE__*/React__default["default"].createElement(HotTableContext.Provider, {
|
|
638
647
|
value: contextImpl
|
|
639
648
|
}, children);
|
|
@@ -702,11 +711,12 @@ function makeEditorClass(hooksRef, instanceRef) {
|
|
|
702
711
|
args[_key] = arguments[_key];
|
|
703
712
|
}
|
|
704
713
|
if (!AbstractMethods.includes(propName)) {
|
|
705
|
-
|
|
714
|
+
var _ref;
|
|
715
|
+
result = (_ref = baseMethod).call.apply(_ref, [this].concat(args)); // call super
|
|
706
716
|
}
|
|
707
717
|
if (MethodsMap[propName] && (_hooksRef$current = hooksRef.current) !== null && _hooksRef$current !== void 0 && _hooksRef$current[MethodsMap[propName]]) {
|
|
708
|
-
var
|
|
709
|
-
result = (
|
|
718
|
+
var _ref2;
|
|
719
|
+
result = (_ref2 = hooksRef.current[MethodsMap[propName]]).call.apply(_ref2, [this].concat(args));
|
|
710
720
|
}
|
|
711
721
|
return result;
|
|
712
722
|
}.bind(_this);
|
|
@@ -747,10 +757,10 @@ var EditorContext = /*#__PURE__*/React.createContext(undefined);
|
|
|
747
757
|
* @param {Ref} hooksRef Reference for component-based editor overridden hooks object.
|
|
748
758
|
* @param {RefObject} hotCustomEditorInstanceRef Reference to Handsontable-native editor instance.
|
|
749
759
|
*/
|
|
750
|
-
var EditorContextProvider = function EditorContextProvider(
|
|
751
|
-
var hooksRef =
|
|
752
|
-
hotCustomEditorInstanceRef =
|
|
753
|
-
children =
|
|
760
|
+
var EditorContextProvider = function EditorContextProvider(_ref3) {
|
|
761
|
+
var hooksRef = _ref3.hooksRef,
|
|
762
|
+
hotCustomEditorInstanceRef = _ref3.hotCustomEditorInstanceRef,
|
|
763
|
+
children = _ref3.children;
|
|
754
764
|
return /*#__PURE__*/React__default["default"].createElement(EditorContext.Provider, {
|
|
755
765
|
value: {
|
|
756
766
|
hooksRef: hooksRef,
|
|
@@ -819,9 +829,9 @@ function applyEditorPosition(el, editor, hot, td) {
|
|
|
819
829
|
* @returns {UseHotEditorImpl} Editor API methods
|
|
820
830
|
*/
|
|
821
831
|
function useHotEditor(overriddenHooks, deps) {
|
|
822
|
-
var
|
|
823
|
-
hooksRef =
|
|
824
|
-
hotCustomEditorInstanceRef =
|
|
832
|
+
var _ref4 = React.useContext(EditorContext),
|
|
833
|
+
hooksRef = _ref4.hooksRef,
|
|
834
|
+
hotCustomEditorInstanceRef = _ref4.hotCustomEditorInstanceRef;
|
|
825
835
|
var _useState = React.useState(0),
|
|
826
836
|
_useState2 = _slicedToArray(_useState, 2),
|
|
827
837
|
rerenderTrigger = _useState2[0],
|
|
@@ -865,11 +875,13 @@ function useHotEditor(overriddenHooks, deps) {
|
|
|
865
875
|
},
|
|
866
876
|
get row() {
|
|
867
877
|
var _hotCustomEditorInsta6;
|
|
868
|
-
|
|
878
|
+
var row = (_hotCustomEditorInsta6 = hotCustomEditorInstanceRef.current) === null || _hotCustomEditorInsta6 === void 0 ? void 0 : _hotCustomEditorInsta6.row;
|
|
879
|
+
return row !== null && row !== void 0 ? row : undefined;
|
|
869
880
|
},
|
|
870
881
|
get col() {
|
|
871
882
|
var _hotCustomEditorInsta7;
|
|
872
|
-
|
|
883
|
+
var col = (_hotCustomEditorInsta7 = hotCustomEditorInstanceRef.current) === null || _hotCustomEditorInsta7 === void 0 ? void 0 : _hotCustomEditorInsta7.col;
|
|
884
|
+
return col !== null && col !== void 0 ? col : undefined;
|
|
873
885
|
}
|
|
874
886
|
};
|
|
875
887
|
}, [rerenderTrigger, hotCustomEditorInstanceRef, deferredValue]);
|
|
@@ -879,23 +891,23 @@ function useHotEditor(overriddenHooks, deps) {
|
|
|
879
891
|
|
|
880
892
|
// EditorComponent props - children typed to work with JSX syntax
|
|
881
893
|
|
|
882
|
-
function EditorComponent(
|
|
883
|
-
var _onPrepare =
|
|
884
|
-
_onClose =
|
|
885
|
-
_onOpen =
|
|
886
|
-
_onFocus =
|
|
887
|
-
children =
|
|
888
|
-
|
|
889
|
-
shortcutsGroup =
|
|
890
|
-
shortcuts =
|
|
894
|
+
function EditorComponent(_ref5) {
|
|
895
|
+
var _onPrepare = _ref5.onPrepare,
|
|
896
|
+
_onClose = _ref5.onClose,
|
|
897
|
+
_onOpen = _ref5.onOpen,
|
|
898
|
+
_onFocus = _ref5.onFocus,
|
|
899
|
+
children = _ref5.children,
|
|
900
|
+
_ref5$shortcutsGroup = _ref5.shortcutsGroup,
|
|
901
|
+
shortcutsGroup = _ref5$shortcutsGroup === void 0 ? "custom-editor" : _ref5$shortcutsGroup,
|
|
902
|
+
shortcuts = _ref5.shortcuts;
|
|
891
903
|
var mainElementRef = React.useRef(null);
|
|
892
904
|
var currentValue = React.useRef(undefined);
|
|
893
905
|
var _useState5 = React.useState(),
|
|
894
906
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
895
907
|
themeClassName = _useState6[0],
|
|
896
908
|
setThemeClassName = _useState6[1];
|
|
897
|
-
var
|
|
898
|
-
hotCustomEditorInstanceRef =
|
|
909
|
+
var _ref6 = React.useContext(EditorContext),
|
|
910
|
+
hotCustomEditorInstanceRef = _ref6.hotCustomEditorInstanceRef;
|
|
899
911
|
var registerShortcuts = React.useCallback(function () {
|
|
900
912
|
var _hotCustomEditorInsta8, _hotCustomEditorInsta9, _hotCustomEditorInsta0;
|
|
901
913
|
if (!((_hotCustomEditorInsta8 = hotCustomEditorInstanceRef.current) !== null && _hotCustomEditorInsta8 !== void 0 && _hotCustomEditorInsta8.hot)) return;
|
|
@@ -1099,7 +1111,7 @@ var HotColumn = function HotColumn(props) {
|
|
|
1099
1111
|
}, editorPortal);
|
|
1100
1112
|
};
|
|
1101
1113
|
|
|
1102
|
-
var version="
|
|
1114
|
+
var version="18.0.0-rc1";
|
|
1103
1115
|
|
|
1104
1116
|
/**
|
|
1105
1117
|
* Component used to manage the renderer component portals.
|
|
@@ -1328,6 +1340,12 @@ var HotTableInner = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
1328
1340
|
* Initialize Handsontable after the component has mounted.
|
|
1329
1341
|
*/
|
|
1330
1342
|
React.useEffect(function () {
|
|
1343
|
+
// React guarantees child effects run before parent effects on each
|
|
1344
|
+
// commit, so by the time this parent useEffect runs, every HotColumn
|
|
1345
|
+
// has already written its slot. Trim to drop any leftover slots from
|
|
1346
|
+
// a previous mount (e.g. StrictMode's double-invoke or HMR).
|
|
1347
|
+
var hotColumnCount = React.Children.toArray(props.children).filter(isHotColumn).length;
|
|
1348
|
+
context.trimColumnSettings(hotColumnCount);
|
|
1331
1349
|
var newGlobalSettings = createNewGlobalSettings(true);
|
|
1332
1350
|
|
|
1333
1351
|
// Update prevProps with the current props
|
|
@@ -1370,6 +1388,13 @@ var HotTableInner = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
1370
1388
|
useUpdateEffect(function () {
|
|
1371
1389
|
clearCache();
|
|
1372
1390
|
var hotInstance = getHotInstance();
|
|
1391
|
+
|
|
1392
|
+
// React guarantees child effects run before parent effects on each
|
|
1393
|
+
// commit, so by the time this parent useUpdateEffect runs, every
|
|
1394
|
+
// surviving HotColumn has already written its slot. Trim to drop
|
|
1395
|
+
// stale entries left behind by HotColumns that unmounted.
|
|
1396
|
+
var hotColumnCount = React.Children.toArray(props.children).filter(isHotColumn).length;
|
|
1397
|
+
context.trimColumnSettings(hotColumnCount);
|
|
1373
1398
|
var newGlobalSettings = createNewGlobalSettings(false, prevProps.current);
|
|
1374
1399
|
|
|
1375
1400
|
// Update prevProps with the current props
|
|
@@ -1407,7 +1432,11 @@ var HotTableInner = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
1407
1432
|
var editorPortal = createEditorPortal(getOwnerDocument(), props.editor);
|
|
1408
1433
|
return /*#__PURE__*/React__default["default"].createElement(React.Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", _extends({
|
|
1409
1434
|
ref: hotElementRef
|
|
1410
|
-
}, containerProps
|
|
1435
|
+
}, containerProps, {
|
|
1436
|
+
style: _objectSpread2({
|
|
1437
|
+
height: '100%'
|
|
1438
|
+
}, containerProps.style)
|
|
1439
|
+
}), hotColumnWrapped), /*#__PURE__*/React__default["default"].createElement(RenderersPortalManager, {
|
|
1411
1440
|
ref: context.setRenderersPortalManagerRef
|
|
1412
1441
|
}), /*#__PURE__*/React__default["default"].createElement(EditorContextProvider, {
|
|
1413
1442
|
hooksRef: globalEditorHooksRef,
|