@bit.rhplus/ag-grid 0.0.81 → 0.0.83
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/BulkEdit/BulkEditDatePicker.jsx +305 -305
- package/BulkEdit/BulkEditInput.jsx +81 -81
- package/BulkEdit/BulkEditPopover.jsx +310 -310
- package/BulkEdit/BulkEditSelect.jsx +106 -106
- package/Editors/DatePickerEditor.jsx +75 -0
- package/Editors/index.jsx +1 -0
- package/Renderers/ImageRenderer.jsx +103 -103
- package/Renderers/LinkRenderer.jsx +133 -133
- package/Renderers/ObjectRenderer.jsx +140 -140
- package/Renderers/SelectCellRenderer.jsx +25 -0
- package/Renderers/StateRenderer.jsx +148 -148
- package/Renderers/index.jsx +1 -0
- package/dist/BulkEdit/BulkEditDatePicker.js +35 -35
- package/dist/Editors/DatePickerEditor.d.ts +9 -0
- package/dist/Editors/DatePickerEditor.js +55 -0
- package/dist/Editors/DatePickerEditor.js.map +1 -0
- package/dist/Editors/index.d.ts +1 -0
- package/dist/Editors/index.js +2 -0
- package/dist/Editors/index.js.map +1 -0
- package/dist/Renderers/SelectCellRenderer.d.ts +4 -0
- package/dist/Renderers/SelectCellRenderer.js +18 -0
- package/dist/Renderers/SelectCellRenderer.js.map +1 -0
- package/dist/Renderers/index.d.ts +1 -0
- package/dist/Renderers/index.js +2 -0
- package/dist/Renderers/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/index.jsx +5 -1
- package/package.json +5 -5
- /package/dist/{preview-1768486452196.js → preview-1768824266519.js} +0 -0
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { createMemoComparison } from '@bit.rhplus/react-memo';
|
|
4
|
-
|
|
5
|
-
// Helper function moved outside component
|
|
6
|
-
function getValueByPath(obj, path) {
|
|
7
|
-
if (!obj || !path) return null;
|
|
8
|
-
return path.split('.').reduce((o, k) => (o && o[k] !== undefined) ? o[k] : null, obj);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
function StateRenderer(props) {
|
|
12
|
-
const { data, value, colDef: { stateRendererParams = {} } = {} } = props;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (!stateRendererParams) return null;
|
|
16
|
-
|
|
17
|
-
const {
|
|
18
|
-
visibleGetter = () => true,
|
|
19
|
-
cellAlign = 'center',
|
|
20
|
-
bgColor, // Barva pozadí nebo funkce vracející barvu
|
|
21
|
-
color, // Barva textu nebo funkce vracející barvu (nový název)
|
|
22
|
-
textColor, // Barva textu (starý název - zpětná kompatibilita)
|
|
23
|
-
bgColorField, // Název pole obsahujícího barvu pozadí
|
|
24
|
-
colorField, // Název pole obsahujícího barvu textu (nový název)
|
|
25
|
-
textColorField, // Název pole obsahujícího barvu textu (starý název - zpětná kompatibilita)
|
|
26
|
-
displayField, // Pole pro zobrazení textu
|
|
27
|
-
minWidth = 80, // Minimální šířka kruhového pozadí
|
|
28
|
-
fontSize = 12, // Velikost fontu
|
|
29
|
-
showOnGroup = false, // Zda zobrazit na skupinových řádcích
|
|
30
|
-
} = stateRendererParams;
|
|
31
|
-
|
|
32
|
-
// Použít nový název s fallbackem na starý pro zpětnou kompatibilitu
|
|
33
|
-
const finalColor = color || textColor || 'white';
|
|
34
|
-
const finalColorField = colorField || textColorField;
|
|
35
|
-
|
|
36
|
-
const visibleResult = React.useMemo(() =>
|
|
37
|
-
visibleGetter ? visibleGetter(data) : true,
|
|
38
|
-
[visibleGetter, data]
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
const computedBgColor = React.useMemo(() => {
|
|
42
|
-
// Priorita: bgColorField (hodnota z dat) -> bgColor (funkce nebo string)
|
|
43
|
-
if (bgColorField && data) {
|
|
44
|
-
const fieldValue = getValueByPath(data, bgColorField);
|
|
45
|
-
if (fieldValue) return fieldValue;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (!bgColor) return '#666'; // default barva
|
|
49
|
-
|
|
50
|
-
// Pokud je bgColor funkce, zavolej ji s daty
|
|
51
|
-
if (typeof bgColor === 'function') {
|
|
52
|
-
return bgColor({ data, value, props });
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Pokud je bgColor string/hodnota
|
|
56
|
-
return bgColor;
|
|
57
|
-
}, [bgColor, bgColorField, data, value, props]);
|
|
58
|
-
|
|
59
|
-
const computedTextColor = React.useMemo(() => {
|
|
60
|
-
// Priorita: colorField/textColorField (hodnota z dat) -> color/textColor (funkce nebo string)
|
|
61
|
-
if (finalColorField && data) {
|
|
62
|
-
const fieldValue = getValueByPath(data, finalColorField);
|
|
63
|
-
if (fieldValue) return fieldValue;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (!finalColor) return 'white'; // default barva
|
|
67
|
-
|
|
68
|
-
// Pokud je finalColor funkce, zavolej ji s daty
|
|
69
|
-
if (typeof finalColor === 'function') {
|
|
70
|
-
return finalColor({ data, value, props });
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Pokud je finalColor string/hodnota
|
|
74
|
-
return finalColor;
|
|
75
|
-
}, [finalColor, finalColorField, data, value, props]);
|
|
76
|
-
|
|
77
|
-
const displayText = React.useMemo(() => {
|
|
78
|
-
if (displayField) {
|
|
79
|
-
// Pokud je displayField funkce
|
|
80
|
-
if (typeof displayField === 'function') {
|
|
81
|
-
return displayField({ data, value, props });
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Pokud je displayField string (název pole)
|
|
85
|
-
if (typeof displayField === 'string') {
|
|
86
|
-
return data?.[displayField] || value;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Fallback na value
|
|
91
|
-
return value || '';
|
|
92
|
-
}, [displayField, data, value, props]);
|
|
93
|
-
|
|
94
|
-
const showCondition = React.useMemo(() => {
|
|
95
|
-
const newItem = (data && data._rh_plus_ag_grid_new_item) || false;
|
|
96
|
-
return !newItem && (showOnGroup || !!data) && visibleResult;
|
|
97
|
-
}, [data, showOnGroup, visibleResult]);
|
|
98
|
-
|
|
99
|
-
if (!showCondition) return null;
|
|
100
|
-
|
|
101
|
-
// Pokud nemáme text k zobrazení, nevrací nic
|
|
102
|
-
if (!displayText) return null;
|
|
103
|
-
|
|
104
|
-
const containerStyle = React.useMemo(() => ({
|
|
105
|
-
width: '100%',
|
|
106
|
-
display: 'flex',
|
|
107
|
-
justifyContent: cellAlign === 'center' ? 'center' : cellAlign === 'right' ? 'flex-end' : 'flex-start',
|
|
108
|
-
alignItems: 'center',
|
|
109
|
-
height: '100%',
|
|
110
|
-
}), [cellAlign]);
|
|
111
|
-
|
|
112
|
-
const badgeStyle = React.useMemo(() => ({
|
|
113
|
-
backgroundColor: computedBgColor,
|
|
114
|
-
color: computedTextColor,
|
|
115
|
-
borderRadius: '20px',
|
|
116
|
-
padding: '2px 8px',
|
|
117
|
-
minWidth: `${minWidth}px`,
|
|
118
|
-
fontSize: `${fontSize}px`,
|
|
119
|
-
fontWeight: '500',
|
|
120
|
-
textAlign: 'center',
|
|
121
|
-
display: 'inline-block',
|
|
122
|
-
whiteSpace: 'nowrap',
|
|
123
|
-
overflow: 'hidden',
|
|
124
|
-
textOverflow: 'ellipsis',
|
|
125
|
-
boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',
|
|
126
|
-
lineHeight: '1.2',
|
|
127
|
-
height: 'auto',
|
|
128
|
-
}), [computedBgColor, computedTextColor, minWidth, fontSize]);
|
|
129
|
-
|
|
130
|
-
return (
|
|
131
|
-
<div style={containerStyle}>
|
|
132
|
-
<span style={badgeStyle}>
|
|
133
|
-
{displayText}
|
|
134
|
-
</span>
|
|
135
|
-
</div>
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// React.memo optimalizace pro AG-Grid renderer
|
|
140
|
-
// ✅ PERFORMANCE FIX: colDef NESMÍ být v kritických props!
|
|
141
|
-
const arePropsEqual = createMemoComparison(
|
|
142
|
-
['value', 'data'],
|
|
143
|
-
['colDef'],
|
|
144
|
-
false,
|
|
145
|
-
'StateRenderer'
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
export default React.memo(StateRenderer, arePropsEqual);
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { createMemoComparison } from '@bit.rhplus/react-memo';
|
|
4
|
+
|
|
5
|
+
// Helper function moved outside component
|
|
6
|
+
function getValueByPath(obj, path) {
|
|
7
|
+
if (!obj || !path) return null;
|
|
8
|
+
return path.split('.').reduce((o, k) => (o && o[k] !== undefined) ? o[k] : null, obj);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function StateRenderer(props) {
|
|
12
|
+
const { data, value, colDef: { stateRendererParams = {} } = {} } = props;
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
if (!stateRendererParams) return null;
|
|
16
|
+
|
|
17
|
+
const {
|
|
18
|
+
visibleGetter = () => true,
|
|
19
|
+
cellAlign = 'center',
|
|
20
|
+
bgColor, // Barva pozadí nebo funkce vracející barvu
|
|
21
|
+
color, // Barva textu nebo funkce vracející barvu (nový název)
|
|
22
|
+
textColor, // Barva textu (starý název - zpětná kompatibilita)
|
|
23
|
+
bgColorField, // Název pole obsahujícího barvu pozadí
|
|
24
|
+
colorField, // Název pole obsahujícího barvu textu (nový název)
|
|
25
|
+
textColorField, // Název pole obsahujícího barvu textu (starý název - zpětná kompatibilita)
|
|
26
|
+
displayField, // Pole pro zobrazení textu
|
|
27
|
+
minWidth = 80, // Minimální šířka kruhového pozadí
|
|
28
|
+
fontSize = 12, // Velikost fontu
|
|
29
|
+
showOnGroup = false, // Zda zobrazit na skupinových řádcích
|
|
30
|
+
} = stateRendererParams;
|
|
31
|
+
|
|
32
|
+
// Použít nový název s fallbackem na starý pro zpětnou kompatibilitu
|
|
33
|
+
const finalColor = color || textColor || 'white';
|
|
34
|
+
const finalColorField = colorField || textColorField;
|
|
35
|
+
|
|
36
|
+
const visibleResult = React.useMemo(() =>
|
|
37
|
+
visibleGetter ? visibleGetter(data) : true,
|
|
38
|
+
[visibleGetter, data]
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const computedBgColor = React.useMemo(() => {
|
|
42
|
+
// Priorita: bgColorField (hodnota z dat) -> bgColor (funkce nebo string)
|
|
43
|
+
if (bgColorField && data) {
|
|
44
|
+
const fieldValue = getValueByPath(data, bgColorField);
|
|
45
|
+
if (fieldValue) return fieldValue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (!bgColor) return '#666'; // default barva
|
|
49
|
+
|
|
50
|
+
// Pokud je bgColor funkce, zavolej ji s daty
|
|
51
|
+
if (typeof bgColor === 'function') {
|
|
52
|
+
return bgColor({ data, value, props });
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Pokud je bgColor string/hodnota
|
|
56
|
+
return bgColor;
|
|
57
|
+
}, [bgColor, bgColorField, data, value, props]);
|
|
58
|
+
|
|
59
|
+
const computedTextColor = React.useMemo(() => {
|
|
60
|
+
// Priorita: colorField/textColorField (hodnota z dat) -> color/textColor (funkce nebo string)
|
|
61
|
+
if (finalColorField && data) {
|
|
62
|
+
const fieldValue = getValueByPath(data, finalColorField);
|
|
63
|
+
if (fieldValue) return fieldValue;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!finalColor) return 'white'; // default barva
|
|
67
|
+
|
|
68
|
+
// Pokud je finalColor funkce, zavolej ji s daty
|
|
69
|
+
if (typeof finalColor === 'function') {
|
|
70
|
+
return finalColor({ data, value, props });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Pokud je finalColor string/hodnota
|
|
74
|
+
return finalColor;
|
|
75
|
+
}, [finalColor, finalColorField, data, value, props]);
|
|
76
|
+
|
|
77
|
+
const displayText = React.useMemo(() => {
|
|
78
|
+
if (displayField) {
|
|
79
|
+
// Pokud je displayField funkce
|
|
80
|
+
if (typeof displayField === 'function') {
|
|
81
|
+
return displayField({ data, value, props });
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Pokud je displayField string (název pole)
|
|
85
|
+
if (typeof displayField === 'string') {
|
|
86
|
+
return data?.[displayField] || value;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Fallback na value
|
|
91
|
+
return value || '';
|
|
92
|
+
}, [displayField, data, value, props]);
|
|
93
|
+
|
|
94
|
+
const showCondition = React.useMemo(() => {
|
|
95
|
+
const newItem = (data && data._rh_plus_ag_grid_new_item) || false;
|
|
96
|
+
return !newItem && (showOnGroup || !!data) && visibleResult;
|
|
97
|
+
}, [data, showOnGroup, visibleResult]);
|
|
98
|
+
|
|
99
|
+
if (!showCondition) return null;
|
|
100
|
+
|
|
101
|
+
// Pokud nemáme text k zobrazení, nevrací nic
|
|
102
|
+
if (!displayText) return null;
|
|
103
|
+
|
|
104
|
+
const containerStyle = React.useMemo(() => ({
|
|
105
|
+
width: '100%',
|
|
106
|
+
display: 'flex',
|
|
107
|
+
justifyContent: cellAlign === 'center' ? 'center' : cellAlign === 'right' ? 'flex-end' : 'flex-start',
|
|
108
|
+
alignItems: 'center',
|
|
109
|
+
height: '100%',
|
|
110
|
+
}), [cellAlign]);
|
|
111
|
+
|
|
112
|
+
const badgeStyle = React.useMemo(() => ({
|
|
113
|
+
backgroundColor: computedBgColor,
|
|
114
|
+
color: computedTextColor,
|
|
115
|
+
borderRadius: '20px',
|
|
116
|
+
padding: '2px 8px',
|
|
117
|
+
minWidth: `${minWidth}px`,
|
|
118
|
+
fontSize: `${fontSize}px`,
|
|
119
|
+
fontWeight: '500',
|
|
120
|
+
textAlign: 'center',
|
|
121
|
+
display: 'inline-block',
|
|
122
|
+
whiteSpace: 'nowrap',
|
|
123
|
+
overflow: 'hidden',
|
|
124
|
+
textOverflow: 'ellipsis',
|
|
125
|
+
boxShadow: '0 1px 3px rgba(0, 0, 0, 0.1)',
|
|
126
|
+
lineHeight: '1.2',
|
|
127
|
+
height: 'auto',
|
|
128
|
+
}), [computedBgColor, computedTextColor, minWidth, fontSize]);
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<div style={containerStyle}>
|
|
132
|
+
<span style={badgeStyle}>
|
|
133
|
+
{displayText}
|
|
134
|
+
</span>
|
|
135
|
+
</div>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// React.memo optimalizace pro AG-Grid renderer
|
|
140
|
+
// ✅ PERFORMANCE FIX: colDef NESMÍ být v kritických props!
|
|
141
|
+
const arePropsEqual = createMemoComparison(
|
|
142
|
+
['value', 'data'],
|
|
143
|
+
['colDef'],
|
|
144
|
+
false,
|
|
145
|
+
'StateRenderer'
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
export default React.memo(StateRenderer, arePropsEqual);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {default as SelectCellRenderer} from './SelectCellRenderer';
|
|
@@ -8,41 +8,41 @@ import 'dayjs/locale/cs';
|
|
|
8
8
|
import styled from 'styled-components';
|
|
9
9
|
import Holidays from 'date-holidays';
|
|
10
10
|
dayjs.locale('cs');
|
|
11
|
-
const CalendarContainer = styled.div `
|
|
12
|
-
display: flex;
|
|
13
|
-
gap: 8px;
|
|
14
|
-
margin-bottom: 12px;
|
|
15
|
-
width: 900px;
|
|
16
|
-
justify-content: space-between;
|
|
17
|
-
|
|
18
|
-
.ant-picker-calendar {
|
|
19
|
-
max-width: 260px;
|
|
20
|
-
flex: 1;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.ant-picker-calendar-header {
|
|
24
|
-
padding: 8px 12px;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.ant-picker-cell-selected .ant-picker-cell-inner {
|
|
28
|
-
background: transparent !important;
|
|
29
|
-
color: inherit !important;
|
|
30
|
-
font-weight: normal !important;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.ant-picker-cell-disabled {
|
|
34
|
-
pointer-events: none;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.ant-picker-cell-disabled .ant-picker-cell-inner {
|
|
38
|
-
color: rgba(0, 0, 0, 0.25) !important;
|
|
39
|
-
background: transparent !important;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.ant-picker-cell:not(.ant-picker-cell-in-view) .ant-picker-cell-inner {
|
|
43
|
-
color: rgba(0, 0, 0, 0.25) !important;
|
|
44
|
-
background: transparent !important;
|
|
45
|
-
}
|
|
11
|
+
const CalendarContainer = styled.div `
|
|
12
|
+
display: flex;
|
|
13
|
+
gap: 8px;
|
|
14
|
+
margin-bottom: 12px;
|
|
15
|
+
width: 900px;
|
|
16
|
+
justify-content: space-between;
|
|
17
|
+
|
|
18
|
+
.ant-picker-calendar {
|
|
19
|
+
max-width: 260px;
|
|
20
|
+
flex: 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ant-picker-calendar-header {
|
|
24
|
+
padding: 8px 12px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ant-picker-cell-selected .ant-picker-cell-inner {
|
|
28
|
+
background: transparent !important;
|
|
29
|
+
color: inherit !important;
|
|
30
|
+
font-weight: normal !important;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.ant-picker-cell-disabled {
|
|
34
|
+
pointer-events: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.ant-picker-cell-disabled .ant-picker-cell-inner {
|
|
38
|
+
color: rgba(0, 0, 0, 0.25) !important;
|
|
39
|
+
background: transparent !important;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.ant-picker-cell:not(.ant-picker-cell-in-view) .ant-picker-cell-inner {
|
|
43
|
+
color: rgba(0, 0, 0, 0.25) !important;
|
|
44
|
+
background: transparent !important;
|
|
45
|
+
}
|
|
46
46
|
`;
|
|
47
47
|
const BulkEditDatePicker = ({ value, onChange, onSubmit, onCancel, loading, format = 'DD.MM.YYYY', showTime = false, }) => {
|
|
48
48
|
const today = dayjs();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export default DatePickerEditor;
|
|
2
|
+
/**
|
|
3
|
+
* DatePickerEditor - AG Grid cell editor s Ant Design DatePicker
|
|
4
|
+
* Automaticky se otevře při vstupu do editačního módu
|
|
5
|
+
* Podporuje formátování data a validaci
|
|
6
|
+
* Správně ukládá hodnotu při zavření pickeru nebo přechodu na jinou buňku
|
|
7
|
+
*/
|
|
8
|
+
declare const DatePickerEditor: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
|
|
9
|
+
import React from 'react';
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
import React, { useState, useEffect } from 'react';
|
|
4
|
+
import { default as DatePicker } from 'antd/es/date-picker';
|
|
5
|
+
import { useGridCellEditor } from 'ag-grid-react';
|
|
6
|
+
import dayjs from 'dayjs';
|
|
7
|
+
/**
|
|
8
|
+
* DatePickerEditor - AG Grid cell editor s Ant Design DatePicker
|
|
9
|
+
* Automaticky se otevře při vstupu do editačního módu
|
|
10
|
+
* Podporuje formátování data a validaci
|
|
11
|
+
* Správně ukládá hodnotu při zavření pickeru nebo přechodu na jinou buňku
|
|
12
|
+
*/
|
|
13
|
+
const DatePickerEditor = React.forwardRef(({ value, initialValue, onValueChange, stopEditing, format = 'DD.MM.YYYY' }, ref) => {
|
|
14
|
+
const [dateValue, setDateValue] = useState(value ? dayjs(value) : null);
|
|
15
|
+
const [open, setOpen] = useState(false);
|
|
16
|
+
// Expose getValue method to AG Grid - nutné pro správné uložení hodnoty
|
|
17
|
+
React.useImperativeHandle(ref, () => ({
|
|
18
|
+
getValue: () => {
|
|
19
|
+
return dateValue ? dateValue.toISOString() : null;
|
|
20
|
+
}
|
|
21
|
+
}));
|
|
22
|
+
// AG-Grid callback - zrušit editaci pokud se hodnota nezměnila
|
|
23
|
+
useGridCellEditor({
|
|
24
|
+
isCancelAfterEnd: () => {
|
|
25
|
+
return !dateValue || (initialValue && dateValue.isSame(dayjs(initialValue)));
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// Auto-open picker při mount
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
setOpen(true);
|
|
31
|
+
}, []);
|
|
32
|
+
const handleChange = (newDate) => {
|
|
33
|
+
setDateValue(newDate);
|
|
34
|
+
if (onValueChange) {
|
|
35
|
+
onValueChange(newDate ? newDate.toISOString() : null);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const handleOk = () => {
|
|
39
|
+
stopEditing();
|
|
40
|
+
};
|
|
41
|
+
const handleOpenChange = (newOpen) => {
|
|
42
|
+
setOpen(newOpen);
|
|
43
|
+
// Když se picker zavře (uživatel klikl mimo), ukončíme editaci
|
|
44
|
+
if (!newOpen) {
|
|
45
|
+
// Malé zpoždění aby se hodnota stihla uložit
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
stopEditing();
|
|
48
|
+
}, 0);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
return (_jsx(DatePicker, { value: dateValue, onChange: handleChange, onOk: handleOk, format: format, style: { width: '100%' }, open: open, onOpenChange: handleOpenChange, autoFocus: true }));
|
|
52
|
+
});
|
|
53
|
+
DatePickerEditor.displayName = 'DatePickerEditor';
|
|
54
|
+
export default DatePickerEditor;
|
|
55
|
+
//# sourceMappingURL=DatePickerEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerEditor.js","sourceRoot":"","sources":["../../Editors/DatePickerEditor.jsx"],"names":[],"mappings":";AAAA,oBAAoB;AACpB,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE;IAC5H,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,wEAAwE;IACxE,KAAK,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACpC,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,+DAA+D;IAC/D,iBAAiB,CAAC;QAChB,gBAAgB,EAAE,GAAG,EAAE;YACrB,OAAO,CAAC,SAAS,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/E,CAAC;KACF,CAAC,CAAC;IAEH,6BAA6B;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,EAAE;QAC/B,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,WAAW,EAAE,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,EAAE;QACnC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,+DAA+D;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,6CAA6C;YAC7C,UAAU,CAAC,GAAG,EAAE;gBACd,WAAW,EAAE,CAAC;YAChB,CAAC,EAAE,CAAC,CAAC,CAAC;QACR,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,KAAC,UAAU,IACT,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EACxB,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,gBAAgB,EAC9B,SAAS,SACT,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAElD,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as DatePickerEditor } from "./DatePickerEditor";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../Editors/index.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import * as LucideIcons from 'lucide-react';
|
|
4
|
+
export default ({ value }) => {
|
|
5
|
+
if (value == null)
|
|
6
|
+
return null;
|
|
7
|
+
const { name, icon } = value;
|
|
8
|
+
// Přímý přístup ke komponentě ikony
|
|
9
|
+
const Icon = icon && LucideIcons[icon] ? LucideIcons[icon] : null;
|
|
10
|
+
return (_jsxs("div", { style: {
|
|
11
|
+
display: 'flex',
|
|
12
|
+
alignItems: 'center',
|
|
13
|
+
gap: '8px',
|
|
14
|
+
overflow: 'hidden',
|
|
15
|
+
textOverflow: 'ellipsis'
|
|
16
|
+
}, children: [Icon && _jsx(Icon, { size: 16 }), _jsx("span", { style: { overflow: 'hidden', textOverflow: 'ellipsis' }, children: name })] }));
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=SelectCellRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectCellRenderer.js","sourceRoot":"","sources":["../../Renderers/SelectCellRenderer.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;AAE5C,eAAe,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE;IACvB,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,EAAC,IAAI,EAAE,IAAI,EAAC,GAAG,KAAK,CAAC;IAE3B,oCAAoC;IACpC,MAAM,IAAI,GAAG,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAElE,OAAO,CACH,eAAK,KAAK,EAAE;YACR,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,GAAG,EAAE,KAAK;YACV,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,UAAU;SAC3B,aACI,IAAI,IAAI,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,EAC3B,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,YACxD,IAAI,GACF,IACL,CACT,CAAA;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as SelectCellRenderer } from "./SelectCellRenderer";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../Renderers/index.jsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,sBAAsB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
declare const _default: React.NamedExoticComponent<React.RefAttributes<any>>;
|
|
2
2
|
export default _default;
|
|
3
3
|
export { default as CheckboxRenderer } from "./Renderers/CheckboxRenderer";
|
|
4
|
+
export * from "./Renderers";
|
|
5
|
+
export * from "./Editors";
|
|
4
6
|
import * as React from 'react';
|
|
5
7
|
export { useBulkCellEdit, BulkEditButton, BulkEditPopover, BulkEditSelect, BulkEditDatePicker, BulkEditModule, BulkEditInput } from "./BulkEdit";
|
package/dist/index.js
CHANGED
|
@@ -740,6 +740,7 @@ const AgGrid = React.forwardRef((props, ref) => {
|
|
|
740
740
|
allGridPropsRef.current.gridId = props.gridId;
|
|
741
741
|
allGridPropsRef.current.id = props.id;
|
|
742
742
|
allGridPropsRef.current.gridName = props.gridName;
|
|
743
|
+
allGridPropsRef.current.getContextMenuItems = props.getContextMenuItems;
|
|
743
744
|
// ✅ Detekovat změny které VYŽADUJÍ re-render AG Gridu
|
|
744
745
|
React.useEffect(() => {
|
|
745
746
|
const rowDataChanged = prevRowDataRef.current !== props.rowData;
|
|
@@ -796,4 +797,6 @@ export default React.memo(AgGrid, createGridComparison(process.env.NODE_ENV !==
|
|
|
796
797
|
));
|
|
797
798
|
export { useBulkCellEdit, BulkEditButton, BulkEditPopover, BulkEditSelect, BulkEditDatePicker, BulkEditModule, BulkEditInput } from './BulkEdit';
|
|
798
799
|
export { default as CheckboxRenderer } from './Renderers/CheckboxRenderer';
|
|
800
|
+
export * from './Renderers';
|
|
801
|
+
export * from './Editors';
|
|
799
802
|
//# sourceMappingURL=index.js.map
|