@genesislcap/grid-pro 14.481.1-alpha-69af5f8.0 → 14.481.1

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.
@@ -27,32 +27,9 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
27
27
  getRows(params) {
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
29
  var _a, _b;
30
- // setupFiltering()/setupSorting() return true when they triggered refreshDatasource()
31
- // internally (a filter/sort change). In that case reloadResourceData() has already
32
- // re-initialized the underlying datasource and - only AFTER that init completed - purged
33
- // AG Grid's SSRM cache, which makes AG Grid re-invoke getRows() with fresh params. This
34
- // (now superseded) invocation must therefore stop here: continuing would race the re-init
35
- // and attach a second subscription for stale params. That race was the root cause of two
36
- // observed bugs: rows from the PREVIOUS criteria leaking into the new filter's result set,
37
- // and broken loads when the stale call recreated the stream on a destroyed datasource.
38
- //
39
- // CRITICAL: the superseded request MUST still be resolved via params.fail() - never left
40
- // dangling. AG Grid's RowNodeBlockLoader caps concurrent datasource requests
41
- // (maxConcurrentDatasourceRequests, default 2) and only releases a slot when
42
- // success()/fail() is invoked. A silent return leaks the slot FOREVER; after two
43
- // filter/sort changes both slots are gone and the grid permanently stops issuing
44
- // getRows() - no purge, scroll or new filter can ever revive it (observed as: clearing
45
- // a filter leaves an empty grid, re-filtering does nothing). fail() here is safe: the
46
- // purge already destroyed the cache this request belongs to, and LazyCache.onLoadFailed
47
- // no-ops on a dead cache (guarded internally) - so the only effect is freeing the slot.
48
- if (yield this.setupFiltering(params)) {
49
- params.fail();
50
- return;
51
- }
52
- if (yield this.setupSorting(params)) {
53
- params.fail();
54
- return;
55
- }
30
+ // Use separated filtering and sorting setup
31
+ yield this.setupFiltering(params);
32
+ yield this.setupSorting(params);
56
33
  if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {
57
34
  const requestFilter = JSON.stringify((_a = params.request.filterModel) !== null && _a !== void 0 ? _a : {});
58
35
  const currentFilter = JSON.stringify((_b = this.currentFilterModel) !== null && _b !== void 0 ? _b : {});
@@ -64,21 +41,7 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
64
41
  if (!this.dataserverStream) {
65
42
  this.dataserverStream = yield this.createDataserverStreamFunc(this.resourceParams);
66
43
  }
67
- const blockStartRow = Number.isFinite(Number(params.request.startRow))
68
- ? Number(params.request.startRow)
69
- : 0;
70
- const blockEndRow = Number.isFinite(Number(params.request.endRow))
71
- ? Number(params.request.endRow)
72
- : blockStartRow + Number(this.maxRows);
73
- // Infinite scroll keeps a session-cumulative row cache (see handleCurrentStreamLoad);
74
- // when it already covers this block (AG Grid re-requesting a purged block, or an earlier
75
- // over-delivery prefetched it), or the stream already ended, no further stream messages
76
- // may ever arrive for this request - it must be resolved from the cache, synchronously.
77
- const blockAlreadyCovered = !this.pagination &&
78
- this.currentSequenceId >= 1 &&
79
- (this.rowData.size >= blockEndRow || !this.moreRows);
80
44
  if (this.currentSequenceId >= 1 &&
81
- !blockAlreadyCovered &&
82
45
  (this.moreRows || params.request.startRow >= Number(this.maxRows))) {
83
46
  if (this.pagination) {
84
47
  const startRow = Number.isFinite(Number(params.request.startRow))
@@ -95,80 +58,16 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
95
58
  this.connect.getMoreRows(this.sourceRef, viewNumber);
96
59
  }
97
60
  }
98
- // NOTE: getRows() deliberately does NOT unsubscribe previous subscriptions here - this
99
- // stream is tied to a live server-side feed (a DATA_LOGON session), and .unsubscribe()
100
- // sends DATA_LOGOFF to the SERVER, killing the whole session (confirmed: every later
101
- // block request failed outright after an experimental per-block unsubscribe). Earlier
102
- // subscriptions go inert via their own applyResult flag once resolved.
103
61
  let applyResult = true;
104
- const clearSafetyTimer = (timer) => {
105
- if (timer !== undefined) {
106
- clearTimeout(timer);
107
- }
108
- };
109
- const resolveBlock = (timer) => {
110
- if (!applyResult) {
111
- return;
112
- }
113
- applyResult = false;
114
- clearSafetyTimer(timer);
115
- const allRows = Array.from(this.rowData.values());
116
- const successRowData = {
117
- // Non-pagination: deliver only THIS block's slice of the session-cumulative
118
- // cache - AG Grid SSRM expects each request to receive exactly the rows for its
119
- // own startRow..endRow range, not everything loaded so far.
120
- rowData: this.pagination ? allRows : allRows.slice(blockStartRow, blockEndRow),
121
- };
122
- successRowData.rowCount = this.getCorrectRowCount(params);
123
- this.lastSuccessRowData = successRowData;
124
- params.success(successRowData);
125
- this.notifyNoDataAvailableIfEmpty(params, successRowData);
126
- };
127
- if (blockAlreadyCovered) {
128
- resolveBlock();
129
- return;
130
- }
131
- // Safety valve: a block must never stay pending forever if the stream goes quiet without
132
- // delivering a full batch (anomalous, but an eternally-spinning grid is the worst outcome).
133
- // Resolving short with the honest accumulated count makes AG Grid end the dataset there.
134
- const safetyTimer = setTimeout(() => {
135
- if (applyResult) {
136
- logger.warn(`SSRM block ${blockStartRow}-${blockEndRow} for ${this.resourceName} timed out waiting for a full batch; resolving with ${this.rowData.size} accumulated row(s).`);
137
- resolveBlock(safetyTimer);
138
- }
139
- }, DataserverServerSideDatasource.BLOCK_RESOLVE_TIMEOUT_MS);
140
62
  this.dataserverStreamSubscription = this.dataserverStream.subscribe((dataserverResult) => {
141
63
  var _a;
142
- if (!applyResult) {
143
- // This request already resolved - later messages belong to the next block's
144
- // subscription, which processes them itself.
145
- return;
146
- }
147
- const messageType = dataserverResult === null || dataserverResult === void 0 ? void 0 : dataserverResult.MESSAGE_TYPE;
148
- if (messageType &&
149
- (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {
150
- applyResult = false;
151
- clearSafetyTimer(safetyTimer);
152
- if (this.errorHandlerFunc) {
153
- const errorMessage = messageType === MessageType.LOGOFF_ACK
154
- ? `Connection lost to ${this.resourceName}`
155
- : `Authentication failed for ${this.resourceName}`;
156
- this.errorHandlerFunc(errorMessage, 'connection');
157
- }
158
- params.fail();
159
- return;
160
- }
161
- if (this.pagination) {
162
- // Original vendor behaviour for paginated mode: each message resolves the
163
- // request (page swap), including the corrective snapshot() workaround for GSF's
164
- // criteria-blind ROWS_COUNT.
64
+ const incomingRowCount = (_a = dataserverResult === null || dataserverResult === void 0 ? void 0 : dataserverResult.ROW) === null || _a === void 0 ? void 0 : _a.length;
65
+ const shouldApply = applyResult || (incomingRowCount > 0 && this.rowData.size === 0);
66
+ if (shouldApply) {
165
67
  DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {
166
68
  var _a, _b;
167
- if (!applyResult) {
168
- return;
169
- }
170
69
  // TODO: this is a bit of hack, due GSF not returning a different ROWS_COUNT when there is a CRITERIA_MATCH
171
- if (this.resourceParams.CRITERIA_MATCH && !this.criteriaRowCountResolved) {
70
+ if (this.resourceParams.CRITERIA_MATCH && this.pagination) {
172
71
  const updatedInfo = yield this.connect.snapshot(this.resourceName, {
173
72
  MAX_ROWS: this.maxView,
174
73
  MAX_VIEW: this.maxView,
@@ -180,55 +79,14 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
180
79
  this.clientRowsCount = 0;
181
80
  }
182
81
  else {
183
- // Neither field alone is trustworthy: GSF's ROWS_COUNT ignores
184
- // CRITERIA_MATCH (full unfiltered total), while ROW.length is capped at the
185
- // server's page size. Math.max can over-report (safe/self-correcting once
186
- // the stream signals no more rows) but never under-reports - the dangerous
187
- // direction, as AG Grid stops requesting blocks once the count is reached.
188
- const rowsCount = (_a = updatedInfo.ROWS_COUNT) !== null && _a !== void 0 ? _a : 0;
189
- const rowLength = (_b = updatedInfo.ROW) === null || _b === void 0 ? void 0 : _b.length;
190
- this.serverRowsCount =
191
- rowLength !== undefined ? Math.max(rowsCount, rowLength) : rowsCount;
82
+ this.serverRowsCount = this.resourceParams.CRITERIA_MATCH
83
+ ? ((_b = (_a = updatedInfo.ROW) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : updatedInfo.ROWS_COUNT)
84
+ : updatedInfo.ROWS_COUNT;
192
85
  }
193
- this.criteriaRowCountResolved = true;
194
86
  }
195
- clearSafetyTimer(safetyTimer);
196
87
  this.applyServerSideData(params, dataserverResult);
197
88
  applyResult = false;
198
89
  }));
199
- return;
200
- }
201
- // Infinite scroll: GSF delivers one MAX_ROWS batch split across SEVERAL stream
202
- // messages when a selective CRITERIA_MATCH makes matches sparse (observed on a live
203
- // trace: SEQUENCE_IDs 1-7 carrying 14+17+7+12+22+25+3 = exactly 100 = MAX_ROWS rows).
204
- // Resolving on the first message - the previous behaviour - handed AG Grid a fraction
205
- // of the block and dropped the rest, which rendered as "ERR" stub rows. Instead,
206
- // accumulate every message into the session cache and resolve only once this block's
207
- // full extent is covered or the dataset genuinely ended.
208
- if (dataserverResult && dataserverResult.MORE_ROWS !== undefined) {
209
- this.moreRows = dataserverResult.MORE_ROWS;
210
- }
211
- if (dataserverResult && dataserverResult.ROW) {
212
- const nextMessage = dataServerResultFilter(dataserverResult);
213
- this.handleCurrentStreamLoad(nextMessage);
214
- this.currentSequenceId = dataserverResult.SEQUENCE_ID;
215
- if (this.currentSequenceId === 1) {
216
- this.sourceRef = dataserverResult.SOURCE_REF;
217
- if (this.serverRowsCount === 0) {
218
- this.serverRowsCount = (_a = dataserverResult.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;
219
- }
220
- }
221
- }
222
- else if (this.currentSequenceId === 0 && !this.moreRows) {
223
- // The session's very first response carries no rows at all - the criteria
224
- // matches nothing; resolve as empty instead of waiting for the timeout.
225
- applyResult = false;
226
- clearSafetyTimer(safetyTimer);
227
- this.completeEmptyResult(params);
228
- return;
229
- }
230
- if (this.rowData.size >= blockEndRow || !this.moreRows) {
231
- DOM.queueUpdate(() => resolveBlock(safetyTimer));
232
90
  }
233
91
  });
234
92
  });
@@ -276,11 +134,10 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
276
134
  if (this.serverRowsCount === 0) {
277
135
  this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;
278
136
  }
279
- // NOTE: deliberately NOT overriding serverRowsCount with result.ROW.length under
280
- // CRITERIA_MATCH here (previous behaviour). ROW.length is just the first batch's size,
281
- // not the total match count - the override clobbered the corrected count resolved by
282
- // the snapshot() workaround in getRows() and made AG Grid stop requesting further
283
- // blocks after the first one.
137
+ if (this.getResourceParam('CRITERIA_MATCH') && result.ROW) {
138
+ this.serverRowsCount = result.ROW.length;
139
+ this.clientRowsCount = result.ROW.length;
140
+ }
284
141
  }
285
142
  const successRowData = {
286
143
  rowData: Array.from(this.rowData.values()),
@@ -306,39 +163,31 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
306
163
  this.resourceParams.ORDER_BY = null;
307
164
  this.resourceParams.REVERSE = null;
308
165
  yield this.refreshDatasource(params);
309
- // true = this request is superseded; the caller (getRows) must stop - see the
310
- // matching contract on setupFiltering() in server-side.resource-base.ts.
311
- return true;
166
+ return;
312
167
  }
313
168
  else if (toBeAppliedSortModel.length > 0) {
314
169
  const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user
315
170
  const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;
316
171
  const orderByAndToBeSortedColIds = this.getOrderByAndToBeSortedColIds(this.resourceIndexes, coldIdBeingSorted);
317
172
  if (!orderByAndToBeSortedColIds) {
173
+ this.calculatedRowsCount = 0;
318
174
  const availableIndexes = getAvailableIndexes(this.resourceIndexes);
319
175
  const availableIndexFields = getAvailableIndexFields(this.resourceIndexes);
320
- logger.warn(`The FIELD/column (${coldIdBeingSorted}) being sorted is not part of an INDEX, required for the [orderBy] operation - ignoring this sort and loading unsorted data. See https://learn.genesis.global/docs/database/data-types/index-entities/`);
176
+ logger.warn(`The FIELD/column (${coldIdBeingSorted}) being sorted is not part of an INDEX, required for the [orderBy] operation. See https://learn.genesis.global/docs/database/data-types/index-entities/`);
321
177
  logger.debug('Available indexes:', availableIndexes);
322
178
  logger.debug('Columns that can be sorted with the available indexes:', availableIndexFields);
323
- // Ignore the un-sortable sort instead of failing the request. Failing here killed
324
- // the ENTIRE first load (single "ERR" row, nothing ever loads) when a RESTORED
325
- // grid workspace/settings carried a sort on a non-indexed column - the user had no
326
- // way to recover except clearing the sort manually. Remember the model so
327
- // identical follow-up requests don't re-warn, leave ORDER_BY/REVERSE untouched,
328
- // and let getRows() carry on unsorted.
329
- this.currentSortModel = toBeAppliedSortModel;
330
- return false;
179
+ params.fail();
180
+ return;
331
181
  }
332
182
  else if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {
333
183
  this.currentSortModel = toBeAppliedSortModel;
334
184
  this.resourceParams.ORDER_BY = orderByAndToBeSortedColIds.orderBy;
335
185
  this.resourceParams.REVERSE = sortTypeBeingApplied === 'desc' ? true : false;
336
186
  yield this.refreshDatasource(params);
337
- return true;
187
+ return;
338
188
  }
339
189
  }
340
190
  }
341
- return false;
342
191
  });
343
192
  }
344
193
  destroy() {
@@ -354,45 +203,14 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
354
203
  });
355
204
  }
356
205
  handleCurrentStreamLoad(result) {
357
- var _a, _b, _c, _d, _e;
206
+ var _a, _b;
358
207
  if (!result)
359
208
  return;
360
- // Pagination swaps whole pages, so each message replaces the buffer (original behaviour).
361
- // Infinite scroll instead accumulates a session-cumulative cache: GSF splits one MAX_ROWS
362
- // batch across several incremental messages when a CRITERIA_MATCH filter is selective, and
363
- // later batches append after earlier ones - replacing the buffer on every message threw
364
- // away all but the latest fragment (see the accumulation comment in getRows()). Maps
365
- // preserve insertion order, so the cache stays in server delivery order and can be sliced
366
- // by block range.
367
- const rows = this.pagination ? new Map() : new Map(this.rowData);
209
+ const rows = new Map();
368
210
  (_a = result.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {
369
211
  rows.set(insertData[this.rowId], insertData);
370
212
  });
371
- // Live QUERY_UPDATE messages can arrive on this stream while a block is pending: MODIFY
372
- // rows may be partial (only changed fields), so merge them into the cached row rather than
373
- // clobbering it; DELETE rows drop out of the cache. (Previously an update/delete-only
374
- // message replaced the whole buffer with an EMPTY map, wiping every loaded row.)
375
- (_b = result.updates) === null || _b === void 0 ? void 0 : _b.forEach((updateData) => {
376
- const key = updateData === null || updateData === void 0 ? void 0 : updateData[this.rowId];
377
- if (key === undefined) {
378
- return;
379
- }
380
- const existing = rows.get(key);
381
- rows.set(key, existing ? Object.assign(Object.assign({}, existing), updateData) : updateData);
382
- });
383
- (_c = result.deletes) === null || _c === void 0 ? void 0 : _c.forEach((deleteData) => {
384
- const key = deleteData === null || deleteData === void 0 ? void 0 : deleteData[this.rowId];
385
- if (key !== undefined) {
386
- rows.delete(key);
387
- }
388
- });
389
- this.clientRowsCount += (_e = (_d = result.inserts) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0;
213
+ this.clientRowsCount += (_b = result.inserts.length) !== null && _b !== void 0 ? _b : 0;
390
214
  this.rowData = rows;
391
215
  }
392
216
  }
393
- /**
394
- * How long a non-paginated SSRM block may stay pending before it is force-resolved with
395
- * whatever rows have accumulated so far. See the safety valve in getRows().
396
- * @internal
397
- */
398
- DataserverServerSideDatasource.BLOCK_RESOLVE_TIMEOUT_MS = 10000;
@@ -255,7 +255,7 @@ export class ReqRepServerSideDatasource extends BaseServerSideDatasource {
255
255
  this.currentSortModel = null;
256
256
  this.resourceParams.DETAILS.ORDER_BY = undefined;
257
257
  yield this.refreshDatasource(params);
258
- return true;
258
+ return;
259
259
  }
260
260
  else if (toBeAppliedSortModel.length > 0) {
261
261
  const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user
@@ -266,11 +266,10 @@ export class ReqRepServerSideDatasource extends BaseServerSideDatasource {
266
266
  this.resourceParams.DETAILS.ORDER_BY =
267
267
  coldIdBeingSorted + (sortTypeBeingApplied === 'desc' ? ' DESC' : ' ASC'); // Use the column directly
268
268
  yield this.refreshDatasource(params);
269
- return true;
269
+ return;
270
270
  }
271
271
  }
272
272
  }
273
- return false;
274
273
  });
275
274
  }
276
275
  refreshDatasource(params) {
package/dist/react.cjs CHANGED
@@ -121,6 +121,11 @@ const StringEditor = React.forwardRef(function StringEditor(props, ref) {
121
121
  return React.createElement(customElements.getName(StringEditorWC) ?? '%%prefix%%-string-editor', { ...rest, ref }, children);
122
122
  });
123
123
 
124
+ const GridProColumn = React.forwardRef(function GridProColumn(props, ref) {
125
+ const { children, ...rest } = props;
126
+ return React.createElement(customElements.getName(GridProColumnWC) ?? 'grid-pro-column', { ...rest, ref }, children);
127
+ });
128
+
124
129
  const ActionRenderer = React.forwardRef(function ActionRenderer(props, ref) {
125
130
  const { children, ...rest } = props;
126
131
  return React.createElement(customElements.getName(ActionRendererWC) ?? '%%prefix%%-grid-pro-action-renderer', { ...rest, ref }, children);
@@ -161,11 +166,6 @@ const AgTextRenderer = React.forwardRef(function AgTextRenderer(props, ref) {
161
166
  return React.createElement(customElements.getName(AgTextRendererWC) ?? '%%prefix%%-grid-text-renderer', { ...rest, ref }, children);
162
167
  });
163
168
 
164
- const GridProColumn = React.forwardRef(function GridProColumn(props, ref) {
165
- const { children, ...rest } = props;
166
- return React.createElement(customElements.getName(GridProColumnWC) ?? 'grid-pro-column', { ...rest, ref }, children);
167
- });
168
-
169
169
  const GridProClientSideDatasource = React.forwardRef(function GridProClientSideDatasource(props, ref) {
170
170
  const { onBaseDatasourceError, onDatasourceError, onBaseDatasourceConnected, onDatasourceLoadingFinished, onDatasourceNoDataAvailable, onDatasourceDataChanged, onDatasourceInitialize, onDatasourceDestroy, onDatasourceDataCleared, onDatasourceSchemaUpdated, onDatasourceFiltersRestored, onDatasourceDataLoaded, onDatasourceLoadingStarted, onDatasourceMoreDataAvailable, onDatasourceReady, onDatasourceInit, onMoreRowsChanged, onDatasourceSizeChanged, children, ...rest } = props;
171
171
  const _innerRef = React.useRef(null);
@@ -491,6 +491,7 @@ module.exports = {
491
491
  NumberEditor,
492
492
  SelectEditor,
493
493
  StringEditor,
494
+ GridProColumn,
494
495
  ActionRenderer,
495
496
  ActionsMenuRenderer,
496
497
  BooleanRenderer,
@@ -499,7 +500,6 @@ module.exports = {
499
500
  StatusPillRenderer,
500
501
  AgTextFieldRenderer,
501
502
  AgTextRenderer,
502
- GridProColumn,
503
503
  GridProClientSideDatasource,
504
504
  GridProServerSideDatasource,
505
505
  GridProGenesisDatasource,
package/dist/react.mjs CHANGED
@@ -119,6 +119,11 @@ export const StringEditor = React.forwardRef(function StringEditor(props, ref) {
119
119
  return React.createElement(customElements.getName(StringEditorWC) ?? '%%prefix%%-string-editor', { ...rest, ref }, children);
120
120
  });
121
121
 
122
+ export const GridProColumn = React.forwardRef(function GridProColumn(props, ref) {
123
+ const { children, ...rest } = props;
124
+ return React.createElement(customElements.getName(GridProColumnWC) ?? 'grid-pro-column', { ...rest, ref }, children);
125
+ });
126
+
122
127
  export const ActionRenderer = React.forwardRef(function ActionRenderer(props, ref) {
123
128
  const { children, ...rest } = props;
124
129
  return React.createElement(customElements.getName(ActionRendererWC) ?? '%%prefix%%-grid-pro-action-renderer', { ...rest, ref }, children);
@@ -159,11 +164,6 @@ export const AgTextRenderer = React.forwardRef(function AgTextRenderer(props, re
159
164
  return React.createElement(customElements.getName(AgTextRendererWC) ?? '%%prefix%%-grid-text-renderer', { ...rest, ref }, children);
160
165
  });
161
166
 
162
- export const GridProColumn = React.forwardRef(function GridProColumn(props, ref) {
163
- const { children, ...rest } = props;
164
- return React.createElement(customElements.getName(GridProColumnWC) ?? 'grid-pro-column', { ...rest, ref }, children);
165
- });
166
-
167
167
  export const GridProClientSideDatasource = React.forwardRef(function GridProClientSideDatasource(props, ref) {
168
168
  const { onBaseDatasourceError, onDatasourceError, onBaseDatasourceConnected, onDatasourceLoadingFinished, onDatasourceNoDataAvailable, onDatasourceDataChanged, onDatasourceInitialize, onDatasourceDestroy, onDatasourceDataCleared, onDatasourceSchemaUpdated, onDatasourceFiltersRestored, onDatasourceDataLoaded, onDatasourceLoadingStarted, onDatasourceMoreDataAvailable, onDatasourceReady, onDatasourceInit, onMoreRowsChanged, onDatasourceSizeChanged, children, ...rest } = props;
169
169
  const _innerRef = React.useRef(null);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/grid-pro",
3
3
  "description": "Genesis Foundation AG Grid",
4
- "version": "14.481.1-alpha-69af5f8.0",
4
+ "version": "14.481.1",
5
5
  "sideEffects": false,
6
6
  "license": "SEE LICENSE IN license.txt",
7
7
  "main": "dist/esm/index.js",
@@ -40,20 +40,20 @@
40
40
  }
41
41
  },
42
42
  "devDependencies": {
43
- "@genesislcap/foundation-testing": "14.481.1-alpha-69af5f8.0",
44
- "@genesislcap/genx": "14.481.1-alpha-69af5f8.0",
45
- "@genesislcap/rollup-builder": "14.481.1-alpha-69af5f8.0",
46
- "@genesislcap/ts-builder": "14.481.1-alpha-69af5f8.0",
47
- "@genesislcap/uvu-playwright-builder": "14.481.1-alpha-69af5f8.0",
48
- "@genesislcap/vite-builder": "14.481.1-alpha-69af5f8.0",
49
- "@genesislcap/webpack-builder": "14.481.1-alpha-69af5f8.0"
43
+ "@genesislcap/foundation-testing": "14.481.1",
44
+ "@genesislcap/genx": "14.481.1",
45
+ "@genesislcap/rollup-builder": "14.481.1",
46
+ "@genesislcap/ts-builder": "14.481.1",
47
+ "@genesislcap/uvu-playwright-builder": "14.481.1",
48
+ "@genesislcap/vite-builder": "14.481.1",
49
+ "@genesislcap/webpack-builder": "14.481.1"
50
50
  },
51
51
  "dependencies": {
52
- "@genesislcap/foundation-comms": "14.481.1-alpha-69af5f8.0",
53
- "@genesislcap/foundation-criteria": "14.481.1-alpha-69af5f8.0",
54
- "@genesislcap/foundation-logger": "14.481.1-alpha-69af5f8.0",
55
- "@genesislcap/foundation-ui": "14.481.1-alpha-69af5f8.0",
56
- "@genesislcap/foundation-utils": "14.481.1-alpha-69af5f8.0",
52
+ "@genesislcap/foundation-comms": "14.481.1",
53
+ "@genesislcap/foundation-criteria": "14.481.1",
54
+ "@genesislcap/foundation-logger": "14.481.1",
55
+ "@genesislcap/foundation-ui": "14.481.1",
56
+ "@genesislcap/foundation-utils": "14.481.1",
57
57
  "@microsoft/fast-colors": "5.3.1",
58
58
  "@microsoft/fast-components": "2.30.6",
59
59
  "@microsoft/fast-element": "1.14.0",
@@ -91,5 +91,5 @@
91
91
  "require": "./dist/react.cjs"
92
92
  }
93
93
  },
94
- "gitHead": "ace4f24de5b1fabb4c07b24fb601a5b797ac6876"
94
+ "gitHead": "ec791d244e2462e29460e07998203398336d231b"
95
95
  }