@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.
- package/Aggregations.js +26 -3
- package/BulkEdit/BulkEditButton.jsx +149 -0
- package/BulkEdit/BulkEditPopover.jsx +301 -0
- package/BulkEdit/BulkEditSelect.jsx +80 -0
- package/BulkEdit/index.js +8 -0
- package/BulkEdit/useBulkCellEdit.js +348 -0
- package/BulkEdit/utils.js +532 -0
- package/Renderers/StateRenderer.jsx +17 -11
- package/dist/Aggregations.d.ts +2 -1
- package/dist/Aggregations.js +19 -2
- package/dist/Aggregations.js.map +1 -1
- package/dist/BulkEdit/BulkEditButton.d.ts +27 -0
- package/dist/BulkEdit/BulkEditButton.js +82 -0
- package/dist/BulkEdit/BulkEditButton.js.map +1 -0
- package/dist/BulkEdit/BulkEditPopover.d.ts +27 -0
- package/dist/BulkEdit/BulkEditPopover.js +122 -0
- package/dist/BulkEdit/BulkEditPopover.js.map +1 -0
- package/dist/BulkEdit/BulkEditSelect.d.ts +14 -0
- package/dist/BulkEdit/BulkEditSelect.js +31 -0
- package/dist/BulkEdit/BulkEditSelect.js.map +1 -0
- package/dist/BulkEdit/index.d.ts +5 -0
- package/dist/BulkEdit/index.js +7 -0
- package/dist/BulkEdit/index.js.map +1 -0
- package/dist/BulkEdit/useBulkCellEdit.d.ts +1 -0
- package/dist/BulkEdit/useBulkCellEdit.js +277 -0
- package/dist/BulkEdit/useBulkCellEdit.js.map +1 -0
- package/dist/BulkEdit/utils.d.ts +7 -0
- package/dist/BulkEdit/utils.js +472 -0
- package/dist/BulkEdit/utils.js.map +1 -0
- package/dist/Renderers/StateRenderer.js +16 -11
- package/dist/Renderers/StateRenderer.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +184 -25
- package/dist/index.js.map +1 -1
- package/index.jsx +249 -25
- package/package.json +5 -4
- /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
|