@bit.rhplus/ag-grid 0.0.37 → 0.0.39

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 (37) hide show
  1. package/Aggregations.js +26 -3
  2. package/BulkEdit/BulkEditButton.jsx +149 -0
  3. package/BulkEdit/BulkEditPopover.jsx +301 -0
  4. package/BulkEdit/BulkEditSelect.jsx +80 -0
  5. package/BulkEdit/index.js +8 -0
  6. package/BulkEdit/useBulkCellEdit.js +348 -0
  7. package/BulkEdit/utils.js +532 -0
  8. package/Renderers/StateRenderer.jsx +17 -11
  9. package/dist/Aggregations.d.ts +2 -1
  10. package/dist/Aggregations.js +19 -2
  11. package/dist/Aggregations.js.map +1 -1
  12. package/dist/BulkEdit/BulkEditButton.d.ts +27 -0
  13. package/dist/BulkEdit/BulkEditButton.js +82 -0
  14. package/dist/BulkEdit/BulkEditButton.js.map +1 -0
  15. package/dist/BulkEdit/BulkEditPopover.d.ts +27 -0
  16. package/dist/BulkEdit/BulkEditPopover.js +122 -0
  17. package/dist/BulkEdit/BulkEditPopover.js.map +1 -0
  18. package/dist/BulkEdit/BulkEditSelect.d.ts +14 -0
  19. package/dist/BulkEdit/BulkEditSelect.js +31 -0
  20. package/dist/BulkEdit/BulkEditSelect.js.map +1 -0
  21. package/dist/BulkEdit/index.d.ts +5 -0
  22. package/dist/BulkEdit/index.js +7 -0
  23. package/dist/BulkEdit/index.js.map +1 -0
  24. package/dist/BulkEdit/useBulkCellEdit.d.ts +1 -0
  25. package/dist/BulkEdit/useBulkCellEdit.js +277 -0
  26. package/dist/BulkEdit/useBulkCellEdit.js.map +1 -0
  27. package/dist/BulkEdit/utils.d.ts +7 -0
  28. package/dist/BulkEdit/utils.js +472 -0
  29. package/dist/BulkEdit/utils.js.map +1 -0
  30. package/dist/Renderers/StateRenderer.js +16 -11
  31. package/dist/Renderers/StateRenderer.js.map +1 -1
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.js +184 -25
  34. package/dist/index.js.map +1 -1
  35. package/index.jsx +249 -25
  36. package/package.json +5 -4
  37. /package/dist/{preview-1760103803977.js → preview-1760429814166.js} +0 -0
@@ -0,0 +1,27 @@
1
+ export default BulkEditButton;
2
+ /**
3
+ * Floating button komponenta pro bulk edit
4
+ * @param {Object} props
5
+ * @param {boolean} props.visible - Viditelnost buttonu
6
+ * @param {Object} props.position - Pozice buttonu {x, y}
7
+ * @param {Object} props.range - AG Grid cell range
8
+ * @param {Object} props.column - AG Grid column objekt
9
+ * @param {number} props.cellCount - Počet buněk k editaci
10
+ * @param {Object} props.editPopover - State popoveru
11
+ * @param {Function} props.onOpenPopover - Handler pro otevření popoveru
12
+ * @param {Function} props.onValueChange - Handler pro změnu hodnoty
13
+ * @param {Function} props.onSubmit - Handler pro submit
14
+ * @param {Function} props.onCancel - Handler pro cancel
15
+ */
16
+ declare function BulkEditButton({ visible, position, range, column, cellCount, editPopover, onOpenPopover, onValueChange, onSubmit, onCancel, }: {
17
+ visible: boolean;
18
+ position: Object;
19
+ range: Object;
20
+ column: Object;
21
+ cellCount: number;
22
+ editPopover: Object;
23
+ onOpenPopover: Function;
24
+ onValueChange: Function;
25
+ onSubmit: Function;
26
+ onCancel: Function;
27
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,82 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* eslint-disable */
3
+ import React, { useState, useRef, useEffect } from 'react';
4
+ import { Button, Tooltip } from 'antd';
5
+ import { EditOutlined } from '@ant-design/icons';
6
+ import BulkEditPopover from './BulkEditPopover';
7
+ /**
8
+ * Floating button komponenta pro bulk edit
9
+ * @param {Object} props
10
+ * @param {boolean} props.visible - Viditelnost buttonu
11
+ * @param {Object} props.position - Pozice buttonu {x, y}
12
+ * @param {Object} props.range - AG Grid cell range
13
+ * @param {Object} props.column - AG Grid column objekt
14
+ * @param {number} props.cellCount - Počet buněk k editaci
15
+ * @param {Object} props.editPopover - State popoveru
16
+ * @param {Function} props.onOpenPopover - Handler pro otevření popoveru
17
+ * @param {Function} props.onValueChange - Handler pro změnu hodnoty
18
+ * @param {Function} props.onSubmit - Handler pro submit
19
+ * @param {Function} props.onCancel - Handler pro cancel
20
+ */
21
+ const BulkEditButton = ({ visible, position, range, column, cellCount, editPopover, onOpenPopover, onValueChange, onSubmit, onCancel, }) => {
22
+ const [popoverVisible, setPopoverVisible] = useState(false);
23
+ const buttonRef = useRef(null);
24
+ const popoverRef = useRef(null);
25
+ // Sync local popover state s parent editPopover state
26
+ useEffect(() => {
27
+ setPopoverVisible(editPopover.visible);
28
+ }, [editPopover.visible]);
29
+ if (!visible)
30
+ return null;
31
+ const colDef = column?.getColDef();
32
+ const fieldName = colDef?.headerName || colDef?.field || 'Sloupec';
33
+ /**
34
+ * Handler pro kliknutí na button
35
+ */
36
+ const handleButtonClick = (e) => {
37
+ e.stopPropagation();
38
+ if (!popoverVisible) {
39
+ setPopoverVisible(true);
40
+ onOpenPopover();
41
+ }
42
+ };
43
+ /**
44
+ * Handler pro kliknutí mimo popover (close)
45
+ */
46
+ const handleClickOutside = (e) => {
47
+ if (popoverVisible &&
48
+ popoverRef.current &&
49
+ !popoverRef.current.contains(e.target) &&
50
+ buttonRef.current &&
51
+ !buttonRef.current.contains(e.target)) {
52
+ onCancel();
53
+ }
54
+ };
55
+ // Click outside listener
56
+ useEffect(() => {
57
+ if (popoverVisible) {
58
+ document.addEventListener('mousedown', handleClickOutside);
59
+ return () => {
60
+ document.removeEventListener('mousedown', handleClickOutside);
61
+ };
62
+ }
63
+ }, [popoverVisible]);
64
+ const tooltipTitle = `Hromadně změnit ${cellCount} ${cellCount === 1 ? 'buňku' : cellCount < 5 ? 'buňky' : 'buněk'} v "${fieldName}"`;
65
+ return (_jsxs(_Fragment, { children: [_jsx("div", { ref: buttonRef, style: {
66
+ position: 'fixed',
67
+ top: position?.y || 0,
68
+ left: position?.x || 0,
69
+ zIndex: 9999,
70
+ pointerEvents: 'auto',
71
+ }, children: _jsx(Tooltip, { title: tooltipTitle, placement: "top", getPopupContainer: () => document.body, zIndex: 10001, children: _jsx(Button, { type: "primary", shape: "circle", icon: _jsx(EditOutlined, {}), size: "small", onClick: handleButtonClick, style: {
72
+ boxShadow: '0 2px 8px rgba(0,0,0,0.15)',
73
+ } }) }) }), popoverVisible && (_jsx("div", { ref: popoverRef, style: {
74
+ position: 'fixed',
75
+ top: (position?.y || 0) + 35, // Pod buttonem
76
+ left: position?.x || 0,
77
+ zIndex: 10000,
78
+ pointerEvents: 'auto',
79
+ }, children: _jsx(BulkEditPopover, { visible: editPopover.visible, value: editPopover.value, loading: editPopover.loading, error: editPopover.error, column: column, range: range, cellCount: cellCount, onValueChange: onValueChange, onSubmit: onSubmit, onCancel: onCancel }) }))] }));
80
+ };
81
+ export default BulkEditButton;
82
+ //# sourceMappingURL=BulkEditButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkEditButton.js","sourceRoot":"","sources":["../../BulkEdit/BulkEditButton.jsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export default BulkEditPopover;
2
+ /**
3
+ * Popover komponenta s inputem pro bulk edit
4
+ * @param {Object} props
5
+ * @param {boolean} props.visible - Viditelnost popoveru
6
+ * @param {string} props.value - Aktuální hodnota
7
+ * @param {boolean} props.loading - Loading state
8
+ * @param {string} props.error - Chybová hláška
9
+ * @param {Object} props.column - AG Grid column objekt
10
+ * @param {Object} props.range - AG Grid cell range objekt
11
+ * @param {number} props.cellCount - Počet buněk k editaci
12
+ * @param {Function} props.onValueChange - Handler pro změnu hodnoty
13
+ * @param {Function} props.onSubmit - Handler pro submit
14
+ * @param {Function} props.onCancel - Handler pro cancel
15
+ */
16
+ declare function BulkEditPopover({ visible, value, loading, error, column, range, cellCount, onValueChange, onSubmit, onCancel, }: {
17
+ visible: boolean;
18
+ value: string;
19
+ loading: boolean;
20
+ error: string;
21
+ column: Object;
22
+ range: Object;
23
+ cellCount: number;
24
+ onValueChange: Function;
25
+ onSubmit: Function;
26
+ onCancel: Function;
27
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* eslint-disable */
3
+ import React, { useCallback, useEffect, useRef } from 'react';
4
+ import { Input, InputNumber, Button, Alert, Space } from 'antd';
5
+ import { validateValue, getInputType } from './utils';
6
+ /**
7
+ * Popover komponenta s inputem pro bulk edit
8
+ * @param {Object} props
9
+ * @param {boolean} props.visible - Viditelnost popoveru
10
+ * @param {string} props.value - Aktuální hodnota
11
+ * @param {boolean} props.loading - Loading state
12
+ * @param {string} props.error - Chybová hláška
13
+ * @param {Object} props.column - AG Grid column objekt
14
+ * @param {Object} props.range - AG Grid cell range objekt
15
+ * @param {number} props.cellCount - Počet buněk k editaci
16
+ * @param {Function} props.onValueChange - Handler pro změnu hodnoty
17
+ * @param {Function} props.onSubmit - Handler pro submit
18
+ * @param {Function} props.onCancel - Handler pro cancel
19
+ */
20
+ const BulkEditPopover = ({ visible, value, loading, error, column, range, cellCount, onValueChange, onSubmit, onCancel, }) => {
21
+ const inputRef = useRef(null);
22
+ // Focus input při otevření
23
+ useEffect(() => {
24
+ if (visible && inputRef.current) {
25
+ setTimeout(() => {
26
+ inputRef.current?.focus();
27
+ }, 100);
28
+ }
29
+ }, [visible]);
30
+ if (!visible)
31
+ return null;
32
+ const colDef = column?.getColDef();
33
+ const inputType = getInputType(colDef);
34
+ const fieldName = colDef?.headerName || colDef?.field || 'Sloupec';
35
+ /**
36
+ * Handler pro submit
37
+ */
38
+ const handleSubmit = useCallback(() => {
39
+ // Validace hodnoty
40
+ const validation = validateValue(value, colDef);
41
+ if (!validation.valid) {
42
+ // Zobrazit error (parent komponenta zobrazí)
43
+ return;
44
+ }
45
+ onSubmit(validation.parsedValue);
46
+ }, [value, colDef, onSubmit]);
47
+ /**
48
+ * Handler pro Enter key
49
+ */
50
+ const handleKeyPress = useCallback((e) => {
51
+ if (e.key === 'Enter' && !loading) {
52
+ e.preventDefault();
53
+ handleSubmit();
54
+ }
55
+ else if (e.key === 'Escape') {
56
+ e.preventDefault();
57
+ onCancel();
58
+ }
59
+ }, [handleSubmit, loading, onCancel]);
60
+ /**
61
+ * Render input podle typu
62
+ */
63
+ const renderInput = () => {
64
+ // Check pro custom bulkEditPopover komponentu
65
+ const CustomComponent = colDef?.bulkEditPopover;
66
+ if (CustomComponent && typeof CustomComponent === 'function') {
67
+ // Renderovat custom komponentu s props
68
+ return (_jsx(CustomComponent, { value: value, onChange: onValueChange, onSubmit: onSubmit, onCancel: onCancel, loading: loading, error: error, column: column, range: range, cellCount: cellCount, colDef: colDef }));
69
+ }
70
+ // Default input podle typu
71
+ switch (inputType) {
72
+ case 'number':
73
+ return (_jsx(InputNumber, { ref: inputRef, style: { width: '100%' }, value: value, onChange: onValueChange, onPressEnter: handleKeyPress, placeholder: "Zadejte \u010D\u00EDslo...", disabled: loading }));
74
+ case 'date':
75
+ return (_jsx(Input, { ref: inputRef, type: "date", value: value, onChange: (e) => onValueChange(e.target.value), onKeyDown: handleKeyPress, placeholder: "Vyberte datum...", disabled: loading }));
76
+ case 'text':
77
+ default:
78
+ return (_jsx(Input, { ref: inputRef, value: value, onChange: (e) => onValueChange(e.target.value), onKeyDown: handleKeyPress, placeholder: "Zadejte hodnotu...", disabled: loading }));
79
+ }
80
+ };
81
+ // Check zda je custom komponenta
82
+ const CustomComponent = colDef?.bulkEditPopover;
83
+ const isCustomComponent = CustomComponent && typeof CustomComponent === 'function';
84
+ // Check zda má custom komponenta automatická tlačítka (default: true)
85
+ const autoButtons = colDef?.bulkEditPopoverAutoButtons !== false;
86
+ // Pokud je custom komponenta s automatickými tlačítky
87
+ if (isCustomComponent && autoButtons) {
88
+ return (_jsxs("div", { style: {
89
+ background: '#fff',
90
+ border: '1px solid #d9d9d9',
91
+ borderRadius: '4px',
92
+ padding: '12px',
93
+ boxShadow: '0 2px 8px rgba(0,0,0,0.15)',
94
+ minWidth: '280px',
95
+ maxWidth: '320px',
96
+ }, children: [_jsxs("div", { style: { marginBottom: '8px' }, children: [_jsx("div", { style: { fontSize: '14px', fontWeight: 500, marginBottom: '4px' }, children: "Hromadn\u00E1 zm\u011Bna" }), _jsxs("div", { style: { fontSize: '12px', color: '#8c8c8c' }, children: [fieldName, " \u00B7 ", cellCount, " ", cellCount === 1 ? 'buňka' : cellCount < 5 ? 'buňky' : 'buněk'] })] }), error && (_jsx(Alert, { message: error, type: "error", showIcon: true, closable: true, style: { marginBottom: '12px' } })), _jsx("div", { style: { marginBottom: '12px' }, children: renderInput() }), _jsxs(Space, { style: { width: '100%', justifyContent: 'flex-end' }, children: [_jsx(Button, { size: "small", onClick: onCancel, disabled: loading, children: "Zru\u0161it" }), _jsx(Button, { type: "primary", size: "small", onClick: handleSubmit, loading: loading, children: "Pou\u017E\u00EDt" })] })] }));
97
+ }
98
+ // Pokud je custom komponenta BEZ automatických tlačítek (plná kontrola)
99
+ if (isCustomComponent && !autoButtons) {
100
+ return (_jsxs("div", { style: {
101
+ background: '#fff',
102
+ border: '1px solid #d9d9d9',
103
+ borderRadius: '4px',
104
+ padding: '12px',
105
+ boxShadow: '0 2px 8px rgba(0,0,0,0.15)',
106
+ minWidth: '280px',
107
+ maxWidth: '320px',
108
+ }, children: [_jsxs("div", { style: { marginBottom: '8px' }, children: [_jsx("div", { style: { fontSize: '14px', fontWeight: 500, marginBottom: '4px' }, children: "Hromadn\u00E1 zm\u011Bna" }), _jsxs("div", { style: { fontSize: '12px', color: '#8c8c8c' }, children: [fieldName, " \u00B7 ", cellCount, " ", cellCount === 1 ? 'buňka' : cellCount < 5 ? 'buňky' : 'buněk'] })] }), error && (_jsx(Alert, { message: error, type: "error", showIcon: true, closable: true, style: { marginBottom: '12px' } })), renderInput()] }));
109
+ }
110
+ // Default popover s vlastními tlačítky
111
+ return (_jsxs("div", { style: {
112
+ background: '#fff',
113
+ border: '1px solid #d9d9d9',
114
+ borderRadius: '4px',
115
+ padding: '12px',
116
+ boxShadow: '0 2px 8px rgba(0,0,0,0.15)',
117
+ minWidth: '280px',
118
+ maxWidth: '320px',
119
+ }, children: [_jsxs("div", { style: { marginBottom: '8px' }, children: [_jsx("div", { style: { fontSize: '14px', fontWeight: 500, marginBottom: '4px' }, children: "Hromadn\u00E1 zm\u011Bna" }), _jsxs("div", { style: { fontSize: '12px', color: '#8c8c8c' }, children: [fieldName, " \u00B7 ", cellCount, " ", cellCount === 1 ? 'buňka' : cellCount < 5 ? 'buňky' : 'buněk'] })] }), error && (_jsx(Alert, { message: error, type: "error", showIcon: true, closable: true, style: { marginBottom: '12px' } })), _jsx("div", { style: { marginBottom: '12px' }, children: renderInput() }), _jsxs(Space, { style: { width: '100%', justifyContent: 'flex-end' }, children: [_jsx(Button, { size: "small", onClick: onCancel, disabled: loading, children: "Zru\u0161it" }), _jsx(Button, { type: "primary", size: "small", onClick: handleSubmit, loading: loading, children: "Pou\u017E\u00EDt" })] })] }));
120
+ };
121
+ export default BulkEditPopover;
122
+ //# sourceMappingURL=BulkEditPopover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkEditPopover.js","sourceRoot":"","sources":["../../BulkEdit/BulkEditPopover.jsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export default BulkEditSelect;
2
+ declare function BulkEditSelect({ value, onChange, onSubmit, onCancel, loading, options, placeholder, allowClear, fieldLabel, fieldValue, showSearch, }: {
3
+ value: any;
4
+ onChange: any;
5
+ onSubmit: any;
6
+ onCancel: any;
7
+ loading: any;
8
+ options?: any[] | undefined;
9
+ placeholder?: string | undefined;
10
+ allowClear?: boolean | undefined;
11
+ fieldLabel?: string | undefined;
12
+ fieldValue?: string | undefined;
13
+ showSearch?: boolean | undefined;
14
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /* eslint-disable */
3
+ import React, { useRef, useEffect } from 'react';
4
+ import { Select, Button, Space } from 'antd';
5
+ const BulkEditSelect = ({ value, onChange, onSubmit, onCancel, loading, options = [], placeholder = 'Vyberte hodnotu...', allowClear = true, fieldLabel = 'value', fieldValue = 'id', showSearch = false, }) => {
6
+ const selectRef = useRef(null);
7
+ useEffect(() => {
8
+ if (selectRef.current) {
9
+ setTimeout(() => {
10
+ selectRef.current?.focus();
11
+ }, 100);
12
+ }
13
+ }, []);
14
+ const handleKeyDown = (e) => {
15
+ if (e.key === 'Enter' && !loading) {
16
+ e.preventDefault();
17
+ onSubmit(value);
18
+ }
19
+ else if (e.key === 'Escape') {
20
+ e.preventDefault();
21
+ onCancel();
22
+ }
23
+ };
24
+ return (_jsxs(_Fragment, { children: [_jsx("div", { style: { marginBottom: '12px' }, onClick: (e) => e.stopPropagation(), children: _jsx(Select, { ref: selectRef, style: { width: '100%' }, value: value, onChange: onChange, placeholder: placeholder, disabled: loading, allowClear: allowClear, showSearch: showSearch, filterOption: showSearch ? (input, option) => (option?.label ?? '').toLowerCase().includes(input.toLowerCase())
25
+ : false, options: options.map(item => ({
26
+ label: item[fieldLabel],
27
+ value: item[fieldValue]
28
+ })), onKeyDown: handleKeyDown, onClick: (e) => e.stopPropagation(), getPopupContainer: (trigger) => trigger.parentNode }) }), _jsxs(Space, { style: { width: '100%', justifyContent: 'flex-end' }, children: [_jsx(Button, { size: "small", onClick: onCancel, disabled: loading, children: "Zru\u0161it" }), _jsx(Button, { type: "primary", size: "small", onClick: () => onSubmit(value), loading: loading, children: "Pou\u017E\u00EDt" })] })] }));
29
+ };
30
+ export default BulkEditSelect;
31
+ //# sourceMappingURL=BulkEditSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkEditSelect.js","sourceRoot":"","sources":["../../BulkEdit/BulkEditSelect.jsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { useBulkCellEdit } from "./useBulkCellEdit";
2
+ export { default as BulkEditButton } from "./BulkEditButton";
3
+ export { default as BulkEditPopover } from "./BulkEditPopover";
4
+ export { default as BulkEditSelect } from "./BulkEditSelect";
5
+ export * from "./utils";
@@ -0,0 +1,7 @@
1
+ /* eslint-disable */
2
+ export { useBulkCellEdit } from './useBulkCellEdit';
3
+ export { default as BulkEditButton } from './BulkEditButton';
4
+ export { default as BulkEditPopover } from './BulkEditPopover';
5
+ export { default as BulkEditSelect } from './BulkEditSelect';
6
+ export * from './utils';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../BulkEdit/index.js"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE7D,cAAc,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ export function useBulkCellEdit(gridRef: Object, options?: Object): Object;
@@ -0,0 +1,277 @@
1
+ /* eslint-disable */
2
+ import { useState, useCallback, useEffect, useRef } from 'react';
3
+ import { validateRangeEditable, getLastCellPosition, applyBulkChanges, applyBulkChangesWithApi, } from './utils';
4
+ import useData from '@bit.rhplus/data';
5
+ /**
6
+ * Hook pro bulk cell edit funkcionalitu v AG Grid
7
+ * @param {Object} gridRef - Reference na AG Grid
8
+ * @param {Object} options - Konfigurace bulk edit
9
+ * @returns {Object} - State a handlery pro bulk edit
10
+ */
11
+ export const useBulkCellEdit = (gridRef, options = {}) => {
12
+ const { enabled = false, minCells = 2, allowMultiColumn = false, buttonPosition = 'bottom-right', buttonOffset = { x: 5, y: 5 }, accessToken = null, onBulkEditStart, onBulkEditComplete, } = options;
13
+ const { fetchDataUIAsync } = useData();
14
+ const [floatingButton, setFloatingButton] = useState({
15
+ visible: false,
16
+ position: null,
17
+ range: null,
18
+ column: null,
19
+ cellCount: 0,
20
+ });
21
+ const [editPopover, setEditPopover] = useState({
22
+ visible: false,
23
+ value: '',
24
+ loading: false,
25
+ error: null,
26
+ });
27
+ const scrollListenerRef = useRef(null);
28
+ const debounceTimeoutRef = useRef(null);
29
+ const pendingEventRef = useRef(null);
30
+ /**
31
+ * Handler pro změnu range selection s debounce optimalizací
32
+ */
33
+ const handleRangeChange = useCallback((event) => {
34
+ // Lightweight pre-checks - okamžitě bez debounce
35
+ if (!enabled) {
36
+ setFloatingButton({ visible: false });
37
+ return;
38
+ }
39
+ const ranges = event.api.getCellRanges();
40
+ if (!ranges || ranges.length === 0) {
41
+ setFloatingButton({ visible: false });
42
+ return;
43
+ }
44
+ // Uložit event pro debounced zpracování
45
+ pendingEventRef.current = event;
46
+ // Debounce logika - čekat až přestane označovat (150ms)
47
+ if (debounceTimeoutRef.current) {
48
+ clearTimeout(debounceTimeoutRef.current);
49
+ }
50
+ debounceTimeoutRef.current = setTimeout(() => {
51
+ if (pendingEventRef.current) {
52
+ executeRangeValidation(pendingEventRef.current);
53
+ }
54
+ }, 150);
55
+ }, [enabled]);
56
+ /**
57
+ * Těžké validace a výpočty v debounced callbacku
58
+ */
59
+ const executeRangeValidation = useCallback((event) => {
60
+ const ranges = event.api.getCellRanges();
61
+ if (!ranges || ranges.length === 0) {
62
+ setFloatingButton({ visible: false });
63
+ return;
64
+ }
65
+ const range = ranges[0];
66
+ // Kontrola single column
67
+ if (!allowMultiColumn && range.columns.length !== 1) {
68
+ setFloatingButton({ visible: false });
69
+ return;
70
+ }
71
+ // Výpočet počtu buněk
72
+ const cellCount = Math.abs(range.endRow.rowIndex - range.startRow.rowIndex) + 1;
73
+ // Kontrola min počtu buněk
74
+ if (cellCount < minCells) {
75
+ setFloatingButton({ visible: false });
76
+ return;
77
+ }
78
+ // Těžká validace - editable sloupce
79
+ if (!validateRangeEditable(range, event.api)) {
80
+ setFloatingButton({ visible: false });
81
+ return;
82
+ }
83
+ // Těžký výpočet - pozice buňky
84
+ const cellPosition = getLastCellPosition(range, event.api);
85
+ if (!cellPosition) {
86
+ setFloatingButton({ visible: false });
87
+ return;
88
+ }
89
+ let buttonX, buttonY;
90
+ switch (buttonPosition) {
91
+ case 'bottom-right':
92
+ buttonX = cellPosition.right + buttonOffset.x;
93
+ buttonY = cellPosition.bottom + buttonOffset.y;
94
+ break;
95
+ case 'bottom-left':
96
+ buttonX = cellPosition.left - buttonOffset.x;
97
+ buttonY = cellPosition.bottom + buttonOffset.y;
98
+ break;
99
+ case 'top-right':
100
+ buttonX = cellPosition.right + buttonOffset.x;
101
+ buttonY = cellPosition.top - buttonOffset.y;
102
+ break;
103
+ case 'top-left':
104
+ buttonX = cellPosition.left - buttonOffset.x;
105
+ buttonY = cellPosition.top - buttonOffset.y;
106
+ break;
107
+ default:
108
+ buttonX = cellPosition.right + buttonOffset.x;
109
+ buttonY = cellPosition.bottom + buttonOffset.y;
110
+ }
111
+ setFloatingButton({
112
+ visible: true,
113
+ position: { x: buttonX, y: buttonY },
114
+ range,
115
+ column: range.columns[0],
116
+ cellCount,
117
+ });
118
+ }, [minCells, allowMultiColumn, buttonPosition, buttonOffset]);
119
+ /**
120
+ * Handler pro kliknutí na bulk edit button - otevře popover
121
+ */
122
+ const handleOpenPopover = useCallback(() => {
123
+ if (onBulkEditStart) {
124
+ onBulkEditStart({
125
+ range: floatingButton.range,
126
+ column: floatingButton.column,
127
+ cellCount: floatingButton.cellCount,
128
+ });
129
+ }
130
+ setEditPopover({
131
+ visible: true,
132
+ value: '',
133
+ loading: false,
134
+ error: null,
135
+ });
136
+ }, [floatingButton, onBulkEditStart]);
137
+ /**
138
+ * Handler pro submit bulk edit změn
139
+ */
140
+ const handleSubmitEdit = useCallback(async (newValue) => {
141
+ if (!gridRef.current || !floatingButton.range) {
142
+ return;
143
+ }
144
+ setEditPopover((prev) => ({ ...prev, loading: true, error: null }));
145
+ try {
146
+ const colDef = floatingButton.column?.getColDef();
147
+ const bulkEditApi = colDef?.bulkEditApi;
148
+ let result;
149
+ // Pokud je definováno bulkEditApi, použij API volání
150
+ if (bulkEditApi?.endpoint) {
151
+ result = await applyBulkChangesWithApi(floatingButton.range, newValue, gridRef.current.api, bulkEditApi, accessToken, fetchDataUIAsync, (result) => {
152
+ if (onBulkEditComplete) {
153
+ onBulkEditComplete({
154
+ ...result,
155
+ range: floatingButton.range,
156
+ column: floatingButton.column,
157
+ newValue,
158
+ });
159
+ }
160
+ });
161
+ }
162
+ else {
163
+ // Pokud není API, použij lokální změnu
164
+ result = applyBulkChanges(floatingButton.range, newValue, gridRef.current.api, (result) => {
165
+ if (onBulkEditComplete) {
166
+ onBulkEditComplete({
167
+ ...result,
168
+ range: floatingButton.range,
169
+ column: floatingButton.column,
170
+ newValue,
171
+ });
172
+ }
173
+ });
174
+ }
175
+ if (result.success) {
176
+ // Úspěch - zavřít popover a skrýt button
177
+ setEditPopover({
178
+ visible: false,
179
+ value: '',
180
+ loading: false,
181
+ error: null,
182
+ });
183
+ setFloatingButton({ visible: false });
184
+ }
185
+ else {
186
+ // Chyba - zobrazit error
187
+ setEditPopover((prev) => ({
188
+ ...prev,
189
+ loading: false,
190
+ error: result.error || result.errors?.[0] || 'Chyba při aplikaci změn',
191
+ }));
192
+ }
193
+ }
194
+ catch (error) {
195
+ setEditPopover((prev) => ({
196
+ ...prev,
197
+ loading: false,
198
+ error: error?.message || 'Neznámá chyba',
199
+ }));
200
+ }
201
+ }, [gridRef, floatingButton, onBulkEditComplete, accessToken, fetchDataUIAsync]);
202
+ /**
203
+ * Handler pro zrušení bulk edit
204
+ */
205
+ const handleCancelEdit = useCallback(() => {
206
+ setEditPopover({
207
+ visible: false,
208
+ value: '',
209
+ loading: false,
210
+ error: null,
211
+ });
212
+ setFloatingButton({ visible: false });
213
+ }, []);
214
+ /**
215
+ * Handler pro změnu hodnoty v popover inputu
216
+ */
217
+ const handleValueChange = useCallback((value) => {
218
+ setEditPopover((prev) => ({ ...prev, value, error: null }));
219
+ }, []);
220
+ /**
221
+ * Scroll listener - skrýt button při scrollování
222
+ */
223
+ useEffect(() => {
224
+ if (!enabled || !gridRef.current)
225
+ return;
226
+ const gridElement = gridRef.current.api?.gridBodyCtrl?.eBodyViewport;
227
+ if (!gridElement)
228
+ return;
229
+ const handleScroll = () => {
230
+ if (floatingButton.visible) {
231
+ setFloatingButton({ visible: false });
232
+ }
233
+ };
234
+ scrollListenerRef.current = handleScroll;
235
+ gridElement.addEventListener('scroll', handleScroll);
236
+ return () => {
237
+ if (gridElement && scrollListenerRef.current) {
238
+ gridElement.removeEventListener('scroll', scrollListenerRef.current);
239
+ }
240
+ };
241
+ }, [enabled, gridRef, floatingButton.visible]);
242
+ /**
243
+ * Window resize listener - přepočítat pozici
244
+ */
245
+ useEffect(() => {
246
+ if (!enabled || !floatingButton.visible)
247
+ return;
248
+ const handleResize = () => {
249
+ // Při resize okna skryjeme button (user musí znovu označit)
250
+ setFloatingButton({ visible: false });
251
+ };
252
+ window.addEventListener('resize', handleResize);
253
+ return () => {
254
+ window.removeEventListener('resize', handleResize);
255
+ };
256
+ }, [enabled, floatingButton.visible]);
257
+ /**
258
+ * Cleanup timeout on unmount
259
+ */
260
+ useEffect(() => {
261
+ return () => {
262
+ if (debounceTimeoutRef.current) {
263
+ clearTimeout(debounceTimeoutRef.current);
264
+ }
265
+ };
266
+ }, []);
267
+ return {
268
+ floatingButton,
269
+ editPopover,
270
+ handleRangeChange,
271
+ handleOpenPopover,
272
+ handleSubmitEdit,
273
+ handleCancelEdit,
274
+ handleValueChange,
275
+ };
276
+ };
277
+ //# sourceMappingURL=useBulkCellEdit.js.map