@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.
- package/AgGridColumn.js +35 -5
- package/BulkEdit/BulkEditButton.jsx +11 -1
- package/BulkEdit/BulkEditDatePicker.jsx +10 -1
- package/BulkEdit/BulkEditInput.jsx +10 -1
- package/BulkEdit/BulkEditModule.jsx +10 -1
- package/BulkEdit/BulkEditPopover.jsx +10 -1
- package/BulkEdit/BulkEditSelect.jsx +10 -1
- package/Renderers/BooleanRenderer.jsx +10 -1
- package/Renderers/ButtonRenderer.jsx +16 -2
- package/Renderers/CheckboxRenderer.jsx +22 -9
- package/Renderers/CountrySelectRenderer.jsx +62 -14
- package/Renderers/IconRenderer.jsx +10 -1
- package/Renderers/ImageRenderer.jsx +13 -2
- package/Renderers/LinkRenderer.jsx +132 -0
- package/Renderers/ObjectRenderer.jsx +139 -0
- package/Renderers/SelectRenderer.jsx +76 -9
- package/Renderers/StateRenderer.jsx +10 -1
- package/dist/AgGridColumn.js +35 -5
- package/dist/AgGridColumn.js.map +1 -1
- package/dist/BulkEdit/BulkEditButton.d.ts +4 -17
- package/dist/BulkEdit/BulkEditButton.js +5 -1
- package/dist/BulkEdit/BulkEditButton.js.map +1 -1
- package/dist/BulkEdit/BulkEditDatePicker.d.ts +4 -3
- package/dist/BulkEdit/BulkEditDatePicker.js +6 -1
- package/dist/BulkEdit/BulkEditDatePicker.js.map +1 -1
- package/dist/BulkEdit/BulkEditInput.d.ts +4 -3
- package/dist/BulkEdit/BulkEditInput.js +6 -1
- package/dist/BulkEdit/BulkEditInput.js.map +1 -1
- package/dist/BulkEdit/BulkEditModule.d.ts +4 -3
- package/dist/BulkEdit/BulkEditModule.js +6 -1
- package/dist/BulkEdit/BulkEditModule.js.map +1 -1
- package/dist/BulkEdit/BulkEditPopover.d.ts +4 -17
- package/dist/BulkEdit/BulkEditPopover.js +4 -1
- package/dist/BulkEdit/BulkEditPopover.js.map +1 -1
- package/dist/BulkEdit/BulkEditSelect.d.ts +4 -3
- package/dist/BulkEdit/BulkEditSelect.js +6 -1
- package/dist/BulkEdit/BulkEditSelect.js.map +1 -1
- package/dist/Renderers/BooleanRenderer.d.ts +1 -2
- package/dist/Renderers/BooleanRenderer.js +4 -1
- package/dist/Renderers/BooleanRenderer.js.map +1 -1
- package/dist/Renderers/ButtonRenderer.d.ts +1 -2
- package/dist/Renderers/ButtonRenderer.js +9 -2
- package/dist/Renderers/ButtonRenderer.js.map +1 -1
- package/dist/Renderers/CheckboxRenderer.d.ts +4 -1
- package/dist/Renderers/CheckboxRenderer.js +17 -7
- package/dist/Renderers/CheckboxRenderer.js.map +1 -1
- package/dist/Renderers/CountrySelectRenderer.d.ts +4 -1
- package/dist/Renderers/CountrySelectRenderer.js +40 -11
- package/dist/Renderers/CountrySelectRenderer.js.map +1 -1
- package/dist/Renderers/IconRenderer.d.ts +1 -2
- package/dist/Renderers/IconRenderer.js +4 -1
- package/dist/Renderers/IconRenderer.js.map +1 -1
- package/dist/Renderers/ImageRenderer.d.ts +1 -2
- package/dist/Renderers/ImageRenderer.js +5 -1
- package/dist/Renderers/ImageRenderer.js.map +1 -1
- package/dist/Renderers/LinkRenderer.d.ts +3 -0
- package/dist/Renderers/LinkRenderer.js +75 -0
- package/dist/Renderers/LinkRenderer.js.map +1 -0
- package/dist/Renderers/ObjectRenderer.d.ts +3 -0
- package/dist/Renderers/ObjectRenderer.js +78 -0
- package/dist/Renderers/ObjectRenderer.js.map +1 -0
- package/dist/Renderers/SelectRenderer.d.ts +1 -2
- package/dist/Renderers/SelectRenderer.js +51 -9
- package/dist/Renderers/SelectRenderer.js.map +1 -1
- package/dist/Renderers/StateRenderer.d.ts +1 -2
- package/dist/Renderers/StateRenderer.js +4 -1
- package/dist/Renderers/StateRenderer.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +196 -66
- package/dist/index.js.map +1 -1
- package/index.jsx +218 -66
- package/package.json +8 -7
- /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.
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
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;
|
|
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.
|
|
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
|
-
|
|
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":";AAAA,oBAAoB;AACpB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
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
|
-
|
|
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 (
|
|
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 (
|
|
184
|
-
const gridId =
|
|
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 (
|
|
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 (
|
|
205
|
-
|
|
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 (
|
|
241
|
+
if (activeNotificationModeRef.current === 'full') {
|
|
209
242
|
// FULL mód - zobrazit plovoucí notifikaci s tlačítkem pro přepnutí na simple
|
|
210
|
-
const gridId =
|
|
243
|
+
const gridId = propsRef.current.gridName || propsRef.current.id || 'default';
|
|
211
244
|
const key = `aggregation-grid-${gridId}`;
|
|
212
245
|
const dynamicStyle = {
|
|
213
|
-
...
|
|
214
|
-
pointerEvents:
|
|
246
|
+
...styleRef.current,
|
|
247
|
+
pointerEvents: isSelectingRef.current ? 'none' : 'auto'
|
|
215
248
|
};
|
|
216
249
|
notification.info({
|
|
217
250
|
key,
|
|
218
|
-
message:
|
|
219
|
-
description:
|
|
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 (
|
|
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 (
|
|
234
|
-
const gridId =
|
|
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 (
|
|
271
|
+
if (activeNotificationModeRef.current === 'simple') {
|
|
239
272
|
setAggregationData(null);
|
|
240
273
|
}
|
|
241
274
|
}
|
|
242
|
-
}, [
|
|
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 (
|
|
440
|
-
const throttleInterval =
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
468
|
-
|
|
524
|
+
if (enableBulkEditRef.current) {
|
|
525
|
+
handleRangeChangeRef.current(event);
|
|
469
526
|
}
|
|
470
527
|
// 3. Custom onRangeSelectionChanged callback - bez debounce
|
|
471
|
-
if (
|
|
472
|
-
|
|
473
|
-
|
|
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:
|
|
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
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|