@bit.rhplus/ui.grid 0.0.11 → 0.0.12
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/AgGridColumns.js +2 -7
- package/ColumnBuilder.jsx +106 -15
- package/dist/AgGridColumns.js +2 -7
- package/dist/AgGridColumns.js.map +1 -1
- package/dist/ColumnBuilder.d.ts +8 -11
- package/dist/ColumnBuilder.js +97 -13
- package/dist/ColumnBuilder.js.map +1 -1
- package/dist/index.js +112 -7
- package/dist/index.js.map +1 -1
- package/index.jsx +153 -16
- package/package.json +5 -4
- /package/dist/{preview-1741295560948.js → preview-1742309881548.js} +0 -0
package/AgGridColumns.js
CHANGED
|
@@ -22,12 +22,8 @@ export const AgGridColumn = (column) => {
|
|
|
22
22
|
React.useEffect(() => {
|
|
23
23
|
const loadComponent = async () => {
|
|
24
24
|
if (column.contentTooltip) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
setTooltipComponent(() => module); // Nastavení komponenty
|
|
28
|
-
} catch (error) {
|
|
29
|
-
console.error('Chyba při načítání tooltip komponenty2:', error);
|
|
30
|
-
}
|
|
25
|
+
const module = InvokeTooltip(column.contentTooltip);
|
|
26
|
+
setTooltipComponent(() => module); // Nastavení komponenty
|
|
31
27
|
}
|
|
32
28
|
};
|
|
33
29
|
|
|
@@ -49,7 +45,6 @@ export const AgGridColumns = (columnDefs, options) => {
|
|
|
49
45
|
const resolvedColumnDefs = columnDefs instanceof ColumnBuilder && typeof columnDefs.build === 'function'
|
|
50
46
|
? columnDefs.build()
|
|
51
47
|
: columnDefs;
|
|
52
|
-
|
|
53
48
|
const cols = resolvedColumnDefs && resolvedColumnDefs.map((column) => AgGridColumn(column, options));
|
|
54
49
|
return cols;
|
|
55
50
|
};
|
package/ColumnBuilder.jsx
CHANGED
|
@@ -17,7 +17,7 @@ class ColumnBuilder {
|
|
|
17
17
|
return this;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
addCurrencyColumn({currency, position, currencyStyle, cellAlign = 'right', ...restProps}) {
|
|
20
|
+
addCurrencyColumn({currency, position, currencyStyle, cellAlign = 'right', editable, ...restProps}) {
|
|
21
21
|
const cellRenderer = (params) => {
|
|
22
22
|
const currencyValue = typeof currency === 'function' ? currency(params) : currency;
|
|
23
23
|
const symbol = currencySymbols[currencyValue] || currencyValue;
|
|
@@ -42,45 +42,136 @@ class ColumnBuilder {
|
|
|
42
42
|
);
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
this.#addPreparedColumn({
|
|
45
|
+
this.#addPreparedColumn({
|
|
46
|
+
cellAlign,
|
|
47
|
+
cellRenderer,
|
|
48
|
+
editable: this.#resolveEditable(editable),
|
|
49
|
+
...restProps
|
|
50
|
+
});
|
|
46
51
|
return this;
|
|
47
52
|
}
|
|
48
53
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
addDateColumn({dateFormat = "DD.MM.YYYY", editable, ...restProps}) {
|
|
55
|
+
this.#addPreparedColumn({
|
|
56
|
+
dateRenderer: dateFormat,
|
|
57
|
+
editable: this.#resolveEditable(editable),
|
|
58
|
+
...restProps
|
|
59
|
+
});
|
|
52
60
|
return this;
|
|
53
61
|
}
|
|
54
62
|
|
|
55
|
-
addObjectColumn({contentTooltip, tooltipField, tooltipInteraction, tooltipShowDelay = 100, ...restProps}) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
// addObjectColumn({contentTooltip, tooltipField, tooltipInteraction, tooltipShowDelay = 100, editable, onEditClick, ...restProps}) {
|
|
64
|
+
// const cellRenderer = (params) => {
|
|
65
|
+
// const [isHovered, setIsHovered] = React.useState(false);
|
|
66
|
+
|
|
67
|
+
// const handleMouseEnter = () => {
|
|
68
|
+
// setIsHovered(true);
|
|
69
|
+
// };
|
|
70
|
+
|
|
71
|
+
// const handleMouseLeave = () => {
|
|
72
|
+
// setIsHovered(false);
|
|
73
|
+
// };
|
|
74
|
+
|
|
75
|
+
// const handleEditClick = (event) => {
|
|
76
|
+
// event.stopPropagation();
|
|
77
|
+
// if (onEditClick) {
|
|
78
|
+
// onEditClick(params);
|
|
79
|
+
// }
|
|
80
|
+
// };
|
|
81
|
+
|
|
82
|
+
// return (
|
|
83
|
+
// <div
|
|
84
|
+
// className="object-cell-container"
|
|
85
|
+
// style={{
|
|
86
|
+
// position: 'relative',
|
|
87
|
+
// width: '100%',
|
|
88
|
+
// height: '100%',
|
|
89
|
+
// display: 'flex',
|
|
90
|
+
// alignItems: 'center'
|
|
91
|
+
// }}
|
|
92
|
+
// onMouseEnter={handleMouseEnter}
|
|
93
|
+
// onMouseLeave={handleMouseLeave}
|
|
94
|
+
// >
|
|
95
|
+
// <div style={{ flexGrow: 1 }}>
|
|
96
|
+
// {params.value}
|
|
97
|
+
// </div>
|
|
98
|
+
// {isHovered && editable && (
|
|
99
|
+
// <button
|
|
100
|
+
// className="edit-object-button"
|
|
101
|
+
// style={{
|
|
102
|
+
// position: 'absolute',
|
|
103
|
+
// right: '4px',
|
|
104
|
+
// background: 'transparent',
|
|
105
|
+
// border: 'none',
|
|
106
|
+
// cursor: 'pointer',
|
|
107
|
+
// padding: '4px',
|
|
108
|
+
// display: 'flex',
|
|
109
|
+
// alignItems: 'center',
|
|
110
|
+
// justifyContent: 'center'
|
|
111
|
+
// }}
|
|
112
|
+
// onClick={handleEditClick}
|
|
113
|
+
// title="Upravit"
|
|
114
|
+
// >
|
|
115
|
+
// <span style={{ fontSize: '16px' }}>⋮</span>
|
|
116
|
+
// </button>
|
|
117
|
+
// )}
|
|
118
|
+
// </div>
|
|
119
|
+
// );
|
|
120
|
+
// };
|
|
121
|
+
|
|
122
|
+
// this.#addPreparedColumn({
|
|
123
|
+
// contentTooltip,
|
|
124
|
+
// tooltipField,
|
|
125
|
+
// tooltipInteraction,
|
|
126
|
+
// tooltipShowDelay,
|
|
127
|
+
// cellRenderer,
|
|
128
|
+
// editable: this.#resolveEditable(editable),
|
|
129
|
+
// ...restProps
|
|
130
|
+
// });
|
|
131
|
+
// return this;
|
|
132
|
+
// }
|
|
133
|
+
|
|
134
|
+
addBooleanColumn({visibleFalse = true, visibleTrue = true, cellAlign, visibleGetter = () => true, editable, ...restProps}) {
|
|
61
135
|
const booleanRendererParams = {
|
|
62
136
|
cellAlign,
|
|
63
137
|
visibleFalse,
|
|
64
138
|
visibleTrue,
|
|
65
139
|
visibleGetter
|
|
66
140
|
}
|
|
67
|
-
this.#addPreparedColumn({
|
|
141
|
+
this.#addPreparedColumn({
|
|
142
|
+
booleanRenderer: true,
|
|
143
|
+
booleanRendererParams,
|
|
144
|
+
editable: this.#resolveEditable(editable),
|
|
145
|
+
...restProps
|
|
146
|
+
});
|
|
68
147
|
|
|
69
148
|
return this;
|
|
70
149
|
}
|
|
71
150
|
|
|
72
|
-
addButtonColumn({buttons, visibleGetter = () => true, ...restProps}) {
|
|
151
|
+
addButtonColumn({buttons, visibleGetter = () => true, editable, ...restProps}) {
|
|
73
152
|
const buttonRendererParams = {
|
|
74
153
|
buttons,
|
|
75
154
|
visibleGetter
|
|
76
155
|
}
|
|
77
|
-
this.#addPreparedColumn({
|
|
156
|
+
this.#addPreparedColumn({
|
|
157
|
+
buttonRenderer: true,
|
|
158
|
+
buttonRendererParams,
|
|
159
|
+
editable: this.#resolveEditable(editable),
|
|
160
|
+
...restProps
|
|
161
|
+
})
|
|
78
162
|
return this;
|
|
79
163
|
}
|
|
80
164
|
|
|
165
|
+
// Pomocná metoda pro správné nastavení editable vlastnosti
|
|
166
|
+
#resolveEditable(editable) {
|
|
167
|
+
if (!editable)
|
|
168
|
+
return false;
|
|
169
|
+
return editable;
|
|
170
|
+
}
|
|
171
|
+
|
|
81
172
|
build() {
|
|
82
173
|
return this.columns;
|
|
83
174
|
}
|
|
84
175
|
}
|
|
85
176
|
|
|
86
|
-
export default ColumnBuilder;
|
|
177
|
+
export default ColumnBuilder;
|
package/dist/AgGridColumns.js
CHANGED
|
@@ -18,13 +18,8 @@ export const AgGridColumn = (column) => {
|
|
|
18
18
|
React.useEffect(() => {
|
|
19
19
|
const loadComponent = async () => {
|
|
20
20
|
if (column.contentTooltip) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
setTooltipComponent(() => module); // Nastavení komponenty
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
console.error('Chyba při načítání tooltip komponenty2:', error);
|
|
27
|
-
}
|
|
21
|
+
const module = InvokeTooltip(column.contentTooltip);
|
|
22
|
+
setTooltipComponent(() => module); // Nastavení komponenty
|
|
28
23
|
}
|
|
29
24
|
};
|
|
30
25
|
loadComponent();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgGridColumns.js","sourceRoot":"","sources":["../AgGridColumns.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM;CACb,CAAA;AAED,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE;IACrC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErE,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,EAAE;QACvC,QAAQ,cAAc,EAAE,CAAC;YACvB,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO,OAAO,CAAC,IAAI,CAAC;YACtB;gBACE,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAA;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,
|
|
1
|
+
{"version":3,"file":"AgGridColumns.js","sourceRoot":"","sources":["../AgGridColumns.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,OAAO,MAAM,YAAY,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM;CACb,CAAA;AAED,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,EAAE;IACrC,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAErE,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,EAAE;QACvC,QAAQ,cAAc,EAAE,CAAC;YACvB,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO,OAAO,CAAC,IAAI,CAAC;YACtB;gBACE,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAA;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBACpD,mBAAmB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB;YAC5D,CAAC;QACH,CAAC,CAAC;QAEF,aAAa,EAAE,CAAC;IAClB,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IAE5B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,gBAAgB,EAAE,CAAC;YACrB,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,uBAAuB;QACrE,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/B,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE;IACnD,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,kBAAkB,GAAG,UAAU,YAAY,aAAa,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU;QACtG,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE;QACpB,CAAC,CAAC,UAAU,CAAC;IACf,MAAM,IAAI,GAAG,kBAAkB,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrG,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
package/dist/ColumnBuilder.d.ts
CHANGED
|
@@ -4,35 +4,32 @@ declare class ColumnBuilder {
|
|
|
4
4
|
columns: any[];
|
|
5
5
|
intl: any;
|
|
6
6
|
addColumn(props: any): this;
|
|
7
|
-
addCurrencyColumn({ currency, position, currencyStyle, cellAlign, ...restProps }: {
|
|
7
|
+
addCurrencyColumn({ currency, position, currencyStyle, cellAlign, editable, ...restProps }: {
|
|
8
8
|
[x: string]: any;
|
|
9
9
|
currency: any;
|
|
10
10
|
position: any;
|
|
11
11
|
currencyStyle: any;
|
|
12
12
|
cellAlign?: string | undefined;
|
|
13
|
+
editable: any;
|
|
13
14
|
}): this;
|
|
14
|
-
addDateColumn({ dateFormat, ...restProps }: {
|
|
15
|
+
addDateColumn({ dateFormat, editable, ...restProps }: {
|
|
15
16
|
[x: string]: any;
|
|
16
17
|
dateFormat?: string | undefined;
|
|
18
|
+
editable: any;
|
|
17
19
|
}): this;
|
|
18
|
-
|
|
19
|
-
[x: string]: any;
|
|
20
|
-
contentTooltip: any;
|
|
21
|
-
tooltipField: any;
|
|
22
|
-
tooltipInteraction: any;
|
|
23
|
-
tooltipShowDelay?: number | undefined;
|
|
24
|
-
}): this;
|
|
25
|
-
addBooleanColumn({ visibleFalse, visibleTrue, cellAlign, visibleGetter, ...restProps }: {
|
|
20
|
+
addBooleanColumn({ visibleFalse, visibleTrue, cellAlign, visibleGetter, editable, ...restProps }: {
|
|
26
21
|
[x: string]: any;
|
|
27
22
|
visibleFalse?: boolean | undefined;
|
|
28
23
|
visibleTrue?: boolean | undefined;
|
|
29
24
|
cellAlign: any;
|
|
30
25
|
visibleGetter?: (() => boolean) | undefined;
|
|
26
|
+
editable: any;
|
|
31
27
|
}): this;
|
|
32
|
-
addButtonColumn({ buttons, visibleGetter, ...restProps }: {
|
|
28
|
+
addButtonColumn({ buttons, visibleGetter, editable, ...restProps }: {
|
|
33
29
|
[x: string]: any;
|
|
34
30
|
buttons: any;
|
|
35
31
|
visibleGetter?: (() => boolean) | undefined;
|
|
32
|
+
editable: any;
|
|
36
33
|
}): this;
|
|
37
34
|
build(): any[];
|
|
38
35
|
#private;
|
package/dist/ColumnBuilder.js
CHANGED
|
@@ -3,7 +3,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var _ColumnBuilder_instances, _ColumnBuilder_addPreparedColumn;
|
|
6
|
+
var _ColumnBuilder_instances, _ColumnBuilder_addPreparedColumn, _ColumnBuilder_resolveEditable;
|
|
7
7
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
8
|
import * as React from 'react';
|
|
9
9
|
import { prepareColDef } from './utils';
|
|
@@ -18,7 +18,7 @@ class ColumnBuilder {
|
|
|
18
18
|
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, props);
|
|
19
19
|
return this;
|
|
20
20
|
}
|
|
21
|
-
addCurrencyColumn({ currency, position, currencyStyle, cellAlign = 'right', ...restProps }) {
|
|
21
|
+
addCurrencyColumn({ currency, position, currencyStyle, cellAlign = 'right', editable, ...restProps }) {
|
|
22
22
|
const cellRenderer = (params) => {
|
|
23
23
|
const currencyValue = typeof currency === 'function' ? currency(params) : currency;
|
|
24
24
|
const symbol = currencySymbols[currencyValue] || currencyValue;
|
|
@@ -27,33 +27,113 @@ class ColumnBuilder {
|
|
|
27
27
|
const style = typeof currencyStyle === 'function' ? currencyStyle(params) : currencyStyle;
|
|
28
28
|
return (_jsx("span", { children: position === 'left' ? (_jsxs(_Fragment, { children: [_jsx("span", { style: style, children: symbol }), " ", value] })) : (_jsxs(_Fragment, { children: [value, " ", _jsx("span", { style: style, children: symbol })] })) }));
|
|
29
29
|
};
|
|
30
|
-
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
31
|
+
cellAlign,
|
|
32
|
+
cellRenderer,
|
|
33
|
+
editable: __classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_resolveEditable).call(this, editable),
|
|
34
|
+
...restProps
|
|
35
|
+
});
|
|
35
36
|
return this;
|
|
36
37
|
}
|
|
37
|
-
|
|
38
|
-
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
38
|
+
addDateColumn({ dateFormat = "DD.MM.YYYY", editable, ...restProps }) {
|
|
39
|
+
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
40
|
+
dateRenderer: dateFormat,
|
|
41
|
+
editable: __classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_resolveEditable).call(this, editable),
|
|
42
|
+
...restProps
|
|
43
|
+
});
|
|
39
44
|
return this;
|
|
40
45
|
}
|
|
41
|
-
|
|
46
|
+
// addObjectColumn({contentTooltip, tooltipField, tooltipInteraction, tooltipShowDelay = 100, editable, onEditClick, ...restProps}) {
|
|
47
|
+
// const cellRenderer = (params) => {
|
|
48
|
+
// const [isHovered, setIsHovered] = React.useState(false);
|
|
49
|
+
// const handleMouseEnter = () => {
|
|
50
|
+
// setIsHovered(true);
|
|
51
|
+
// };
|
|
52
|
+
// const handleMouseLeave = () => {
|
|
53
|
+
// setIsHovered(false);
|
|
54
|
+
// };
|
|
55
|
+
// const handleEditClick = (event) => {
|
|
56
|
+
// event.stopPropagation();
|
|
57
|
+
// if (onEditClick) {
|
|
58
|
+
// onEditClick(params);
|
|
59
|
+
// }
|
|
60
|
+
// };
|
|
61
|
+
// return (
|
|
62
|
+
// <div
|
|
63
|
+
// className="object-cell-container"
|
|
64
|
+
// style={{
|
|
65
|
+
// position: 'relative',
|
|
66
|
+
// width: '100%',
|
|
67
|
+
// height: '100%',
|
|
68
|
+
// display: 'flex',
|
|
69
|
+
// alignItems: 'center'
|
|
70
|
+
// }}
|
|
71
|
+
// onMouseEnter={handleMouseEnter}
|
|
72
|
+
// onMouseLeave={handleMouseLeave}
|
|
73
|
+
// >
|
|
74
|
+
// <div style={{ flexGrow: 1 }}>
|
|
75
|
+
// {params.value}
|
|
76
|
+
// </div>
|
|
77
|
+
// {isHovered && editable && (
|
|
78
|
+
// <button
|
|
79
|
+
// className="edit-object-button"
|
|
80
|
+
// style={{
|
|
81
|
+
// position: 'absolute',
|
|
82
|
+
// right: '4px',
|
|
83
|
+
// background: 'transparent',
|
|
84
|
+
// border: 'none',
|
|
85
|
+
// cursor: 'pointer',
|
|
86
|
+
// padding: '4px',
|
|
87
|
+
// display: 'flex',
|
|
88
|
+
// alignItems: 'center',
|
|
89
|
+
// justifyContent: 'center'
|
|
90
|
+
// }}
|
|
91
|
+
// onClick={handleEditClick}
|
|
92
|
+
// title="Upravit"
|
|
93
|
+
// >
|
|
94
|
+
// <span style={{ fontSize: '16px' }}>⋮</span>
|
|
95
|
+
// </button>
|
|
96
|
+
// )}
|
|
97
|
+
// </div>
|
|
98
|
+
// );
|
|
99
|
+
// };
|
|
100
|
+
// this.#addPreparedColumn({
|
|
101
|
+
// contentTooltip,
|
|
102
|
+
// tooltipField,
|
|
103
|
+
// tooltipInteraction,
|
|
104
|
+
// tooltipShowDelay,
|
|
105
|
+
// cellRenderer,
|
|
106
|
+
// editable: this.#resolveEditable(editable),
|
|
107
|
+
// ...restProps
|
|
108
|
+
// });
|
|
109
|
+
// return this;
|
|
110
|
+
// }
|
|
111
|
+
addBooleanColumn({ visibleFalse = true, visibleTrue = true, cellAlign, visibleGetter = () => true, editable, ...restProps }) {
|
|
42
112
|
const booleanRendererParams = {
|
|
43
113
|
cellAlign,
|
|
44
114
|
visibleFalse,
|
|
45
115
|
visibleTrue,
|
|
46
116
|
visibleGetter
|
|
47
117
|
};
|
|
48
|
-
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
118
|
+
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
119
|
+
booleanRenderer: true,
|
|
120
|
+
booleanRendererParams,
|
|
121
|
+
editable: __classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_resolveEditable).call(this, editable),
|
|
122
|
+
...restProps
|
|
123
|
+
});
|
|
49
124
|
return this;
|
|
50
125
|
}
|
|
51
|
-
addButtonColumn({ buttons, visibleGetter = () => true, ...restProps }) {
|
|
126
|
+
addButtonColumn({ buttons, visibleGetter = () => true, editable, ...restProps }) {
|
|
52
127
|
const buttonRendererParams = {
|
|
53
128
|
buttons,
|
|
54
129
|
visibleGetter
|
|
55
130
|
};
|
|
56
|
-
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
131
|
+
__classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, {
|
|
132
|
+
buttonRenderer: true,
|
|
133
|
+
buttonRendererParams,
|
|
134
|
+
editable: __classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_resolveEditable).call(this, editable),
|
|
135
|
+
...restProps
|
|
136
|
+
});
|
|
57
137
|
return this;
|
|
58
138
|
}
|
|
59
139
|
build() {
|
|
@@ -62,6 +142,10 @@ class ColumnBuilder {
|
|
|
62
142
|
}
|
|
63
143
|
_ColumnBuilder_instances = new WeakSet(), _ColumnBuilder_addPreparedColumn = function _ColumnBuilder_addPreparedColumn(props) {
|
|
64
144
|
this.columns.push(prepareColDef(this.intl, props));
|
|
145
|
+
}, _ColumnBuilder_resolveEditable = function _ColumnBuilder_resolveEditable(editable) {
|
|
146
|
+
if (!editable)
|
|
147
|
+
return false;
|
|
148
|
+
return editable;
|
|
65
149
|
};
|
|
66
150
|
export default ColumnBuilder;
|
|
67
151
|
//# sourceMappingURL=ColumnBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnBuilder.js","sourceRoot":"","sources":["../ColumnBuilder.jsx"],"names":[],"mappings":";;;;;;;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AACtC,OAAO,EAAC,eAAe,EAAC,MAAM,SAAS,CAAC;AAExC,MAAM,aAAa;IAKjB,YAAY,IAAI;;QACd,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,SAAS,CAAC,KAAK;QACb,uBAAA,IAAI,kEAAmB,MAAvB,IAAI,EAAoB,KAAK,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,GAAG,OAAO,EAAE,GAAG,SAAS,EAAC;
|
|
1
|
+
{"version":3,"file":"ColumnBuilder.js","sourceRoot":"","sources":["../ColumnBuilder.jsx"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,120 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
2
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
3
3
|
import AgGrid from '@bit.rhplus/ag-grid';
|
|
4
4
|
import classnames from 'classnames';
|
|
5
|
+
import { OperationType, useSharedGrid } from '@bit.rhplus/shared-grid-form';
|
|
5
6
|
import { AgGridColumns } from './AgGridColumns';
|
|
6
|
-
const Grid = props => {
|
|
7
|
+
const Grid = (props) => {
|
|
7
8
|
const gridRef = React.useRef(null);
|
|
8
|
-
const { appearance = 'ag-theme-alpine', columnDefs, height = '100%' } = props;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const { appearance = 'ag-theme-alpine', columnDefs, height = '100%', defaultColDef, gridOptions, rowClassRules, editableDefault = true, onRowDoubleClicked, } = props;
|
|
10
|
+
const { items, onGridReady, addItem, updateItem, deleteItem, pendingChanges = [], isCellEditable } = useSharedGrid();
|
|
11
|
+
const [gridApi, setGridApi] = useState(null);
|
|
12
|
+
// Handler pro připravení gridu
|
|
13
|
+
const handleGridReady = useCallback((params) => {
|
|
14
|
+
setGridApi(params.api);
|
|
15
|
+
if (onGridReady) {
|
|
16
|
+
onGridReady(params);
|
|
17
|
+
}
|
|
18
|
+
}, [onGridReady]);
|
|
19
|
+
// Handler pro změnu hodnoty buňky
|
|
20
|
+
const handleCellValueChanged = useCallback((params) => {
|
|
21
|
+
const { data, colDef, newValue } = params;
|
|
22
|
+
// Extrahujeme pouze změněné pole
|
|
23
|
+
const changes = { [colDef.field]: newValue };
|
|
24
|
+
updateItem(data.id, changes);
|
|
25
|
+
}, [updateItem]);
|
|
26
|
+
// Handler pro dvojklik na buňku
|
|
27
|
+
const handleCellDoubleClicked = useCallback((params) => {
|
|
28
|
+
const { colDef } = params;
|
|
29
|
+
// Pokud je buňka needitovatelná, vyvoláme událost onRowDoubleClicked
|
|
30
|
+
let isEditable = true;
|
|
31
|
+
if (typeof colDef.editable === 'function') {
|
|
32
|
+
isEditable = colDef.editable(params);
|
|
33
|
+
}
|
|
34
|
+
else if (typeof colDef.editable === 'boolean') {
|
|
35
|
+
isEditable = colDef.editable;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
isEditable = editableDefault;
|
|
39
|
+
}
|
|
40
|
+
// Pokud buňka není editovatelná a máme definován callback pro dvojklik na řádek
|
|
41
|
+
if (!isEditable && onRowDoubleClicked) {
|
|
42
|
+
// Simulujeme událost dvojkliku na řádek
|
|
43
|
+
onRowDoubleClicked({
|
|
44
|
+
...params,
|
|
45
|
+
// Přidáme data, která by normálně obsahovala událost onRowDoubleClicked
|
|
46
|
+
api: params.api,
|
|
47
|
+
node: params.node,
|
|
48
|
+
rowIndex: params.rowIndex,
|
|
49
|
+
data: params.data,
|
|
50
|
+
event: params.event
|
|
51
|
+
});
|
|
52
|
+
// Zastavíme výchozí zpracování událostí, aby se nezobrazil editor buňky
|
|
53
|
+
if (params.event) {
|
|
54
|
+
params.event.preventDefault();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}, [onRowDoubleClicked, editableDefault]);
|
|
58
|
+
// Handler pro přidání nového řádku
|
|
59
|
+
const handleAddRow = useCallback((rowData = {}) => {
|
|
60
|
+
const newItemId = addItem(rowData);
|
|
61
|
+
// Může být potřeba aktualizovat grid pro zobrazení nového řádku
|
|
62
|
+
if (gridApi) {
|
|
63
|
+
gridApi.setRowData(items);
|
|
64
|
+
// Volitelně: přejít na nově přidanou položku
|
|
65
|
+
setTimeout(() => {
|
|
66
|
+
const rowNode = gridApi.getRowNode(newItemId);
|
|
67
|
+
if (rowNode) {
|
|
68
|
+
gridApi.ensureNodeVisible(rowNode);
|
|
69
|
+
}
|
|
70
|
+
}, 100);
|
|
71
|
+
}
|
|
72
|
+
return newItemId;
|
|
73
|
+
}, [addItem, gridApi, items]);
|
|
74
|
+
// Handler pro odstranění řádku
|
|
75
|
+
const handleDeleteRow = useCallback((id) => {
|
|
76
|
+
deleteItem(id);
|
|
77
|
+
// Může být potřeba aktualizovat grid
|
|
78
|
+
if (gridApi) {
|
|
79
|
+
gridApi.setRowData(items);
|
|
80
|
+
}
|
|
81
|
+
}, [deleteItem, gridApi, items]);
|
|
82
|
+
// Vlastní CSS třídy pro řádky s čekajícími změnami
|
|
83
|
+
const defaultRowClassRules = {
|
|
84
|
+
'row-pending-add': (params) => {
|
|
85
|
+
return pendingChanges[params.data.id] &&
|
|
86
|
+
pendingChanges[params.data.id].operation === OperationType.ADD;
|
|
87
|
+
},
|
|
88
|
+
'row-pending-update': (params) => {
|
|
89
|
+
return pendingChanges[params.data.id] &&
|
|
90
|
+
pendingChanges[params.data.id].operation === OperationType.UPDATE;
|
|
91
|
+
},
|
|
92
|
+
'row-pending-delete': (params) => {
|
|
93
|
+
return pendingChanges[params.data.id] &&
|
|
94
|
+
pendingChanges[params.data.id].operation === OperationType.DELETE;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
// Kombinované rowClassRules
|
|
98
|
+
const combinedRowClassRules = { ...defaultRowClassRules, ...rowClassRules };
|
|
99
|
+
// Exportovat metody pro přidání/odstranění řádků
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
if (gridApi) {
|
|
102
|
+
// Metody můžeme přidat přímo do gridApi pro použití z vnějšku
|
|
103
|
+
gridApi.addRow = handleAddRow;
|
|
104
|
+
gridApi.deleteRow = handleDeleteRow;
|
|
105
|
+
}
|
|
106
|
+
}, [gridApi, handleAddRow, handleDeleteRow]);
|
|
107
|
+
return (_jsx("div", { className: classnames(appearance), style: { height }, children: _jsx(AgGrid, { rowData: items, defaultColDef: {
|
|
108
|
+
enableCellChangeFlash: true,
|
|
109
|
+
editable: editableDefault,
|
|
110
|
+
resizable: true,
|
|
111
|
+
...defaultColDef,
|
|
112
|
+
}, isRowSelectable: (params) => {
|
|
113
|
+
// Neselektovatelné řádky čekající na odstranění
|
|
114
|
+
return !pendingChanges[params.data.id] ||
|
|
115
|
+
pendingChanges[params.data.id].operation !== OperationType.DELETE;
|
|
116
|
+
}, isEditable: isCellEditable, onGridReady: handleGridReady, onCellValueChanged: handleCellValueChanged, onCellDoubleClicked: handleCellDoubleClicked, rowClassRules: combinedRowClassRules, getRowId: (params) => params.data.id, ...gridOptions, context: {
|
|
117
|
+
componentParent: this,
|
|
13
118
|
}, ...props, ref: gridRef, columnDefs: AgGridColumns(columnDefs, props) }) }));
|
|
14
119
|
};
|
|
15
120
|
export default Grid;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
|
package/index.jsx
CHANGED
|
@@ -1,27 +1,165 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import AgGrid from '@bit.rhplus/ag-grid';
|
|
3
3
|
import classnames from 'classnames';
|
|
4
|
+
import { OperationType, useSharedGrid } from '@bit.rhplus/shared-grid-form';
|
|
4
5
|
import { AgGridColumns } from './AgGridColumns';
|
|
5
6
|
|
|
6
|
-
const Grid = props => {
|
|
7
|
+
const Grid = (props) => {
|
|
7
8
|
const gridRef = React.useRef(null);
|
|
8
|
-
const {
|
|
9
|
-
appearance = 'ag-theme-alpine',
|
|
10
|
-
columnDefs,
|
|
11
|
-
height = '100%'
|
|
9
|
+
const {
|
|
10
|
+
appearance = 'ag-theme-alpine',
|
|
11
|
+
columnDefs,
|
|
12
|
+
height = '100%',
|
|
13
|
+
defaultColDef,
|
|
14
|
+
gridOptions,
|
|
15
|
+
rowClassRules,
|
|
16
|
+
editableDefault = true,
|
|
17
|
+
onRowDoubleClicked,
|
|
12
18
|
} = props;
|
|
19
|
+
const {
|
|
20
|
+
items,
|
|
21
|
+
onGridReady,
|
|
22
|
+
addItem,
|
|
23
|
+
updateItem,
|
|
24
|
+
deleteItem,
|
|
25
|
+
pendingChanges = [],
|
|
26
|
+
isCellEditable
|
|
27
|
+
} = useSharedGrid();
|
|
28
|
+
|
|
29
|
+
const [gridApi, setGridApi] = useState(null);
|
|
30
|
+
|
|
31
|
+
// Handler pro připravení gridu
|
|
32
|
+
const handleGridReady = useCallback((params) => {
|
|
33
|
+
setGridApi(params.api);
|
|
34
|
+
if (onGridReady) {
|
|
35
|
+
onGridReady(params);
|
|
36
|
+
}
|
|
37
|
+
}, [onGridReady]);
|
|
38
|
+
|
|
39
|
+
// Handler pro změnu hodnoty buňky
|
|
40
|
+
const handleCellValueChanged = useCallback((params) => {
|
|
41
|
+
const { data, colDef, newValue } = params;
|
|
42
|
+
// Extrahujeme pouze změněné pole
|
|
43
|
+
const changes = { [colDef.field]: newValue };
|
|
44
|
+
updateItem(data.id, changes);
|
|
45
|
+
}, [updateItem]);
|
|
46
|
+
|
|
47
|
+
// Handler pro dvojklik na buňku
|
|
48
|
+
const handleCellDoubleClicked = useCallback((params) => {
|
|
49
|
+
const { colDef } = params;
|
|
50
|
+
|
|
51
|
+
// Pokud je buňka needitovatelná, vyvoláme událost onRowDoubleClicked
|
|
52
|
+
let isEditable = true;
|
|
53
|
+
if (typeof colDef.editable === 'function') {
|
|
54
|
+
isEditable = colDef.editable(params);
|
|
55
|
+
} else if (typeof colDef.editable === 'boolean') {
|
|
56
|
+
isEditable = colDef.editable;
|
|
57
|
+
} else {
|
|
58
|
+
isEditable = editableDefault;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Pokud buňka není editovatelná a máme definován callback pro dvojklik na řádek
|
|
62
|
+
if (!isEditable && onRowDoubleClicked) {
|
|
63
|
+
// Simulujeme událost dvojkliku na řádek
|
|
64
|
+
onRowDoubleClicked({
|
|
65
|
+
...params,
|
|
66
|
+
// Přidáme data, která by normálně obsahovala událost onRowDoubleClicked
|
|
67
|
+
api: params.api,
|
|
68
|
+
node: params.node,
|
|
69
|
+
rowIndex: params.rowIndex,
|
|
70
|
+
data: params.data,
|
|
71
|
+
event: params.event
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Zastavíme výchozí zpracování událostí, aby se nezobrazil editor buňky
|
|
75
|
+
if (params.event) {
|
|
76
|
+
params.event.preventDefault();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}, [onRowDoubleClicked, editableDefault]);
|
|
80
|
+
|
|
81
|
+
// Handler pro přidání nového řádku
|
|
82
|
+
const handleAddRow = useCallback((rowData = {}) => {
|
|
83
|
+
const newItemId = addItem(rowData);
|
|
84
|
+
|
|
85
|
+
// Může být potřeba aktualizovat grid pro zobrazení nového řádku
|
|
86
|
+
if (gridApi) {
|
|
87
|
+
gridApi.setRowData(items);
|
|
88
|
+
|
|
89
|
+
// Volitelně: přejít na nově přidanou položku
|
|
90
|
+
setTimeout(() => {
|
|
91
|
+
const rowNode = gridApi.getRowNode(newItemId);
|
|
92
|
+
if (rowNode) {
|
|
93
|
+
gridApi.ensureNodeVisible(rowNode);
|
|
94
|
+
}
|
|
95
|
+
}, 100);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return newItemId;
|
|
99
|
+
}, [addItem, gridApi, items]);
|
|
100
|
+
|
|
101
|
+
// Handler pro odstranění řádku
|
|
102
|
+
const handleDeleteRow = useCallback((id) => {
|
|
103
|
+
deleteItem(id);
|
|
104
|
+
|
|
105
|
+
// Může být potřeba aktualizovat grid
|
|
106
|
+
if (gridApi) {
|
|
107
|
+
gridApi.setRowData(items);
|
|
108
|
+
}
|
|
109
|
+
}, [deleteItem, gridApi, items]);
|
|
110
|
+
|
|
111
|
+
// Vlastní CSS třídy pro řádky s čekajícími změnami
|
|
112
|
+
const defaultRowClassRules = {
|
|
113
|
+
'row-pending-add': (params) => {
|
|
114
|
+
return pendingChanges[params.data.id] &&
|
|
115
|
+
pendingChanges[params.data.id].operation === OperationType.ADD;
|
|
116
|
+
},
|
|
117
|
+
'row-pending-update': (params) => {
|
|
118
|
+
return pendingChanges[params.data.id] &&
|
|
119
|
+
pendingChanges[params.data.id].operation === OperationType.UPDATE;
|
|
120
|
+
},
|
|
121
|
+
'row-pending-delete': (params) => {
|
|
122
|
+
return pendingChanges[params.data.id] &&
|
|
123
|
+
pendingChanges[params.data.id].operation === OperationType.DELETE;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// Kombinované rowClassRules
|
|
128
|
+
const combinedRowClassRules = { ...defaultRowClassRules, ...rowClassRules };
|
|
129
|
+
|
|
130
|
+
// Exportovat metody pro přidání/odstranění řádků
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
if (gridApi) {
|
|
133
|
+
// Metody můžeme přidat přímo do gridApi pro použití z vnějšku
|
|
134
|
+
gridApi.addRow = handleAddRow;
|
|
135
|
+
gridApi.deleteRow = handleDeleteRow;
|
|
136
|
+
}
|
|
137
|
+
}, [gridApi, handleAddRow, handleDeleteRow]);
|
|
13
138
|
|
|
14
139
|
return (
|
|
15
|
-
<div className={classnames(appearance)}
|
|
16
|
-
style={{ height }}
|
|
17
|
-
>
|
|
140
|
+
<div className={classnames(appearance)} style={{ height }}>
|
|
18
141
|
<AgGrid
|
|
19
|
-
|
|
20
|
-
|
|
142
|
+
rowData={items}
|
|
143
|
+
defaultColDef={{
|
|
144
|
+
enableCellChangeFlash: true,
|
|
145
|
+
editable: editableDefault,
|
|
146
|
+
resizable: true,
|
|
147
|
+
...defaultColDef,
|
|
148
|
+
}}
|
|
149
|
+
isRowSelectable={(params) => {
|
|
150
|
+
// Neselektovatelné řádky čekající na odstranění
|
|
151
|
+
return !pendingChanges[params.data.id] ||
|
|
152
|
+
pendingChanges[params.data.id].operation !== OperationType.DELETE;
|
|
21
153
|
}}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
154
|
+
isEditable={isCellEditable}
|
|
155
|
+
onGridReady={handleGridReady}
|
|
156
|
+
onCellValueChanged={handleCellValueChanged}
|
|
157
|
+
onCellDoubleClicked={handleCellDoubleClicked}
|
|
158
|
+
rowClassRules={combinedRowClassRules}
|
|
159
|
+
getRowId={(params) => params.data.id}
|
|
160
|
+
{...gridOptions}
|
|
161
|
+
context={{
|
|
162
|
+
componentParent: this,
|
|
25
163
|
}}
|
|
26
164
|
{...props}
|
|
27
165
|
ref={gridRef}
|
|
@@ -29,8 +167,7 @@ const Grid = props => {
|
|
|
29
167
|
/>
|
|
30
168
|
</div>
|
|
31
169
|
);
|
|
32
|
-
}
|
|
33
|
-
|
|
170
|
+
};
|
|
34
171
|
|
|
35
172
|
export default Grid;
|
|
36
173
|
export * from './enums';
|
package/package.json
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bit.rhplus/ui.grid",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"homepage": "https://bit.cloud/remote-scope/ui/grid",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "remote-scope",
|
|
8
8
|
"name": "ui/grid",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.12"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"classnames": "^2.5.1",
|
|
13
|
-
"@bit.rhplus/ag-grid": "0.0.16"
|
|
13
|
+
"@bit.rhplus/ag-grid": "0.0.16",
|
|
14
|
+
"@bit.rhplus/shared-grid-form": "0.0.1"
|
|
14
15
|
},
|
|
15
16
|
"devDependencies": {
|
|
16
|
-
"@teambit/react.react-env": "1.0.
|
|
17
|
+
"@teambit/react.react-env": "1.0.119"
|
|
17
18
|
},
|
|
18
19
|
"peerDependencies": {
|
|
19
20
|
"react": "^17.0.0 || ^18.0.0"
|
|
File without changes
|