@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 CHANGED
@@ -22,12 +22,8 @@ export const AgGridColumn = (column) => {
22
22
  React.useEffect(() => {
23
23
  const loadComponent = async () => {
24
24
  if (column.contentTooltip) {
25
- try {
26
- const module = InvokeTooltip(column.contentTooltip);
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({ cellAlign, cellRenderer, ...restProps });
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
- addDateColumn({dateFormat = "DD.MM.YYYY", ...restProps}) {
51
- this.#addPreparedColumn({ dateRenderer: dateFormat, ...restProps });
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
- this.#addPreparedColumn({ contentTooltip, tooltipField, tooltipInteraction, tooltipShowDelay, ...restProps });
57
- return this;
58
- }
59
-
60
- addBooleanColumn({visibleFalse = true, visibleTrue = true, cellAlign, visibleGetter = () => true, ...restProps}) {
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({ booleanRenderer: true, booleanRendererParams, ...restProps });
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({ buttonRenderer: true, buttonRendererParams, ...restProps})
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;
@@ -18,13 +18,8 @@ export const AgGridColumn = (column) => {
18
18
  React.useEffect(() => {
19
19
  const loadComponent = async () => {
20
20
  if (column.contentTooltip) {
21
- try {
22
- const module = InvokeTooltip(column.contentTooltip);
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,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;oBACpD,mBAAmB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB;gBAC5D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;gBAClE,CAAC;YACH,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;IAEf,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"}
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"}
@@ -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
- addObjectColumn({ contentTooltip, tooltipField, tooltipInteraction, tooltipShowDelay, ...restProps }: {
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;
@@ -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, { cellAlign, cellRenderer, ...restProps });
31
- return this;
32
- }
33
- addDateColumn({ dateFormat = "DD.MM.YYYY", ...restProps }) {
34
- __classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, { dateRenderer: dateFormat, ...restProps });
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
- addObjectColumn({ contentTooltip, tooltipField, tooltipInteraction, tooltipShowDelay = 100, ...restProps }) {
38
- __classPrivateFieldGet(this, _ColumnBuilder_instances, "m", _ColumnBuilder_addPreparedColumn).call(this, { contentTooltip, tooltipField, tooltipInteraction, tooltipShowDelay, ...restProps });
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
- addBooleanColumn({ visibleFalse = true, visibleTrue = true, cellAlign, visibleGetter = () => true, ...restProps }) {
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, { booleanRenderer: true, booleanRendererParams, ...restProps });
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, { buttonRenderer: true, buttonRendererParams, ...restProps });
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":"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"}
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 * as React from 'react';
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
- return (_jsx("div", { className: classnames(appearance), style: { height }, children: _jsx(AgGrid, { context: {
10
- componentParent: this
11
- }, getRowId: params => params.data.id, defaultColDef: {
12
- enableCellChangeFlash: true
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,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE;IACnB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,EACJ,UAAU,GAAG,iBAAiB,EAC9B,UAAU,EACV,MAAM,GAAG,MAAM,EAChB,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,cAAK,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,EACpC,KAAK,EAAE,EAAE,MAAM,EAAE,YAEjB,KAAC,MAAM,IACL,OAAO,EAAE;gBACP,eAAe,EAAE,IAAI;aACtB,EACD,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAClC,aAAa,EAAE;gBACb,qBAAqB,EAAE,IAAI;aAC5B,KACG,KAAK,EACT,GAAG,EAAE,OAAO,EACZ,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,GAC5C,GACE,CACP,CAAC;AACJ,CAAC,CAAA;AAGD,eAAe,IAAI,CAAC;AACpB,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
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 * as React from 'react';
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
- context={{
20
- componentParent: this
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
- getRowId={params => params.data.id}
23
- defaultColDef={{
24
- enableCellChangeFlash: true
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.11",
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.11"
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.111"
17
+ "@teambit/react.react-env": "1.0.119"
17
18
  },
18
19
  "peerDependencies": {
19
20
  "react": "^17.0.0 || ^18.0.0"