@bit.rhplus/ag-grid 0.0.76 → 0.0.78

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.
Files changed (73) hide show
  1. package/AgGridColumn.js +35 -5
  2. package/BulkEdit/BulkEditButton.jsx +11 -1
  3. package/BulkEdit/BulkEditDatePicker.jsx +10 -1
  4. package/BulkEdit/BulkEditInput.jsx +10 -1
  5. package/BulkEdit/BulkEditModule.jsx +10 -1
  6. package/BulkEdit/BulkEditPopover.jsx +10 -1
  7. package/BulkEdit/BulkEditSelect.jsx +10 -1
  8. package/Renderers/BooleanRenderer.jsx +10 -1
  9. package/Renderers/ButtonRenderer.jsx +16 -2
  10. package/Renderers/CheckboxRenderer.jsx +22 -9
  11. package/Renderers/CountrySelectRenderer.jsx +62 -14
  12. package/Renderers/IconRenderer.jsx +10 -1
  13. package/Renderers/ImageRenderer.jsx +13 -2
  14. package/Renderers/LinkRenderer.jsx +132 -0
  15. package/Renderers/ObjectRenderer.jsx +139 -0
  16. package/Renderers/SelectRenderer.jsx +76 -9
  17. package/Renderers/StateRenderer.jsx +10 -1
  18. package/dist/AgGridColumn.js +35 -5
  19. package/dist/AgGridColumn.js.map +1 -1
  20. package/dist/BulkEdit/BulkEditButton.d.ts +4 -17
  21. package/dist/BulkEdit/BulkEditButton.js +5 -1
  22. package/dist/BulkEdit/BulkEditButton.js.map +1 -1
  23. package/dist/BulkEdit/BulkEditDatePicker.d.ts +4 -3
  24. package/dist/BulkEdit/BulkEditDatePicker.js +6 -1
  25. package/dist/BulkEdit/BulkEditDatePicker.js.map +1 -1
  26. package/dist/BulkEdit/BulkEditInput.d.ts +4 -3
  27. package/dist/BulkEdit/BulkEditInput.js +6 -1
  28. package/dist/BulkEdit/BulkEditInput.js.map +1 -1
  29. package/dist/BulkEdit/BulkEditModule.d.ts +4 -3
  30. package/dist/BulkEdit/BulkEditModule.js +6 -1
  31. package/dist/BulkEdit/BulkEditModule.js.map +1 -1
  32. package/dist/BulkEdit/BulkEditPopover.d.ts +4 -17
  33. package/dist/BulkEdit/BulkEditPopover.js +4 -1
  34. package/dist/BulkEdit/BulkEditPopover.js.map +1 -1
  35. package/dist/BulkEdit/BulkEditSelect.d.ts +4 -3
  36. package/dist/BulkEdit/BulkEditSelect.js +6 -1
  37. package/dist/BulkEdit/BulkEditSelect.js.map +1 -1
  38. package/dist/Renderers/BooleanRenderer.d.ts +1 -2
  39. package/dist/Renderers/BooleanRenderer.js +4 -1
  40. package/dist/Renderers/BooleanRenderer.js.map +1 -1
  41. package/dist/Renderers/ButtonRenderer.d.ts +1 -2
  42. package/dist/Renderers/ButtonRenderer.js +9 -2
  43. package/dist/Renderers/ButtonRenderer.js.map +1 -1
  44. package/dist/Renderers/CheckboxRenderer.d.ts +4 -1
  45. package/dist/Renderers/CheckboxRenderer.js +17 -7
  46. package/dist/Renderers/CheckboxRenderer.js.map +1 -1
  47. package/dist/Renderers/CountrySelectRenderer.d.ts +4 -1
  48. package/dist/Renderers/CountrySelectRenderer.js +40 -11
  49. package/dist/Renderers/CountrySelectRenderer.js.map +1 -1
  50. package/dist/Renderers/IconRenderer.d.ts +1 -2
  51. package/dist/Renderers/IconRenderer.js +4 -1
  52. package/dist/Renderers/IconRenderer.js.map +1 -1
  53. package/dist/Renderers/ImageRenderer.d.ts +1 -2
  54. package/dist/Renderers/ImageRenderer.js +5 -1
  55. package/dist/Renderers/ImageRenderer.js.map +1 -1
  56. package/dist/Renderers/LinkRenderer.d.ts +3 -0
  57. package/dist/Renderers/LinkRenderer.js +75 -0
  58. package/dist/Renderers/LinkRenderer.js.map +1 -0
  59. package/dist/Renderers/ObjectRenderer.d.ts +3 -0
  60. package/dist/Renderers/ObjectRenderer.js +78 -0
  61. package/dist/Renderers/ObjectRenderer.js.map +1 -0
  62. package/dist/Renderers/SelectRenderer.d.ts +1 -2
  63. package/dist/Renderers/SelectRenderer.js +51 -9
  64. package/dist/Renderers/SelectRenderer.js.map +1 -1
  65. package/dist/Renderers/StateRenderer.d.ts +1 -2
  66. package/dist/Renderers/StateRenderer.js +4 -1
  67. package/dist/Renderers/StateRenderer.js.map +1 -1
  68. package/dist/index.d.ts +2 -2
  69. package/dist/index.js +196 -66
  70. package/dist/index.js.map +1 -1
  71. package/index.jsx +218 -66
  72. package/package.json +8 -7
  73. /package/dist/{preview-1768297732386.js → preview-1768388646791.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectRenderer.js","sourceRoot":"","sources":["../../Renderers/ObjectRenderer.jsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- declare const _default: React.MemoExoticComponent<typeof SelectRenderer>;
1
+ declare const _default: React.NamedExoticComponent<any>;
2
2
  export default _default;
3
- declare function SelectRenderer(params: any): "" | import("react/jsx-runtime").JSX.Element;
4
3
  import * as React from 'react';
@@ -1,13 +1,55 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* eslint-disable */
2
3
  import * as React from 'react';
3
- function SelectRenderer(params) {
4
- const { value, value: { name } = {} } = params;
5
- if (!value)
6
- return '';
7
- // let imageUrl = '';
8
- // if (params.value)
9
- // imageUrl = `https://rhplus.blob.core.windows.net/countries/${params.value.toUpperCase()}.png`;
10
- return _jsx("div", { children: name });
4
+ import { createMemoComparison } from '@bit.rhplus/react-memo';
5
+ // Style konstanty mimo komponentu
6
+ const CONTAINER_STYLE = {
7
+ display: 'flex',
8
+ alignItems: 'center',
9
+ height: '100%',
10
+ };
11
+ function SelectRenderer(props) {
12
+ const { data, value, colDef: { selectRendererParams = {} } = {} } = props;
13
+ // Extrakce parametrů
14
+ const { cellAlign = 'left', visibleGetter, showOnGroup = false, displayField = 'name', // Které pole zobrazit z objektu
15
+ } = selectRendererParams;
16
+ // Memoizovaný displayValue
17
+ const displayValue = React.useMemo(() => {
18
+ if (!value)
19
+ return null;
20
+ // Pokud je displayField funkce
21
+ if (typeof displayField === 'function') {
22
+ return displayField({ data, value, props });
23
+ }
24
+ // Pokud je displayField string (název pole)
25
+ if (typeof displayField === 'string') {
26
+ return value[displayField] || value;
27
+ }
28
+ // Fallback - pokud value je string, vrať ho přímo
29
+ if (typeof value === 'string') {
30
+ return value;
31
+ }
32
+ return null;
33
+ }, [value, displayField, data, props]);
34
+ // Memoizovaná viditelnost
35
+ const visibleResult = React.useMemo(() => visibleGetter ? visibleGetter(data) : true, [visibleGetter, data]);
36
+ const showCondition = React.useMemo(() => {
37
+ const newItem = (data && data._rh_plus_ag_grid_new_item) || false;
38
+ return !newItem && (showOnGroup || !!data) && visibleResult;
39
+ }, [data, showOnGroup, visibleResult]);
40
+ // Container style s alignmentem
41
+ const containerStyle = React.useMemo(() => ({
42
+ ...CONTAINER_STYLE,
43
+ justifyContent: cellAlign === 'center' ? 'center' :
44
+ cellAlign === 'right' ? 'flex-end' :
45
+ 'flex-start',
46
+ }), [cellAlign]);
47
+ if (!showCondition || !displayValue)
48
+ return null;
49
+ return (_jsx("div", { style: containerStyle, children: displayValue }));
11
50
  }
12
- export default React.memo(SelectRenderer);
51
+ SelectRenderer.displayName = 'SelectRenderer';
52
+ // React.memo optimalizace pro AG-Grid renderer
53
+ const arePropsEqual = createMemoComparison(['value', 'colDef'], [], false, 'SelectRenderer');
54
+ export default React.memo(SelectRenderer, arePropsEqual);
13
55
  //# sourceMappingURL=SelectRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectRenderer.js","sourceRoot":"","sources":["../../Renderers/SelectRenderer.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,SAAS,cAAc,CAAC,MAAM;IAC5B,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,EAAC,IAAI,EAAC,GAAG,EAAE,EAAC,GAAG,MAAM,CAAC;IAE3C,IAAI,CAAC,KAAK;QACR,OAAO,EAAE,CAAC;IAEZ,qBAAqB;IAErB,oBAAoB;IACpB,mGAAmG;IAEnG,OAAO,wBAAM,IAAI,GAAO,CAAC;AAC3B,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"SelectRenderer.js","sourceRoot":"","sources":["../../Renderers/SelectRenderer.jsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- declare const _default: React.MemoExoticComponent<typeof StateRenderer>;
1
+ declare const _default: React.NamedExoticComponent<any>;
2
2
  export default _default;
3
- declare function StateRenderer(props: any): import("react/jsx-runtime").JSX.Element | null;
4
3
  import * as React from 'react';
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  /* eslint-disable */
3
3
  import * as React from 'react';
4
+ import { createMemoComparison } from '@bit.rhplus/react-memo';
4
5
  // Helper function moved outside component
5
6
  function getValueByPath(obj, path) {
6
7
  if (!obj || !path)
@@ -107,5 +108,7 @@ function StateRenderer(props) {
107
108
  }), [computedBgColor, computedTextColor, minWidth, fontSize]);
108
109
  return (_jsx("div", { style: containerStyle, children: _jsx("span", { style: badgeStyle, children: displayText }) }));
109
110
  }
110
- export default React.memo(StateRenderer);
111
+ // React.memo optimalizace pro AG-Grid renderer
112
+ const arePropsEqual = createMemoComparison(['value', 'colDef'], [], false, 'StateRenderer');
113
+ export default React.memo(StateRenderer, arePropsEqual);
111
114
  //# sourceMappingURL=StateRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StateRenderer.js","sourceRoot":"","sources":["../../Renderers/StateRenderer.jsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StateRenderer.js","sourceRoot":"","sources":["../../Renderers/StateRenderer.jsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export default AgGrid;
1
+ declare const _default: React.NamedExoticComponent<React.RefAttributes<any>>;
2
+ export default _default;
2
3
  export { default as CheckboxRenderer } from "./Renderers/CheckboxRenderer";
3
- declare const AgGrid: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
4
4
  import * as React from 'react';
5
5
  export { useBulkCellEdit, BulkEditButton, BulkEditPopover, BulkEditSelect, BulkEditDatePicker, BulkEditModule, BulkEditInput } from "./BulkEdit";
package/dist/index.js CHANGED
@@ -11,12 +11,15 @@ import { AgGridOnRowDataChanged } from './AgGridOnRowDataChanged';
11
11
  import { AgGridOnRowDataUpdated } from './AgGridOnRowDataUpdated';
12
12
  import CheckboxRenderer from './Renderers/CheckboxRenderer';
13
13
  import BooleanRenderer from './Renderers/BooleanRenderer';
14
+ import { createGridComparison } from '@bit.rhplus/react-memo';
14
15
  import IconRenderer from './Renderers/IconRenderer';
15
16
  import ImageRenderer from './Renderers/ImageRenderer';
16
17
  import StateRenderer from './Renderers/StateRenderer';
17
18
  import SelectRenderer from './Renderers/SelectRenderer';
18
19
  import ButtonRenderer from './Renderers/ButtonRenderer';
19
20
  import CountrySelectRenderer from './Renderers/CountrySelectRenderer';
21
+ import ObjectRenderer from './Renderers/ObjectRenderer';
22
+ import LinkRenderer from './Renderers/LinkRenderer';
20
23
  import NotificationOptionsInit from "./NotificationOptions";
21
24
  import AggregationStatusBar from "./AggregationStatusBar";
22
25
  import { notification, Button } from "antd";
@@ -166,11 +169,41 @@ const AgGrid = React.forwardRef((props, ref) => {
166
169
  setAggregationData(null);
167
170
  setActiveNotificationMode('full');
168
171
  }, [aggregationData, props, notificationHead, createNotificationDescription, style, placement]);
172
+ // ========== PERFORMANCE FIX: Stabilní refs pro updateAggregationNotification ==========
173
+ const activeNotificationModeRef = React.useRef(activeNotificationMode);
174
+ const isSelectingRef = React.useRef(isSelecting);
175
+ const notificationHeadRef = React.useRef(notificationHead);
176
+ const createNotificationDescriptionRef = React.useRef(createNotificationDescription);
177
+ const styleRef = React.useRef(style);
178
+ const placementRef = React.useRef(placement);
179
+ const propsRef = React.useRef(props);
180
+ React.useEffect(() => {
181
+ activeNotificationModeRef.current = activeNotificationMode;
182
+ }, [activeNotificationMode]);
183
+ React.useEffect(() => {
184
+ isSelectingRef.current = isSelecting;
185
+ }, [isSelecting]);
186
+ React.useEffect(() => {
187
+ notificationHeadRef.current = notificationHead;
188
+ }, [notificationHead]);
189
+ React.useEffect(() => {
190
+ createNotificationDescriptionRef.current = createNotificationDescription;
191
+ }, [createNotificationDescription]);
192
+ React.useEffect(() => {
193
+ styleRef.current = style;
194
+ }, [style]);
195
+ React.useEffect(() => {
196
+ placementRef.current = placement;
197
+ }, [placement]);
198
+ React.useEffect(() => {
199
+ propsRef.current = props;
200
+ }, [props]);
169
201
  // ✅ OPTIMALIZACE: Helper funkce pro aktualizaci aggregace notifikace s cache check
170
202
  // Volá se BĚHEM označování s 100ms throttle pro real-time feedback
203
+ // STABILNÍ callback - používá pouze refs!
171
204
  const updateAggregationNotification = React.useCallback((event) => {
172
205
  // Pokud je notificationMode 'none', nedělat nic
173
- if (notificationMode === 'none') {
206
+ if (notificationModeRef.current === 'none') {
174
207
  return;
175
208
  }
176
209
  // Lightweight cache check PŘED voláním Aggregations()
@@ -180,13 +213,13 @@ const AgGrid = React.forwardRef((props, ref) => {
180
213
  if (!ranges || ranges.length === 0 || !ranges[0]?.startRow) {
181
214
  lastRangeHashRef.current = null;
182
215
  // V 'full' módu zavřít notifikaci
183
- if (activeNotificationMode === 'full') {
184
- const gridId = props.gridName || props.id || 'default';
216
+ if (activeNotificationModeRef.current === 'full') {
217
+ const gridId = propsRef.current.gridName || propsRef.current.id || 'default';
185
218
  const key = `aggregation-grid-${gridId}`;
186
219
  notification.destroy(key);
187
220
  }
188
221
  // V 'simple' módu vyčistit aggregationData
189
- if (activeNotificationMode === 'simple') {
222
+ if (activeNotificationModeRef.current === 'simple') {
190
223
  setAggregationData(null);
191
224
  }
192
225
  return;
@@ -201,28 +234,28 @@ const AgGrid = React.forwardRef((props, ref) => {
201
234
  // Uložit hash pro příští porovnání
202
235
  lastRangeHashRef.current = currentRangeHash;
203
236
  // Zavolat onAggregationChanged callback pokud existuje
204
- if (props.onAggregationChanged) {
205
- props.onAggregationChanged(messageInfo);
237
+ if (propsRef.current.onAggregationChanged) {
238
+ propsRef.current.onAggregationChanged(messageInfo);
206
239
  }
207
240
  // Podle aktivního módu zobrazit buď notifikaci nebo aktualizovat status bar
208
- if (activeNotificationMode === 'full') {
241
+ if (activeNotificationModeRef.current === 'full') {
209
242
  // FULL mód - zobrazit plovoucí notifikaci s tlačítkem pro přepnutí na simple
210
- const gridId = props.gridName || props.id || 'default';
243
+ const gridId = propsRef.current.gridName || propsRef.current.id || 'default';
211
244
  const key = `aggregation-grid-${gridId}`;
212
245
  const dynamicStyle = {
213
- ...style,
214
- pointerEvents: isSelecting ? 'none' : 'auto'
246
+ ...styleRef.current,
247
+ pointerEvents: isSelectingRef.current ? 'none' : 'auto'
215
248
  };
216
249
  notification.info({
217
250
  key,
218
- message: notificationHead(messageInfo),
219
- description: createNotificationDescription(messageInfo, true),
251
+ message: notificationHeadRef.current(messageInfo),
252
+ description: createNotificationDescriptionRef.current(messageInfo, true),
220
253
  duration: 0,
221
254
  style: dynamicStyle,
222
- placement,
255
+ placement: placementRef.current,
223
256
  });
224
257
  }
225
- else if (activeNotificationMode === 'simple') {
258
+ else if (activeNotificationModeRef.current === 'simple') {
226
259
  // SIMPLE mód - aktualizovat state pro status bar
227
260
  setAggregationData(messageInfo);
228
261
  }
@@ -230,16 +263,16 @@ const AgGrid = React.forwardRef((props, ref) => {
230
263
  else {
231
264
  // Jen jedna buňka - zavřít/vyčistit vše
232
265
  lastRangeHashRef.current = null;
233
- if (activeNotificationMode === 'full') {
234
- const gridId = props.gridName || props.id || 'default';
266
+ if (activeNotificationModeRef.current === 'full') {
267
+ const gridId = propsRef.current.gridName || propsRef.current.id || 'default';
235
268
  const key = `aggregation-grid-${gridId}`;
236
269
  notification.destroy(key);
237
270
  }
238
- if (activeNotificationMode === 'simple') {
271
+ if (activeNotificationModeRef.current === 'simple') {
239
272
  setAggregationData(null);
240
273
  }
241
274
  }
242
- }, [notificationMode, activeNotificationMode, internalRef, props, notificationHead, createNotificationDescription, style, placement, isSelecting]);
275
+ }, [internalRef]); // Pouze internalRef v dependencies!
243
276
  // Detekce konce označování pomocí mouseup event
244
277
  React.useEffect(() => {
245
278
  const handleMouseUp = () => {
@@ -430,14 +463,38 @@ const AgGrid = React.forwardRef((props, ref) => {
430
463
  }
431
464
  previousRowDataRef.current = rowData;
432
465
  }, [rowData, newRowFlash, updatedRowFlash]);
466
+ // ========== PERFORMANCE FIX: Stabilní ref pattern pro callbacks ==========
467
+ // Refs pro aktuální hodnoty - zabraňuje re-creation RhPlusRangeSelectionChanged při změně stavu
468
+ const notificationModeRef = React.useRef(notificationMode);
469
+ const enableBulkEditRef = React.useRef(enableBulkEdit);
470
+ const handleRangeChangeRef = React.useRef(handleRangeChange);
471
+ const onRangeSelectionChangedRef = React.useRef(props.onRangeSelectionChanged);
472
+ const updateAggregationNotificationRef = React.useRef(updateAggregationNotification);
473
+ // Aktualizovat refs při změně hodnot
474
+ React.useEffect(() => {
475
+ notificationModeRef.current = notificationMode;
476
+ }, [notificationMode]);
477
+ React.useEffect(() => {
478
+ enableBulkEditRef.current = enableBulkEdit;
479
+ }, [enableBulkEdit]);
480
+ React.useEffect(() => {
481
+ handleRangeChangeRef.current = handleRangeChange;
482
+ }, [handleRangeChange]);
483
+ React.useEffect(() => {
484
+ onRangeSelectionChangedRef.current = props.onRangeSelectionChanged;
485
+ }, [props.onRangeSelectionChanged]);
486
+ React.useEffect(() => {
487
+ updateAggregationNotificationRef.current = updateAggregationNotification;
488
+ }, [updateAggregationNotification]);
489
+ // Stabilní callback s prázdnými dependencies - používá pouze refs
433
490
  const RhPlusRangeSelectionChanged = React.useCallback((event) => {
434
491
  // Detekovat začátek označování - nastavit isSelecting na true
435
492
  setIsSelecting(true);
436
493
  // 1. ✅ OPTIMALIZACE: Zobrazení notifikace BĚHEM označování s THROTTLE
437
494
  // Simple mode: 300ms throttle (méně častá aktualizace, lepší výkon)
438
495
  // Full mode: 100ms throttle (rychlejší feedback, plovoucí notifikace je levná)
439
- if (notificationMode !== 'none') {
440
- const throttleInterval = notificationMode === 'simple' ? 300 : 100;
496
+ if (notificationModeRef.current !== 'none') {
497
+ const throttleInterval = notificationModeRef.current === 'simple' ? 300 : 100;
441
498
  const now = Date.now();
442
499
  const timeSinceLastCall = now - notificationLastCallRef.current;
443
500
  // První volání NEBO uplynul throttle interval
@@ -445,7 +502,7 @@ const AgGrid = React.forwardRef((props, ref) => {
445
502
  // Okamžité volání
446
503
  notificationLastCallRef.current = now;
447
504
  if (internalRef?.current) {
448
- updateAggregationNotification(event);
505
+ updateAggregationNotificationRef.current(event);
449
506
  }
450
507
  }
451
508
  else {
@@ -456,7 +513,7 @@ const AgGrid = React.forwardRef((props, ref) => {
456
513
  notificationThrottleRef.current = setTimeout(() => {
457
514
  notificationLastCallRef.current = Date.now();
458
515
  if (internalRef?.current) {
459
- updateAggregationNotification(event);
516
+ updateAggregationNotificationRef.current(event);
460
517
  }
461
518
  }, throttleInterval - timeSinceLastCall);
462
519
  }
@@ -464,13 +521,15 @@ const AgGrid = React.forwardRef((props, ref) => {
464
521
  // 2. ✅ OPTIMALIZACE: Bulk edit handler BEZ debounce - okamžité zobrazení ikony
465
522
  // Lightweight validace v useBulkCellEdit zajistí okamžité zobrazení
466
523
  // Těžká validace proběhne s 15ms debounce uvnitř useBulkCellEdit
467
- if (enableBulkEdit) {
468
- handleRangeChange(event);
524
+ if (enableBulkEditRef.current) {
525
+ handleRangeChangeRef.current(event);
469
526
  }
470
527
  // 3. Custom onRangeSelectionChanged callback - bez debounce
471
- if (props.onRangeSelectionChanged)
472
- props.onRangeSelectionChanged(event);
473
- }, [notificationMode, enableBulkEdit, handleRangeChange, props.onRangeSelectionChanged, updateAggregationNotification]);
528
+ if (onRangeSelectionChangedRef.current) {
529
+ onRangeSelectionChangedRef.current(event);
530
+ }
531
+ }, [] // ✅ PRÁZDNÉ dependencies - stabilní reference!
532
+ );
474
533
  const AgGridOnGridReady = (event, options) => {
475
534
  if (onGridReady) {
476
535
  onGridReady(event, options);
@@ -569,6 +628,8 @@ const AgGrid = React.forwardRef((props, ref) => {
569
628
  iconRenderer: IconRenderer,
570
629
  imageRenderer: ImageRenderer,
571
630
  stateRenderer: StateRenderer,
631
+ objectRenderer: ObjectRenderer,
632
+ linkRenderer: LinkRenderer,
572
633
  ...props.frameworkComponents,
573
634
  };
574
635
  }, [props.frameworkComponents]);
@@ -581,8 +642,9 @@ const AgGrid = React.forwardRef((props, ref) => {
581
642
  const memoizedOnRowDataChanged = React.useCallback((event) => AgGridOnRowDataChanged(event, props), [props.onRowDataChanged]);
582
643
  const memoizedOnRowDataUpdated = React.useCallback((event) => AgGridOnRowDataUpdated(event, props), [props.onRowDataUpdated]);
583
644
  // Memoizovaný context object
645
+ // ✅ OPTIMALIZACE: Použít pouze relevantní props pro context - neměnit při změně props
584
646
  const memoizedContext = React.useMemo(() => ({
585
- componentParent: { ...props }
647
+ componentParent: props
586
648
  }), [props.context, props.gridName, props.id]);
587
649
  // Memoizovaný defaultColDef
588
650
  const memoizedDefaultColDef = React.useMemo(() => ({
@@ -590,50 +652,113 @@ const AgGrid = React.forwardRef((props, ref) => {
590
652
  suppressHeaderMenuButton: true,
591
653
  suppressHeaderFilterButton: true,
592
654
  suppressMenu: true,
655
+ // ✅ FIX AG-Grid v35: Bezpečné zpracování null hodnot v Quick Filter
656
+ // AG-Grid v35 změnil implementaci Quick Filter - nyní volá .toString() na hodnotách buněk bez null check
657
+ // Tento callback zajistí že nikdy nedojde k chybě "Cannot read properties of null (reading 'toString')"
658
+ getQuickFilterText: (params) => {
659
+ const value = params.value;
660
+ // Null/undefined → prázdný string (bez chyby)
661
+ if (value == null)
662
+ return '';
663
+ // Objekty a pole → JSON string
664
+ if (typeof value === 'object') {
665
+ try {
666
+ return JSON.stringify(value);
667
+ }
668
+ catch {
669
+ // Cirkulární reference nebo jiná chyba při serializaci → prázdný string
670
+ return '';
671
+ }
672
+ }
673
+ // Primitivní typy → toString
674
+ return value.toString();
675
+ },
593
676
  }), [props.defaultColDef]);
594
- // ========== PERFORMANCE OPTIMIZATION: Memoizovaný allGridProps ==========
595
- const allGridProps = React.useMemo(() => ({
596
- ref: internalRef,
597
- ...props,
598
- theme: themeObject,
599
- columnDefs: AgGridColumns(props.columnDefs, props),
600
- defaultColDef: memoizedDefaultColDef,
601
- onCellEditingStarted: memoizedOnCellEditingStarted,
602
- onCellDoubleClicked: memoizedOnCellDoubleClicked,
603
- onCellValueChanged: memoizedOnCellValueChanged,
604
- postSort: memoizedPostSort,
605
- onGridReady: memoizedOnGridReady,
606
- onRowDataChanged: memoizedOnRowDataChanged,
607
- onRowDataUpdated: memoizedOnRowDataUpdated,
608
- onRangeSelectionChanged: RhPlusRangeSelectionChanged,
609
- context: memoizedContext,
610
- components,
611
- // Explicitně zajistit že enableRangeSelection je propagováno
612
- enableRangeSelection: props.enableRangeSelection,
613
- }), [
614
- internalRef,
615
- themeObject,
616
- props.columnDefs,
617
- props.enableRangeSelection,
618
- memoizedDefaultColDef,
619
- memoizedOnCellEditingStarted,
620
- memoizedOnCellDoubleClicked,
621
- memoizedOnCellValueChanged,
622
- memoizedPostSort,
623
- memoizedOnGridReady,
624
- memoizedOnRowDataChanged,
625
- memoizedOnRowDataUpdated,
626
- RhPlusRangeSelectionChanged,
627
- memoizedContext,
628
- components,
629
- ]);
677
+ // ========== PERFORMANCE FIX: Memoizovat columnDefs ==========
678
+ // AgGridColumns vrací nový array při každém volání, i když jsou vstupy stejné
679
+ const memoizedColumnDefs = React.useMemo(() => {
680
+ return AgGridColumns(props.columnDefs, props);
681
+ }, [props.columnDefs, props.getRowId, props.frameworkComponents]);
682
+ // ========== CRITICAL FIX: Stabilní allGridProps objekt pomocí ref a forceUpdate ==========
683
+ // Problém: Jakékoli použití useMemo vytváří nový objekt při změně dependencies
684
+ // Řešení: Použít ref pro VŽDY stejný objekt a forceUpdate pro kontrolované re-rendery
685
+ const allGridPropsRef = React.useRef(null);
686
+ const [, forceUpdate] = React.useReducer((x) => x + 1, 0);
687
+ // Sledovat klíčové props pro detekci kdy je potřeba forceUpdate
688
+ const prevRowDataRef = React.useRef(props.rowData);
689
+ const prevColumnDefsRef = React.useRef(memoizedColumnDefs);
690
+ // Inicializace objektu
691
+ if (!allGridPropsRef.current) {
692
+ allGridPropsRef.current = {};
693
+ }
694
+ // Aktualizovat props v EXISTUJÍCÍM objektu (mutace)
695
+ // AG Grid interně detekuje změny props, nepotřebuje nový objekt
696
+ allGridPropsRef.current.ref = internalRef;
697
+ allGridPropsRef.current.rowData = props.rowData;
698
+ allGridPropsRef.current.getRowId = props.getRowId;
699
+ allGridPropsRef.current.theme = themeObject;
700
+ allGridPropsRef.current.columnDefs = memoizedColumnDefs;
701
+ allGridPropsRef.current.defaultColDef = memoizedDefaultColDef;
702
+ allGridPropsRef.current.onCellEditingStarted = memoizedOnCellEditingStarted;
703
+ allGridPropsRef.current.onCellDoubleClicked = memoizedOnCellDoubleClicked;
704
+ // allGridPropsRef.current.onCellValueChanged = memoizedOnCellValueChanged;
705
+ allGridPropsRef.current.postSort = memoizedPostSort;
706
+ allGridPropsRef.current.onGridReady = memoizedOnGridReady;
707
+ allGridPropsRef.current.onRowDataChanged = memoizedOnRowDataChanged;
708
+ allGridPropsRef.current.onRowDataUpdated = memoizedOnRowDataUpdated;
709
+ allGridPropsRef.current.onRangeSelectionChanged = RhPlusRangeSelectionChanged;
710
+ allGridPropsRef.current.context = memoizedContext;
711
+ allGridPropsRef.current.components = components;
712
+ // Další AG Grid props
713
+ allGridPropsRef.current.rowModelType = props.rowModelType;
714
+ allGridPropsRef.current.rowSelection = props.rowSelection;
715
+ allGridPropsRef.current.enableRangeSelection = props.enableRangeSelection;
716
+ allGridPropsRef.current.enableRangeHandle = props.enableRangeHandle;
717
+ allGridPropsRef.current.enableFillHandle = props.enableFillHandle;
718
+ allGridPropsRef.current.suppressRowClickSelection = props.suppressRowClickSelection;
719
+ allGridPropsRef.current.singleClickEdit = props.singleClickEdit;
720
+ allGridPropsRef.current.stopEditingWhenCellsLoseFocus = props.stopEditingWhenCellsLoseFocus;
721
+ allGridPropsRef.current.rowClass = props.rowClass;
722
+ allGridPropsRef.current.rowStyle = props.rowStyle;
723
+ allGridPropsRef.current.getRowClass = props.getRowClass;
724
+ allGridPropsRef.current.getRowStyle = props.getRowStyle;
725
+ allGridPropsRef.current.animateRows = props.animateRows;
726
+ allGridPropsRef.current.suppressCellFocus = props.suppressCellFocus;
727
+ allGridPropsRef.current.suppressMenuHide = props.suppressMenuHide;
728
+ allGridPropsRef.current.enableCellTextSelection = props.enableCellTextSelection;
729
+ allGridPropsRef.current.ensureDomOrder = props.ensureDomOrder;
730
+ allGridPropsRef.current.suppressRowTransform = props.suppressRowTransform;
731
+ allGridPropsRef.current.suppressColumnVirtualisation = props.suppressColumnVirtualisation;
732
+ allGridPropsRef.current.suppressRowVirtualisation = props.suppressRowVirtualisation;
733
+ allGridPropsRef.current.tooltipShowDelay = props.tooltipShowDelay;
734
+ allGridPropsRef.current.tooltipHideDelay = props.tooltipHideDelay;
735
+ allGridPropsRef.current.tooltipMouseTrack = props.tooltipMouseTrack;
736
+ allGridPropsRef.current.gridId = props.gridId;
737
+ allGridPropsRef.current.id = props.id;
738
+ allGridPropsRef.current.gridName = props.gridName;
739
+ // ✅ Detekovat změny které VYŽADUJÍ re-render AG Gridu
740
+ React.useEffect(() => {
741
+ const rowDataChanged = prevRowDataRef.current !== props.rowData;
742
+ const columnDefsChanged = prevColumnDefsRef.current !== memoizedColumnDefs;
743
+ if (rowDataChanged || columnDefsChanged) {
744
+ prevRowDataRef.current = props.rowData;
745
+ prevColumnDefsRef.current = memoizedColumnDefs;
746
+ // Vynutit re-render pouze když se data nebo sloupce změní
747
+ forceUpdate();
748
+ }
749
+ }, [props.rowData, memoizedColumnDefs]);
750
+ // ✅ Vracíme VŽDY stejný objekt (stabilní reference)
751
+ const allGridProps = allGridPropsRef.current;
630
752
  // State pro sledování, kdy je API ready
631
753
  const [isApiReady, setIsApiReady] = React.useState(false);
632
754
  // Nastavení Quick Filter přes API (podle AG-Grid v33 dokumentace)
633
755
  // Tento useEffect se volá při změně quickFilterText NEBO když API je ready
634
756
  React.useEffect(() => {
635
757
  if (internalRef.current?.api && !internalRef.current.api.isDestroyed?.()) {
636
- internalRef.current.api.setGridOption("quickFilterText", quickFilterText);
758
+ // ✅ FIX AG-Grid v35: Zajistit že quickFilterText není null/undefined
759
+ // AG-Grid v35 interně volá .toString() na této hodnotě bez null checku
760
+ const safeQuickFilterText = quickFilterText ?? '';
761
+ internalRef.current.api.setGridOption("quickFilterText", safeQuickFilterText);
637
762
  }
638
763
  }, [quickFilterText, isApiReady]);
639
764
  // Status bar se zobrazuje pouze v simple mode
@@ -659,7 +784,12 @@ const AgGrid = React.forwardRef((props, ref) => {
659
784
  willChange: 'opacity'
660
785
  }, children: _jsx(AggregationStatusBar, { data: aggregationData || {}, metrics: statusBarMetrics, height: statusBarHeight, onSwitchToFull: handleSwitchToFull }) })), enableBulkEdit && floatingButton.visible && (_jsx(BulkEditButton, { visible: floatingButton.visible, position: floatingButton.position, range: floatingButton.range, column: floatingButton.column, cellCount: floatingButton.cellCount, rowsContainer: floatingButton.rowsContainer, editPopover: editPopover, onOpenPopover: handleOpenPopover, onValueChange: handleValueChange, onSubmit: handleSubmitEdit, onCancel: handleCancelEdit }))] }));
661
786
  });
662
- export default AgGrid;
787
+ // ========== PERFORMANCE OPTIMIZATION: React.memo ==========
788
+ // Refactored: Používá createGridComparison utility místo manuálního deep comparison
789
+ // Eliminováno ~120 řádků duplicitního kódu, zachována stejná funkcionalita
790
+ // Diagnostic mode: zapnutý pouze ve development módu
791
+ export default React.memo(AgGrid, createGridComparison(process.env.NODE_ENV !== 'production' // Diagnostic mode pouze ve development
792
+ ));
663
793
  export { useBulkCellEdit, BulkEditButton, BulkEditPopover, BulkEditSelect, BulkEditDatePicker, BulkEditModule, BulkEditInput } from './BulkEdit';
664
794
  export { default as CheckboxRenderer } from './Renderers/CheckboxRenderer';
665
795
  //# sourceMappingURL=index.js.map