@genesislcap/grid-pro 14.482.2-alpha-397d953.0 → 14.483.0
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/custom-elements.json +509 -829
- package/dist/dts/datasource/server-side.datasource.d.ts.map +1 -1
- package/dist/dts/datasource/server-side.resource-base.d.ts +2 -23
- package/dist/dts/datasource/server-side.resource-base.d.ts.map +1 -1
- package/dist/dts/datasource/server-side.resource-dataserver.d.ts +1 -32
- package/dist/dts/datasource/server-side.resource-dataserver.d.ts.map +1 -1
- package/dist/dts/datasource/server-side.resource-reqrep.d.ts +1 -1
- package/dist/dts/datasource/server-side.resource-reqrep.d.ts.map +1 -1
- package/dist/dts/react.d.ts +9 -9
- package/dist/esm/datasource/server-side.datasource.js +2 -13
- package/dist/esm/datasource/server-side.resource-base.js +135 -193
- package/dist/esm/datasource/server-side.resource-dataserver.js +28 -284
- package/dist/esm/datasource/server-side.resource-reqrep.js +5 -11
- package/dist/react.cjs +6 -6
- package/dist/react.mjs +5 -5
- package/package.json +14 -14
|
@@ -10,19 +10,6 @@ import { BaseServerSideDatasource } from './server-side.resource-base';
|
|
|
10
10
|
export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
11
11
|
constructor(options) {
|
|
12
12
|
super(options);
|
|
13
|
-
/**
|
|
14
|
-
* Blocks awaiting stream messages. Settled blocks remove themselves; destroy() cancels
|
|
15
|
-
* (fails) the rest so AG Grid's concurrent-request slots are always released.
|
|
16
|
-
* @internal
|
|
17
|
-
*/
|
|
18
|
-
this.pendingBlocks = new Set();
|
|
19
|
-
/**
|
|
20
|
-
* Highest absolute row index already handed to AG Grid this session (non-pagination).
|
|
21
|
-
* Live DELETEs below this watermark must not remove cache entries - see
|
|
22
|
-
* handleCurrentStreamLoad.
|
|
23
|
-
* @internal
|
|
24
|
-
*/
|
|
25
|
-
this.deliveredRowCount = 0;
|
|
26
13
|
this.createDataserverStreamFunc = options.createDataserverStreamFunc;
|
|
27
14
|
}
|
|
28
15
|
refreshDatasource(params) {
|
|
@@ -31,32 +18,18 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
31
18
|
});
|
|
32
19
|
return __awaiter(this, void 0, void 0, function* () {
|
|
33
20
|
var _a;
|
|
34
|
-
this.cancelAllPendingBlocks();
|
|
35
21
|
(_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
36
22
|
this.dataserverStreamSubscription = undefined;
|
|
37
23
|
this.dataserverStream = undefined;
|
|
38
|
-
this.deliveredRowCount = 0;
|
|
39
24
|
yield _super.refreshDatasource.call(this, params);
|
|
40
25
|
});
|
|
41
26
|
}
|
|
42
27
|
getRows(params) {
|
|
43
28
|
return __awaiter(this, void 0, void 0, function* () {
|
|
44
29
|
var _a, _b;
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
// via params.fail() - AG Grid caps concurrent requests and only frees a slot on
|
|
49
|
-
// success()/fail(); a silent return leaks the slot until the grid stops issuing
|
|
50
|
-
// getRows() entirely. fail() is safe here: the purge already destroyed the cache this
|
|
51
|
-
// request belonged to.
|
|
52
|
-
if (yield this.setupFiltering(params)) {
|
|
53
|
-
params.fail();
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (yield this.setupSorting(params)) {
|
|
57
|
-
params.fail();
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
30
|
+
// Use separated filtering and sorting setup
|
|
31
|
+
yield this.setupFiltering(params);
|
|
32
|
+
yield this.setupSorting(params);
|
|
60
33
|
if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {
|
|
61
34
|
const requestFilter = JSON.stringify((_a = params.request.filterModel) !== null && _a !== void 0 ? _a : {});
|
|
62
35
|
const currentFilter = JSON.stringify((_b = this.currentFilterModel) !== null && _b !== void 0 ? _b : {});
|
|
@@ -68,20 +41,7 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
68
41
|
if (!this.dataserverStream) {
|
|
69
42
|
this.dataserverStream = yield this.createDataserverStreamFunc(this.resourceParams);
|
|
70
43
|
}
|
|
71
|
-
const blockStartRow = Number.isFinite(Number(params.request.startRow))
|
|
72
|
-
? Number(params.request.startRow)
|
|
73
|
-
: 0;
|
|
74
|
-
const blockEndRow = Number.isFinite(Number(params.request.endRow))
|
|
75
|
-
? Number(params.request.endRow)
|
|
76
|
-
: blockStartRow + Number(this.maxRows);
|
|
77
|
-
// Infinite scroll keeps a session-cumulative row cache (see handleCurrentStreamLoad);
|
|
78
|
-
// when it already covers this block, or the stream ended, no further stream messages
|
|
79
|
-
// will arrive for this request - resolve it synchronously from the cache.
|
|
80
|
-
const blockAlreadyCovered = !this.pagination &&
|
|
81
|
-
this.currentSequenceId >= 1 &&
|
|
82
|
-
(this.rowData.size >= blockEndRow || !this.moreRows);
|
|
83
44
|
if (this.currentSequenceId >= 1 &&
|
|
84
|
-
!blockAlreadyCovered &&
|
|
85
45
|
(this.moreRows || params.request.startRow >= Number(this.maxRows))) {
|
|
86
46
|
if (this.pagination) {
|
|
87
47
|
const startRow = Number.isFinite(Number(params.request.startRow))
|
|
@@ -98,96 +58,16 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
98
58
|
this.connect.getMoreRows(this.sourceRef, viewNumber);
|
|
99
59
|
}
|
|
100
60
|
}
|
|
101
|
-
// One shared stream subscription for the session; each getRows() registers a pending
|
|
102
|
-
// block instead of subscribing again (.unsubscribe() would send DATA_LOGOFF and kill
|
|
103
|
-
// the whole server-side session).
|
|
104
61
|
let applyResult = true;
|
|
105
|
-
|
|
106
|
-
if (timer !== undefined) {
|
|
107
|
-
clearTimeout(timer);
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
const pendingBlock = { handle: () => { }, cancel: () => { } };
|
|
111
|
-
const settleBlock = () => {
|
|
112
|
-
this.pendingBlocks.delete(pendingBlock);
|
|
113
|
-
};
|
|
114
|
-
const resolveBlock = (timer) => {
|
|
115
|
-
if (!applyResult) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
applyResult = false;
|
|
119
|
-
clearSafetyTimer(timer);
|
|
120
|
-
settleBlock();
|
|
121
|
-
if (!this.pagination) {
|
|
122
|
-
this.deliveredRowCount = Math.max(this.deliveredRowCount, blockEndRow);
|
|
123
|
-
}
|
|
124
|
-
const allRows = Array.from(this.rowData.values());
|
|
125
|
-
const successRowData = {
|
|
126
|
-
// Non-pagination: deliver only this block's slice of the cache - AG Grid SSRM
|
|
127
|
-
// expects exactly the rows for its startRow..endRow range.
|
|
128
|
-
rowData: this.pagination ? allRows : allRows.slice(blockStartRow, blockEndRow),
|
|
129
|
-
};
|
|
130
|
-
successRowData.rowCount = this.getCorrectRowCount(params);
|
|
131
|
-
this.lastSuccessRowData = successRowData;
|
|
132
|
-
params.success(successRowData);
|
|
133
|
-
this.notifyNoDataAvailableIfEmpty(params, successRowData);
|
|
134
|
-
};
|
|
135
|
-
const failBlock = (timer) => {
|
|
136
|
-
if (!applyResult) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
applyResult = false;
|
|
140
|
-
clearSafetyTimer(timer);
|
|
141
|
-
settleBlock();
|
|
142
|
-
params.fail();
|
|
143
|
-
};
|
|
144
|
-
if (blockAlreadyCovered) {
|
|
145
|
-
resolveBlock();
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
// Safety valve: never leave a block pending forever if the stream goes quiet - resolve
|
|
149
|
-
// short with the accumulated rows so AG Grid ends the dataset there.
|
|
150
|
-
const safetyTimer = setTimeout(() => {
|
|
151
|
-
if (applyResult) {
|
|
152
|
-
logger.warn(`SSRM block ${blockStartRow}-${blockEndRow} for ${this.resourceName} timed out waiting for a full batch; resolving with ${this.rowData.size} accumulated row(s).`);
|
|
153
|
-
resolveBlock(safetyTimer);
|
|
154
|
-
}
|
|
155
|
-
}, DataserverServerSideDatasource.BLOCK_RESOLVE_TIMEOUT_MS);
|
|
156
|
-
pendingBlock.cancel = () => failBlock(safetyTimer);
|
|
157
|
-
pendingBlock.handle = (dataserverResult) => {
|
|
62
|
+
this.dataserverStreamSubscription = this.dataserverStream.subscribe((dataserverResult) => {
|
|
158
63
|
var _a;
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (this.errorHandlerFunc) {
|
|
163
|
-
const errorMessage = messageType === MessageType.LOGOFF_ACK
|
|
164
|
-
? `Connection lost to ${this.resourceName}`
|
|
165
|
-
: `Authentication failed for ${this.resourceName}`;
|
|
166
|
-
this.errorHandlerFunc(errorMessage, 'connection');
|
|
167
|
-
}
|
|
168
|
-
failBlock(safetyTimer);
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
if (this.pagination) {
|
|
172
|
-
const incomingRowCount = (_a = dataserverResult === null || dataserverResult === void 0 ? void 0 : dataserverResult.ROW) === null || _a === void 0 ? void 0 : _a.length;
|
|
173
|
-
const shouldApply = applyResult || (incomingRowCount > 0 && this.rowData.size === 0);
|
|
174
|
-
if (!shouldApply) {
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
// Paginated mode keeps the original behaviour: each message resolves the request
|
|
178
|
-
// (page swap).
|
|
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) {
|
|
179
67
|
DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {
|
|
180
68
|
var _a, _b;
|
|
181
|
-
if (!applyResult && !(incomingRowCount > 0 && this.rowData.size === 0)) {
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
// Claim the block synchronously, before the await below, so a concurrently queued
|
|
185
|
-
// update sees applyResult === false and bails - and so applyResult is never
|
|
186
|
-
// reassigned based on a value read before an await (require-atomic-updates).
|
|
187
|
-
applyResult = false;
|
|
188
|
-
clearSafetyTimer(safetyTimer);
|
|
189
69
|
// TODO: this is a bit of hack, due GSF not returning a different ROWS_COUNT when there is a CRITERIA_MATCH
|
|
190
|
-
if (this.resourceParams.CRITERIA_MATCH &&
|
|
70
|
+
if (this.resourceParams.CRITERIA_MATCH && this.pagination) {
|
|
191
71
|
const updatedInfo = yield this.connect.snapshot(this.resourceName, {
|
|
192
72
|
MAX_ROWS: this.maxView,
|
|
193
73
|
MAX_VIEW: this.maxView,
|
|
@@ -199,95 +79,18 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
199
79
|
this.clientRowsCount = 0;
|
|
200
80
|
}
|
|
201
81
|
else {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
const rowsCount = (_a = updatedInfo.ROWS_COUNT) !== null && _a !== void 0 ? _a : 0;
|
|
206
|
-
const rowLength = (_b = updatedInfo.ROW) === null || _b === void 0 ? void 0 : _b.length;
|
|
207
|
-
this.serverRowsCount =
|
|
208
|
-
rowLength !== undefined ? Math.max(rowsCount, rowLength) : rowsCount;
|
|
209
|
-
this.criteriaRowCountResolved = true;
|
|
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;
|
|
210
85
|
}
|
|
211
86
|
}
|
|
212
87
|
this.applyServerSideData(params, dataserverResult);
|
|
213
|
-
|
|
88
|
+
applyResult = false;
|
|
214
89
|
}));
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
if (!applyResult) {
|
|
218
|
-
return;
|
|
219
90
|
}
|
|
220
|
-
|
|
221
|
-
// decide whether this block is ready to resolve.
|
|
222
|
-
if (this.currentSequenceId === 0 && !(dataserverResult === null || dataserverResult === void 0 ? void 0 : dataserverResult.ROW) && !this.moreRows) {
|
|
223
|
-
// First response carries no rows - the criteria matches nothing; resolve as
|
|
224
|
-
// empty instead of waiting for the timeout.
|
|
225
|
-
applyResult = false;
|
|
226
|
-
clearSafetyTimer(safetyTimer);
|
|
227
|
-
settleBlock();
|
|
228
|
-
this.completeEmptyResult(params);
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
if (this.rowData.size >= blockEndRow || !this.moreRows) {
|
|
232
|
-
DOM.queueUpdate(() => resolveBlock(safetyTimer));
|
|
233
|
-
}
|
|
234
|
-
};
|
|
235
|
-
this.pendingBlocks.add(pendingBlock);
|
|
236
|
-
this.ensureStreamSubscription();
|
|
91
|
+
});
|
|
237
92
|
});
|
|
238
93
|
}
|
|
239
|
-
/** @internal */
|
|
240
|
-
cancelAllPendingBlocks() {
|
|
241
|
-
const blocks = Array.from(this.pendingBlocks);
|
|
242
|
-
this.pendingBlocks.clear();
|
|
243
|
-
for (const block of blocks) {
|
|
244
|
-
block.cancel();
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Lazily attaches the single stream subscription for this datasource session.
|
|
249
|
-
* @internal
|
|
250
|
-
*/
|
|
251
|
-
ensureStreamSubscription() {
|
|
252
|
-
if (this.dataserverStreamSubscription) {
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
this.dataserverStreamSubscription = this.dataserverStream.subscribe((dataserverResult) => this.dispatchStreamMessage(dataserverResult));
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Fan-out: accumulate shared infinite-scroll state once, then notify each pending block.
|
|
259
|
-
* @internal
|
|
260
|
-
*/
|
|
261
|
-
dispatchStreamMessage(dataserverResult) {
|
|
262
|
-
var _a;
|
|
263
|
-
const messageType = dataserverResult === null || dataserverResult === void 0 ? void 0 : dataserverResult.MESSAGE_TYPE;
|
|
264
|
-
if (messageType &&
|
|
265
|
-
(messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {
|
|
266
|
-
for (const block of this.pendingBlocks) {
|
|
267
|
-
block.handle(dataserverResult);
|
|
268
|
-
}
|
|
269
|
-
return;
|
|
270
|
-
}
|
|
271
|
-
if (!this.pagination) {
|
|
272
|
-
if ((dataserverResult === null || dataserverResult === void 0 ? void 0 : dataserverResult.MORE_ROWS) !== undefined) {
|
|
273
|
-
this.moreRows = dataserverResult.MORE_ROWS;
|
|
274
|
-
}
|
|
275
|
-
if (dataserverResult === null || dataserverResult === void 0 ? void 0 : dataserverResult.ROW) {
|
|
276
|
-
const nextMessage = dataServerResultFilter(dataserverResult, this.rowId);
|
|
277
|
-
this.handleCurrentStreamLoad(nextMessage);
|
|
278
|
-
this.currentSequenceId = dataserverResult.SEQUENCE_ID;
|
|
279
|
-
if (this.currentSequenceId === 1) {
|
|
280
|
-
this.sourceRef = dataserverResult.SOURCE_REF;
|
|
281
|
-
if (this.serverRowsCount === 0) {
|
|
282
|
-
this.serverRowsCount = (_a = dataserverResult.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
for (const block of this.pendingBlocks) {
|
|
288
|
-
block.handle(dataserverResult);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
94
|
applyServerSideData(params, result) {
|
|
292
95
|
var _a;
|
|
293
96
|
const messageType = result.MESSAGE_TYPE;
|
|
@@ -305,7 +108,7 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
305
108
|
}
|
|
306
109
|
this.moreRows = result.MORE_ROWS;
|
|
307
110
|
if (result.ROW) {
|
|
308
|
-
const nextMessage = dataServerResultFilter(result
|
|
111
|
+
const nextMessage = dataServerResultFilter(result);
|
|
309
112
|
this.handleCurrentStreamLoad(nextMessage);
|
|
310
113
|
}
|
|
311
114
|
else {
|
|
@@ -331,9 +134,10 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
331
134
|
if (this.serverRowsCount === 0) {
|
|
332
135
|
this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;
|
|
333
136
|
}
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
137
|
+
if (this.getResourceParam('CRITERIA_MATCH') && result.ROW) {
|
|
138
|
+
this.serverRowsCount = result.ROW.length;
|
|
139
|
+
this.clientRowsCount = result.ROW.length;
|
|
140
|
+
}
|
|
337
141
|
}
|
|
338
142
|
const successRowData = {
|
|
339
143
|
rowData: Array.from(this.rowData.values()),
|
|
@@ -349,7 +153,7 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
349
153
|
*/
|
|
350
154
|
setupSorting(params) {
|
|
351
155
|
return __awaiter(this, void 0, void 0, function* () {
|
|
352
|
-
var _a
|
|
156
|
+
var _a;
|
|
353
157
|
const toBeAppliedSortModel = params.request.sortModel;
|
|
354
158
|
if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||
|
|
355
159
|
toBeAppliedSortModel.length > 0) {
|
|
@@ -359,49 +163,31 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
359
163
|
this.resourceParams.ORDER_BY = null;
|
|
360
164
|
this.resourceParams.REVERSE = null;
|
|
361
165
|
yield this.refreshDatasource(params);
|
|
362
|
-
return
|
|
166
|
+
return;
|
|
363
167
|
}
|
|
364
168
|
else if (toBeAppliedSortModel.length > 0) {
|
|
365
169
|
const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user
|
|
366
170
|
const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;
|
|
367
171
|
const orderByAndToBeSortedColIds = this.getOrderByAndToBeSortedColIds(this.resourceIndexes, coldIdBeingSorted);
|
|
368
172
|
if (!orderByAndToBeSortedColIds) {
|
|
173
|
+
this.calculatedRowsCount = 0;
|
|
369
174
|
const availableIndexes = getAvailableIndexes(this.resourceIndexes);
|
|
370
175
|
const availableIndexFields = getAvailableIndexFields(this.resourceIndexes);
|
|
371
|
-
logger.warn(`The FIELD/column (${coldIdBeingSorted}) being sorted is not part of an INDEX, required for the [orderBy] operation
|
|
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/`);
|
|
372
177
|
logger.debug('Available indexes:', availableIndexes);
|
|
373
178
|
logger.debug('Columns that can be sorted with the available indexes:', availableIndexFields);
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
const sortModelChanged = JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel);
|
|
377
|
-
const hadPreviousSort = ((_c = (_b = this.currentSortModel) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0) > 0;
|
|
378
|
-
const hasActiveOrderBy = this.resourceParams.ORDER_BY != null || this.resourceParams.REVERSE != null;
|
|
379
|
-
// Remember the model so identical requests don't re-warn, and carry on unsorted.
|
|
380
|
-
this.currentSortModel = toBeAppliedSortModel;
|
|
381
|
-
// A previously applied (indexed) sort left ORDER_BY/REVERSE pointing at the old
|
|
382
|
-
// column; clear them and reload once so the grid shows genuinely unsorted data
|
|
383
|
-
// instead of the old column's order under the ignored new sort's header. Gated by
|
|
384
|
-
// hadPreviousSort so a first-load restored sort still just carries on (no extra
|
|
385
|
-
// reload), and by sortModelChanged so the post-refresh getRows() (same model) does
|
|
386
|
-
// not loop.
|
|
387
|
-
if (hadPreviousSort && sortModelChanged && hasActiveOrderBy) {
|
|
388
|
-
this.resourceParams.ORDER_BY = null;
|
|
389
|
-
this.resourceParams.REVERSE = null;
|
|
390
|
-
yield this.refreshDatasource(params);
|
|
391
|
-
return true;
|
|
392
|
-
}
|
|
393
|
-
return false;
|
|
179
|
+
params.fail();
|
|
180
|
+
return;
|
|
394
181
|
}
|
|
395
182
|
else if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {
|
|
396
183
|
this.currentSortModel = toBeAppliedSortModel;
|
|
397
184
|
this.resourceParams.ORDER_BY = orderByAndToBeSortedColIds.orderBy;
|
|
398
185
|
this.resourceParams.REVERSE = sortTypeBeingApplied === 'desc' ? true : false;
|
|
399
186
|
yield this.refreshDatasource(params);
|
|
400
|
-
return
|
|
187
|
+
return;
|
|
401
188
|
}
|
|
402
189
|
}
|
|
403
190
|
}
|
|
404
|
-
return false;
|
|
405
191
|
});
|
|
406
192
|
}
|
|
407
193
|
destroy() {
|
|
@@ -410,63 +196,21 @@ export class DataserverServerSideDatasource extends BaseServerSideDatasource {
|
|
|
410
196
|
});
|
|
411
197
|
return __awaiter(this, void 0, void 0, function* () {
|
|
412
198
|
var _a;
|
|
413
|
-
this.cancelAllPendingBlocks();
|
|
414
199
|
this.dataserverStream = undefined;
|
|
415
200
|
(_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
|
|
416
201
|
this.dataserverStreamSubscription = undefined;
|
|
417
|
-
this.deliveredRowCount = 0;
|
|
418
202
|
yield _super.destroy.call(this);
|
|
419
203
|
});
|
|
420
204
|
}
|
|
421
205
|
handleCurrentStreamLoad(result) {
|
|
422
|
-
var _a, _b
|
|
206
|
+
var _a, _b;
|
|
423
207
|
if (!result)
|
|
424
208
|
return;
|
|
425
|
-
|
|
426
|
-
// session-cumulative cache, as GSF splits batches across messages and later batches
|
|
427
|
-
// append. Map preserves insertion order, so the cache can be sliced by block range.
|
|
428
|
-
const rows = this.pagination ? new Map() : new Map(this.rowData);
|
|
209
|
+
const rows = new Map();
|
|
429
210
|
(_a = result.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {
|
|
430
211
|
rows.set(insertData[this.rowId], insertData);
|
|
431
212
|
});
|
|
432
|
-
|
|
433
|
-
// partial, so merge into the cached row instead of clobbering it; DELETE rows drop out.
|
|
434
|
-
(_b = result.updates) === null || _b === void 0 ? void 0 : _b.forEach((updateData) => {
|
|
435
|
-
const key = updateData === null || updateData === void 0 ? void 0 : updateData[this.rowId];
|
|
436
|
-
if (key === undefined) {
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
const existing = rows.get(key);
|
|
440
|
-
rows.set(key, existing ? Object.assign(Object.assign({}, existing), updateData) : updateData);
|
|
441
|
-
});
|
|
442
|
-
(_c = result.deletes) === null || _c === void 0 ? void 0 : _c.forEach((deleteData) => {
|
|
443
|
-
const key = deleteData === null || deleteData === void 0 ? void 0 : deleteData[this.rowId];
|
|
444
|
-
if (key === undefined) {
|
|
445
|
-
return;
|
|
446
|
-
}
|
|
447
|
-
// Rows already handed to AG Grid sit at fixed absolute indices; removing them from
|
|
448
|
-
// the cumulative cache would shift slice() offsets for later blocks.
|
|
449
|
-
if (!this.pagination && this.deliveredRowCount > 0) {
|
|
450
|
-
let index = 0;
|
|
451
|
-
for (const mapKey of rows.keys()) {
|
|
452
|
-
if (mapKey === key) {
|
|
453
|
-
if (index < this.deliveredRowCount) {
|
|
454
|
-
return;
|
|
455
|
-
}
|
|
456
|
-
break;
|
|
457
|
-
}
|
|
458
|
-
index += 1;
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
rows.delete(key);
|
|
462
|
-
});
|
|
463
|
-
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;
|
|
464
214
|
this.rowData = rows;
|
|
465
215
|
}
|
|
466
216
|
}
|
|
467
|
-
/**
|
|
468
|
-
* Max time a non-paginated SSRM block may stay pending before the safety valve in
|
|
469
|
-
* getRows() resolves it with the rows accumulated so far.
|
|
470
|
-
* @internal
|
|
471
|
-
*/
|
|
472
|
-
DataserverServerSideDatasource.BLOCK_RESOLVE_TIMEOUT_MS = 10000;
|
|
@@ -41,14 +41,9 @@ export class ReqRepServerSideDatasource extends BaseServerSideDatasource {
|
|
|
41
41
|
}
|
|
42
42
|
getRows(params) {
|
|
43
43
|
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
if (yield this.setupSorting(params)) {
|
|
49
|
-
params.fail();
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
44
|
+
// Use custom filtering and sorting setup for req-rep
|
|
45
|
+
yield this.setupFiltering(params);
|
|
46
|
+
yield this.setupSorting(params);
|
|
52
47
|
if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {
|
|
53
48
|
params.success(this.lastSuccessRowData);
|
|
54
49
|
return;
|
|
@@ -260,7 +255,7 @@ export class ReqRepServerSideDatasource extends BaseServerSideDatasource {
|
|
|
260
255
|
this.currentSortModel = null;
|
|
261
256
|
this.resourceParams.DETAILS.ORDER_BY = undefined;
|
|
262
257
|
yield this.refreshDatasource(params);
|
|
263
|
-
return
|
|
258
|
+
return;
|
|
264
259
|
}
|
|
265
260
|
else if (toBeAppliedSortModel.length > 0) {
|
|
266
261
|
const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user
|
|
@@ -271,11 +266,10 @@ export class ReqRepServerSideDatasource extends BaseServerSideDatasource {
|
|
|
271
266
|
this.resourceParams.DETAILS.ORDER_BY =
|
|
272
267
|
coldIdBeingSorted + (sortTypeBeingApplied === 'desc' ? ' DESC' : ' ASC'); // Use the column directly
|
|
273
268
|
yield this.refreshDatasource(params);
|
|
274
|
-
return
|
|
269
|
+
return;
|
|
275
270
|
}
|
|
276
271
|
}
|
|
277
272
|
}
|
|
278
|
-
return false;
|
|
279
273
|
});
|
|
280
274
|
}
|
|
281
275
|
refreshDatasource(params) {
|
package/dist/react.cjs
CHANGED
|
@@ -121,11 +121,6 @@ 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
|
-
|
|
129
124
|
const ActionRenderer = React.forwardRef(function ActionRenderer(props, ref) {
|
|
130
125
|
const { children, ...rest } = props;
|
|
131
126
|
return React.createElement(customElements.getName(ActionRendererWC) ?? '%%prefix%%-grid-pro-action-renderer', { ...rest, ref }, children);
|
|
@@ -166,6 +161,11 @@ const AgTextRenderer = React.forwardRef(function AgTextRenderer(props, ref) {
|
|
|
166
161
|
return React.createElement(customElements.getName(AgTextRendererWC) ?? '%%prefix%%-grid-text-renderer', { ...rest, ref }, children);
|
|
167
162
|
});
|
|
168
163
|
|
|
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,7 +491,6 @@ module.exports = {
|
|
|
491
491
|
NumberEditor,
|
|
492
492
|
SelectEditor,
|
|
493
493
|
StringEditor,
|
|
494
|
-
GridProColumn,
|
|
495
494
|
ActionRenderer,
|
|
496
495
|
ActionsMenuRenderer,
|
|
497
496
|
BooleanRenderer,
|
|
@@ -500,6 +499,7 @@ module.exports = {
|
|
|
500
499
|
StatusPillRenderer,
|
|
501
500
|
AgTextFieldRenderer,
|
|
502
501
|
AgTextRenderer,
|
|
502
|
+
GridProColumn,
|
|
503
503
|
GridProClientSideDatasource,
|
|
504
504
|
GridProServerSideDatasource,
|
|
505
505
|
GridProGenesisDatasource,
|
package/dist/react.mjs
CHANGED
|
@@ -119,11 +119,6 @@ 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
|
-
|
|
127
122
|
export const ActionRenderer = React.forwardRef(function ActionRenderer(props, ref) {
|
|
128
123
|
const { children, ...rest } = props;
|
|
129
124
|
return React.createElement(customElements.getName(ActionRendererWC) ?? '%%prefix%%-grid-pro-action-renderer', { ...rest, ref }, children);
|
|
@@ -164,6 +159,11 @@ export const AgTextRenderer = React.forwardRef(function AgTextRenderer(props, re
|
|
|
164
159
|
return React.createElement(customElements.getName(AgTextRendererWC) ?? '%%prefix%%-grid-text-renderer', { ...rest, ref }, children);
|
|
165
160
|
});
|
|
166
161
|
|
|
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.
|
|
4
|
+
"version": "14.483.0",
|
|
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.
|
|
44
|
-
"@genesislcap/genx": "14.
|
|
45
|
-
"@genesislcap/rollup-builder": "14.
|
|
46
|
-
"@genesislcap/ts-builder": "14.
|
|
47
|
-
"@genesislcap/uvu-playwright-builder": "14.
|
|
48
|
-
"@genesislcap/vite-builder": "14.
|
|
49
|
-
"@genesislcap/webpack-builder": "14.
|
|
43
|
+
"@genesislcap/foundation-testing": "14.483.0",
|
|
44
|
+
"@genesislcap/genx": "14.483.0",
|
|
45
|
+
"@genesislcap/rollup-builder": "14.483.0",
|
|
46
|
+
"@genesislcap/ts-builder": "14.483.0",
|
|
47
|
+
"@genesislcap/uvu-playwright-builder": "14.483.0",
|
|
48
|
+
"@genesislcap/vite-builder": "14.483.0",
|
|
49
|
+
"@genesislcap/webpack-builder": "14.483.0"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@genesislcap/foundation-comms": "14.
|
|
53
|
-
"@genesislcap/foundation-criteria": "14.
|
|
54
|
-
"@genesislcap/foundation-logger": "14.
|
|
55
|
-
"@genesislcap/foundation-ui": "14.
|
|
56
|
-
"@genesislcap/foundation-utils": "14.
|
|
52
|
+
"@genesislcap/foundation-comms": "14.483.0",
|
|
53
|
+
"@genesislcap/foundation-criteria": "14.483.0",
|
|
54
|
+
"@genesislcap/foundation-logger": "14.483.0",
|
|
55
|
+
"@genesislcap/foundation-ui": "14.483.0",
|
|
56
|
+
"@genesislcap/foundation-utils": "14.483.0",
|
|
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": "
|
|
94
|
+
"gitHead": "28a6b21ae981f0a10a9a49b503aa0a3c99146da9"
|
|
95
95
|
}
|