@bit.rhplus/ag-grid 0.0.32 → 0.0.33

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/dist/index.js CHANGED
@@ -17,51 +17,87 @@ import ButtonRenderer from './Renderers/ButtonRenderer';
17
17
  import CountrySelectRenderer from './Renderers/CountrySelectRenderer';
18
18
  const AgGrid = React.forwardRef((props, ref) => {
19
19
  const internalRef = React.useRef();
20
- const { rowData = [], newRowFlash = true, onGridReady } = props;
20
+ const { rowData = [], newRowFlash = true, updatedRowFlash = false, onGridReady } = props;
21
21
  const [, setIsGridReady] = React.useState(false);
22
22
  const previousRowDataRef = React.useRef(rowData);
23
23
  const findNewRows = (oldData, newData) => {
24
24
  const oldIds = new Set(oldData.map((row) => row.id));
25
25
  return newData.filter((row) => !oldIds.has(row.id));
26
26
  };
27
+ const findUpdatedRows = (oldData, newData) => {
28
+ const oldDataMap = new Map(oldData.map((row) => [row.id, row]));
29
+ return newData.filter((newRow) => {
30
+ const oldRow = oldDataMap.get(newRow.id);
31
+ if (!oldRow)
32
+ return false; // Nový řádek, ne aktualizovaný
33
+ // Porovnáme pouze základní vlastnosti pro rychlost
34
+ return JSON.stringify(oldRow) !== JSON.stringify(newRow);
35
+ });
36
+ };
27
37
  React.useImperativeHandle(ref, () => internalRef.current, [internalRef]);
28
38
  React.useEffect(() => {
29
- if (!newRowFlash)
39
+ if (!newRowFlash && !updatedRowFlash)
30
40
  return;
31
41
  const previousRowData = previousRowDataRef.current;
32
- const addedRows = findNewRows(previousRowData, rowData);
33
- if (addedRows.length > 0) {
42
+ const addedRows = newRowFlash ? findNewRows(previousRowData, rowData) : [];
43
+ const updatedRows = updatedRowFlash ? findUpdatedRows(previousRowData, rowData) : [];
44
+ if (addedRows.length > 0 || updatedRows.length > 0) {
34
45
  setTimeout(() => {
35
46
  try {
36
47
  // Bezpečnostní kontrola API dostupnosti
37
48
  if (!internalRef.current?.api || internalRef.current.api.isDestroyed?.()) {
38
49
  return;
39
50
  }
40
- const newRowNodes = [];
41
- internalRef.current.api.forEachNode((node) => {
42
- if (addedRows.some((row) => row.id === node.data.id)) {
43
- newRowNodes.push(node);
44
- }
45
- });
46
- // Kontrola, že máme platné row nodes
47
- if (newRowNodes.length === 0) {
48
- return;
49
- }
50
51
  // Modern AG-Grid (33+): getColumnState() moved to main api
51
52
  const columnApi = internalRef.current?.columnApi || internalRef.current?.api;
52
- if (columnApi?.getColumnState) {
53
- const columnStates = columnApi.getColumnState();
54
- const allColumns = columnStates
55
- .filter(colState => colState.colId) // Filtrujeme pouze platné colId
56
- .map((colState) => colState.colId);
57
- // Kontrola, že máme platné sloupce
58
- if (allColumns.length === 0) {
59
- return;
53
+ if (!columnApi?.getColumnState) {
54
+ return;
55
+ }
56
+ const columnStates = columnApi.getColumnState();
57
+ const allColumns = columnStates
58
+ .filter(colState => colState.colId) // Filtrujeme pouze platné colId
59
+ .map((colState) => colState.colId);
60
+ // Kontrola, že máme platné sloupce
61
+ if (allColumns.length === 0) {
62
+ return;
63
+ }
64
+ // Flash efekt pro nové řádky (používá defaultní zelená barva AG Grid)
65
+ if (addedRows.length > 0) {
66
+ const newRowNodes = [];
67
+ internalRef.current.api.forEachNode((node) => {
68
+ if (addedRows.some((row) => row.id === node.data.id)) {
69
+ newRowNodes.push(node);
70
+ }
71
+ });
72
+ if (newRowNodes.length > 0) {
73
+ internalRef.current.api.flashCells({
74
+ rowNodes: newRowNodes,
75
+ columns: allColumns,
76
+ flashDelay: 0,
77
+ fadeDelay: 1000,
78
+ });
60
79
  }
61
- internalRef.current.api.flashCells({
62
- rowNodes: newRowNodes,
63
- columns: allColumns,
80
+ }
81
+ // Flash efekt pro aktualizované řádky (modrá barva)
82
+ if (updatedRows.length > 0) {
83
+ const updatedRowNodes = [];
84
+ internalRef.current.api.forEachNode((node) => {
85
+ if (updatedRows.some((row) => row.id === node.data.id)) {
86
+ updatedRowNodes.push(node);
87
+ }
64
88
  });
89
+ if (updatedRowNodes.length > 0) {
90
+ // Použijeme vlastní CSS animaci pro modrou flash
91
+ updatedRowNodes.forEach(node => {
92
+ const rowElement = node.eGridRow || document.querySelector(`[row-id="${node.data.id}"]`);
93
+ if (rowElement) {
94
+ rowElement.classList.add('ag-row-flash-updated');
95
+ setTimeout(() => {
96
+ rowElement.classList.remove('ag-row-flash-updated');
97
+ }, 1000);
98
+ }
99
+ });
100
+ }
65
101
  }
66
102
  }
67
103
  catch (error) {
@@ -70,7 +106,7 @@ const AgGrid = React.forwardRef((props, ref) => {
70
106
  }, 100); // Zvýšený timeout pro stabilizaci gridu
71
107
  }
72
108
  previousRowDataRef.current = rowData;
73
- }, [rowData, newRowFlash]);
109
+ }, [rowData, newRowFlash, updatedRowFlash]);
74
110
  const RhPlusRangeSelectionChanged = React.useCallback(() => {
75
111
  // Zakomentovaná funkcionalita pro budoucí použití
76
112
  // if (internalRef && !!internalRef.current && enableNotification) {
@@ -100,6 +136,63 @@ const AgGrid = React.forwardRef((props, ref) => {
100
136
  internalRef.current.api = event.api;
101
137
  internalRef.current.columnApi = event.columnApi || event.api; // fallback for modern AG-Grid
102
138
  }
139
+ // Registruj callback pro AG Grid transactions (SignalR optimalizace)
140
+ if (event.api && !window.agGridTransactionCallback) {
141
+ window.agGridTransactionCallback = (transactionData) => {
142
+ try {
143
+ if (!event.api || event.api.isDestroyed?.())
144
+ return;
145
+ const { operation, records } = transactionData;
146
+ switch (operation) {
147
+ case 'add':
148
+ event.api.applyTransaction({ add: records });
149
+ // Flash efekt pro nové řádky
150
+ setTimeout(() => {
151
+ records.forEach(record => {
152
+ const rowNode = event.api.getRowNode(record.id);
153
+ if (rowNode && rowNode.rowElement) {
154
+ rowNode.rowElement.classList.add('ag-row-flash-created');
155
+ setTimeout(() => {
156
+ rowNode.rowElement.classList.remove('ag-row-flash-created');
157
+ }, 1000);
158
+ }
159
+ });
160
+ }, 100);
161
+ break;
162
+ case 'update':
163
+ event.api.applyTransaction({ update: records });
164
+ // Flash efekt pro aktualizované řádky
165
+ setTimeout(() => {
166
+ records.forEach(record => {
167
+ const rowNode = event.api.getRowNode(record.id);
168
+ if (rowNode && rowNode.rowElement) {
169
+ rowNode.rowElement.classList.add('ag-row-flash-updated');
170
+ setTimeout(() => {
171
+ rowNode.rowElement.classList.remove('ag-row-flash-updated');
172
+ }, 1000);
173
+ }
174
+ });
175
+ }, 100);
176
+ break;
177
+ case 'remove':
178
+ // Flash efekt před smazáním
179
+ records.forEach(record => {
180
+ const rowNode = event.api.getRowNode(record.id);
181
+ if (rowNode && rowNode.rowElement) {
182
+ rowNode.rowElement.classList.add('ag-row-flash-deleted');
183
+ }
184
+ });
185
+ setTimeout(() => {
186
+ event.api.applyTransaction({ remove: records });
187
+ }, 500); // Krátké zpoždění pro zobrazení flash efektu
188
+ break;
189
+ }
190
+ }
191
+ catch (error) {
192
+ // Ignorujeme chyby
193
+ }
194
+ };
195
+ }
103
196
  // Pak zavoláme parent onGridReady handler, pokud existuje
104
197
  // Toto je kritické pro správné fungování bit/ui/grid a GridLayout
105
198
  if (options.onGridReady) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.jsx"],"names":[],"mappings":"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"}
package/index.jsx CHANGED
@@ -21,6 +21,7 @@ const AgGrid = React.forwardRef((props, ref) => {
21
21
  const {
22
22
  rowData = [],
23
23
  newRowFlash = true,
24
+ updatedRowFlash = false,
24
25
  onGridReady
25
26
  } = props;
26
27
  const [, setIsGridReady] = React.useState(false);
@@ -31,15 +32,27 @@ const AgGrid = React.forwardRef((props, ref) => {
31
32
  return newData.filter((row) => !oldIds.has(row.id));
32
33
  };
33
34
 
35
+ const findUpdatedRows = (oldData, newData) => {
36
+ const oldDataMap = new Map(oldData.map((row) => [row.id, row]));
37
+ return newData.filter((newRow) => {
38
+ const oldRow = oldDataMap.get(newRow.id);
39
+ if (!oldRow) return false; // Nový řádek, ne aktualizovaný
40
+
41
+ // Porovnáme pouze základní vlastnosti pro rychlost
42
+ return JSON.stringify(oldRow) !== JSON.stringify(newRow);
43
+ });
44
+ };
45
+
34
46
  React.useImperativeHandle(ref, () => internalRef.current, [internalRef]);
35
47
 
36
48
  React.useEffect(() => {
37
- if (!newRowFlash) return;
49
+ if (!newRowFlash && !updatedRowFlash) return;
38
50
 
39
51
  const previousRowData = previousRowDataRef.current;
40
- const addedRows = findNewRows(previousRowData, rowData);
52
+ const addedRows = newRowFlash ? findNewRows(previousRowData, rowData) : [];
53
+ const updatedRows = updatedRowFlash ? findUpdatedRows(previousRowData, rowData) : [];
41
54
 
42
- if (addedRows.length > 0) {
55
+ if (addedRows.length > 0 || updatedRows.length > 0) {
43
56
  setTimeout(() => {
44
57
  try {
45
58
  // Bezpečnostní kontrola API dostupnosti
@@ -47,35 +60,62 @@ const AgGrid = React.forwardRef((props, ref) => {
47
60
  return;
48
61
  }
49
62
 
50
- const newRowNodes = [];
51
- internalRef.current.api.forEachNode((node) => {
52
- if (addedRows.some((row) => row.id === node.data.id)) {
53
- newRowNodes.push(node);
54
- }
55
- });
63
+ // Modern AG-Grid (33+): getColumnState() moved to main api
64
+ const columnApi = internalRef.current?.columnApi || internalRef.current?.api;
65
+ if (!columnApi?.getColumnState) {
66
+ return;
67
+ }
68
+
69
+ const columnStates = columnApi.getColumnState();
70
+ const allColumns = columnStates
71
+ .filter(colState => colState.colId) // Filtrujeme pouze platné colId
72
+ .map((colState) => colState.colId);
56
73
 
57
- // Kontrola, že máme platné row nodes
58
- if (newRowNodes.length === 0) {
74
+ // Kontrola, že máme platné sloupce
75
+ if (allColumns.length === 0) {
59
76
  return;
60
77
  }
61
78
 
62
- // Modern AG-Grid (33+): getColumnState() moved to main api
63
- const columnApi = internalRef.current?.columnApi || internalRef.current?.api;
64
- if (columnApi?.getColumnState) {
65
- const columnStates = columnApi.getColumnState();
66
- const allColumns = columnStates
67
- .filter(colState => colState.colId) // Filtrujeme pouze platné colId
68
- .map((colState) => colState.colId);
69
-
70
- // Kontrola, že máme platné sloupce
71
- if (allColumns.length === 0) {
72
- return;
79
+ // Flash efekt pro nové řádky (používá defaultní zelená barva AG Grid)
80
+ if (addedRows.length > 0) {
81
+ const newRowNodes = [];
82
+ internalRef.current.api.forEachNode((node) => {
83
+ if (addedRows.some((row) => row.id === node.data.id)) {
84
+ newRowNodes.push(node);
85
+ }
86
+ });
87
+
88
+ if (newRowNodes.length > 0) {
89
+ internalRef.current.api.flashCells({
90
+ rowNodes: newRowNodes,
91
+ columns: allColumns,
92
+ flashDelay: 0,
93
+ fadeDelay: 1000,
94
+ });
73
95
  }
96
+ }
74
97
 
75
- internalRef.current.api.flashCells({
76
- rowNodes: newRowNodes,
77
- columns: allColumns,
98
+ // Flash efekt pro aktualizované řádky (modrá barva)
99
+ if (updatedRows.length > 0) {
100
+ const updatedRowNodes = [];
101
+ internalRef.current.api.forEachNode((node) => {
102
+ if (updatedRows.some((row) => row.id === node.data.id)) {
103
+ updatedRowNodes.push(node);
104
+ }
78
105
  });
106
+
107
+ if (updatedRowNodes.length > 0) {
108
+ // Použijeme vlastní CSS animaci pro modrou flash
109
+ updatedRowNodes.forEach(node => {
110
+ const rowElement = node.eGridRow || document.querySelector(`[row-id="${node.data.id}"]`);
111
+ if (rowElement) {
112
+ rowElement.classList.add('ag-row-flash-updated');
113
+ setTimeout(() => {
114
+ rowElement.classList.remove('ag-row-flash-updated');
115
+ }, 1000);
116
+ }
117
+ });
118
+ }
79
119
  }
80
120
  } catch (error) {
81
121
  // Ignorujeme chybu a pokračujeme bez crash aplikace
@@ -84,7 +124,7 @@ const AgGrid = React.forwardRef((props, ref) => {
84
124
  }
85
125
 
86
126
  previousRowDataRef.current = rowData;
87
- }, [rowData, newRowFlash]);
127
+ }, [rowData, newRowFlash, updatedRowFlash]);
88
128
 
89
129
  const RhPlusRangeSelectionChanged = React.useCallback(
90
130
  () => {
@@ -121,6 +161,67 @@ const AgGrid = React.forwardRef((props, ref) => {
121
161
  internalRef.current.columnApi = event.columnApi || event.api; // fallback for modern AG-Grid
122
162
  }
123
163
 
164
+ // Registruj callback pro AG Grid transactions (SignalR optimalizace)
165
+ if (event.api && !window.agGridTransactionCallback) {
166
+ window.agGridTransactionCallback = (transactionData) => {
167
+ try {
168
+ if (!event.api || event.api.isDestroyed?.()) return;
169
+
170
+ const { operation, records } = transactionData;
171
+
172
+ switch (operation) {
173
+ case 'add':
174
+ event.api.applyTransaction({ add: records });
175
+ // Flash efekt pro nové řádky
176
+ setTimeout(() => {
177
+ records.forEach(record => {
178
+ const rowNode = event.api.getRowNode(record.id);
179
+ if (rowNode && rowNode.rowElement) {
180
+ rowNode.rowElement.classList.add('ag-row-flash-created');
181
+ setTimeout(() => {
182
+ rowNode.rowElement.classList.remove('ag-row-flash-created');
183
+ }, 1000);
184
+ }
185
+ });
186
+ }, 100);
187
+ break;
188
+
189
+ case 'update':
190
+ event.api.applyTransaction({ update: records });
191
+ // Flash efekt pro aktualizované řádky
192
+ setTimeout(() => {
193
+ records.forEach(record => {
194
+ const rowNode = event.api.getRowNode(record.id);
195
+ if (rowNode && rowNode.rowElement) {
196
+ rowNode.rowElement.classList.add('ag-row-flash-updated');
197
+ setTimeout(() => {
198
+ rowNode.rowElement.classList.remove('ag-row-flash-updated');
199
+ }, 1000);
200
+ }
201
+ });
202
+ }, 100);
203
+ break;
204
+
205
+ case 'remove':
206
+ // Flash efekt před smazáním
207
+ records.forEach(record => {
208
+ const rowNode = event.api.getRowNode(record.id);
209
+ if (rowNode && rowNode.rowElement) {
210
+ rowNode.rowElement.classList.add('ag-row-flash-deleted');
211
+ }
212
+ });
213
+
214
+ setTimeout(() => {
215
+ event.api.applyTransaction({ remove: records });
216
+ }, 500); // Krátké zpoždění pro zobrazení flash efektu
217
+ break;
218
+ }
219
+ } catch (error) {
220
+ // Ignorujeme chyby
221
+ }
222
+ };
223
+ }
224
+
124
225
  // Pak zavoláme parent onGridReady handler, pokud existuje
125
226
  // Toto je kritické pro správné fungování bit/ui/grid a GridLayout
126
227
  if (options.onGridReady) {
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@bit.rhplus/ag-grid",
3
- "version": "0.0.32",
3
+ "version": "0.0.33",
4
4
  "homepage": "https://bit.cloud/remote-scope/ag-grid",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "remote-scope",
8
8
  "name": "ag-grid",
9
- "version": "0.0.32"
9
+ "version": "0.0.33"
10
10
  },
11
11
  "dependencies": {
12
12
  "linq": "^4.0.3",