@vuu-ui/vuu-data-remote 0.13.41 → 0.13.43

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.
@@ -20,28 +20,6 @@ function partition(array, test, pass = [], fail = []) {
20
20
  return [pass, fail];
21
21
  }
22
22
 
23
- // ../vuu-utils/src/column-utils.ts
24
- var KEY = 6;
25
- var metadataKeys = {
26
- IDX: 0,
27
- RENDER_IDX: 1,
28
- IS_LEAF: 2,
29
- IS_EXPANDED: 3,
30
- DEPTH: 4,
31
- COUNT: 5,
32
- KEY,
33
- SELECTED: 7,
34
- TIMESTAMP: 8,
35
- IS_NEW: 9,
36
- count: 10,
37
- // TODO following only used in datamodel
38
- PARENT_IDX: "parent_idx",
39
- IDX_POINTER: "idx_pointer",
40
- FILTER_COUNT: "filter_count",
41
- NEXT_FILTER_IDX: "next_filter_idx"
42
- };
43
- var { DEPTH, IS_LEAF } = metadataKeys;
44
-
45
23
  // ../vuu-utils/src/cookie-utils.ts
46
24
  var getCookieValue = (name) => {
47
25
  var _a, _b;
@@ -432,53 +410,6 @@ var KeySet = class {
432
410
  }
433
411
  };
434
412
 
435
- // ../vuu-utils/src/selection-utils.ts
436
- var { SELECTED } = metadataKeys;
437
- var RowSelected = {
438
- False: 0,
439
- True: 1,
440
- First: 2,
441
- Last: 4
442
- };
443
- var rangeIncludes = (range, index) => index >= range[0] && index <= range[1];
444
- var SINGLE_SELECTED_ROW = RowSelected.True + RowSelected.First + RowSelected.Last;
445
- var FIRST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.First;
446
- var LAST_SELECTED_ROW_OF_BLOCK = RowSelected.True + RowSelected.Last;
447
- var getSelectionStatus = (selected, itemIndex) => {
448
- for (const item of selected) {
449
- if (typeof item === "number") {
450
- if (item === itemIndex) {
451
- return SINGLE_SELECTED_ROW;
452
- }
453
- } else if (rangeIncludes(item, itemIndex)) {
454
- if (itemIndex === item[0]) {
455
- return FIRST_SELECTED_ROW_OF_BLOCK;
456
- } else if (itemIndex === item[1]) {
457
- return LAST_SELECTED_ROW_OF_BLOCK;
458
- } else {
459
- return RowSelected.True;
460
- }
461
- }
462
- }
463
- return RowSelected.False;
464
- };
465
- var expandSelection = (selected) => {
466
- if (selected.every((selectedItem) => typeof selectedItem === "number")) {
467
- return selected;
468
- }
469
- const expandedSelected = [];
470
- for (const selectedItem of selected) {
471
- if (typeof selectedItem === "number") {
472
- expandedSelected.push(selectedItem);
473
- } else {
474
- for (let i = selectedItem[0]; i <= selectedItem[1]; i++) {
475
- expandedSelected.push(i);
476
- }
477
- }
478
- }
479
- return expandedSelected;
480
- };
481
-
482
413
  // ../vuu-utils/src/promise-utils.ts
483
414
  var _promise, _resolve, _reject, _resolved;
484
415
  var DeferredPromise = class {
@@ -524,6 +455,7 @@ var MENU_RPC_TYPES = [
524
455
  "VP_EDIT_DELETE_ROW_RPC",
525
456
  "VP_EDIT_SUBMIT_FORM_RPC"
526
457
  ];
458
+ var isSelectRequest = (message) => "type" in message && (message.type === "SELECT_ROW" || message.type === "DESELECT_ROW" || message.type === "SELECT_ROW_RANGE" || message.type === "SELECT_ALL" || message.type === "DESELECT_ALL");
527
459
  var isRpcServiceRequest = (message) => message.type === "RPC_REQUEST";
528
460
  var hasViewPortContext = (message) => message.context.type === "VIEWPORT_CONTEXT";
529
461
  var isVuuMenuRpcRequest = (message) => MENU_RPC_TYPES.includes(message["type"]);
@@ -543,6 +475,9 @@ function isSessionTableActionMessage(rpcResponse) {
543
475
  }
544
476
 
545
477
  // src/message-utils.ts
478
+ var hasRequestId = (message) => {
479
+ return "requestId" in message;
480
+ };
546
481
  var stripRequestId = ({
547
482
  requestId,
548
483
  ...rest
@@ -602,21 +537,34 @@ var createSchemaFromTableMetadata = ({
602
537
  key
603
538
  };
604
539
  };
605
- var gapBetweenLastRowSentToClient = (lastRowsReturnedToClient, pendingUpdates, clientRange) => {
540
+ var gapBetweenLastRowSentToClient = (lastRowsReturnedToClient, pendingUpdates, clientRange, rowCount) => {
606
541
  const firstPendingUpdate = pendingUpdates.at(0);
607
542
  const lastPendingUpdate = pendingUpdates.at(-1);
608
543
  if (firstPendingUpdate && lastPendingUpdate) {
544
+ const maxTo = Math.min(rowCount, clientRange.to);
609
545
  const [firstRowIndex, lastRowIndex] = lastRowsReturnedToClient;
610
546
  if (lastRowIndex < firstPendingUpdate.rowIndex - 1 && clientRange.from < firstPendingUpdate.rowIndex) {
611
547
  return {
612
548
  from: Math.max(lastRowIndex + 1, clientRange.from),
613
549
  to: firstPendingUpdate.rowIndex
614
550
  };
615
- } else if (firstRowIndex > lastPendingUpdate.rowIndex + 1 && clientRange.to > lastPendingUpdate.rowIndex) {
551
+ } else if (firstRowIndex > lastPendingUpdate.rowIndex + 1 && maxTo > lastPendingUpdate.rowIndex) {
616
552
  return {
617
553
  from: lastPendingUpdate.rowIndex + 1,
618
- to: Math.min(clientRange.to, firstRowIndex)
554
+ to: Math.min(maxTo, firstRowIndex)
619
555
  };
556
+ } else if (firstRowIndex === -1 && lastRowIndex === -1) {
557
+ if (clientRange.from < firstPendingUpdate.rowIndex) {
558
+ return {
559
+ from: clientRange.from,
560
+ to: firstPendingUpdate.rowIndex
561
+ };
562
+ } else if (maxTo > lastPendingUpdate.rowIndex + 1) {
563
+ return {
564
+ from: lastPendingUpdate.rowIndex + 1,
565
+ to: maxTo
566
+ };
567
+ }
620
568
  }
621
569
  }
622
570
  };
@@ -638,7 +586,6 @@ var LOGIN = "LOGIN";
638
586
  var OPEN_TREE_NODE = "OPEN_TREE_NODE";
639
587
  var OPEN_TREE_SUCCESS = "OPEN_TREE_SUCCESS";
640
588
  var REMOVE_VP = "REMOVE_VP";
641
- var SET_SELECTION_SUCCESS = "SET_SELECTION_SUCCESS";
642
589
 
643
590
  // src/server-proxy/array-backed-moving-window.ts
644
591
  var EMPTY_ARRAY = [];
@@ -916,7 +863,6 @@ var Viewport = class {
916
863
  __publicField(this, "pendingRangeRequests", []);
917
864
  __publicField(this, "postMessageToClient");
918
865
  __publicField(this, "rowCountChanged", false);
919
- __publicField(this, "selectedRows", []);
920
866
  __publicField(this, "lastUpdateStatus", NO_UPDATE_STATUS);
921
867
  __publicField(this, "updateThrottleTimer");
922
868
  __publicField(this, "lastRowsReturnedToClient", [-1, -1]);
@@ -935,6 +881,10 @@ var Viewport = class {
935
881
  // Records SIZE only updates
936
882
  __publicField(this, "setLastSizeOnlyUpdateSize", (size) => {
937
883
  this.lastUpdateStatus.size = size;
884
+ if (size === 0) {
885
+ this.lastRowsReturnedToClient[0] = -1;
886
+ this.lastRowsReturnedToClient[1] = -1;
887
+ }
938
888
  });
939
889
  __publicField(this, "setLastUpdate", (mode) => {
940
890
  const { ts: lastTS, mode: lastMode } = this.lastUpdateStatus;
@@ -1256,7 +1206,7 @@ var Viewport = class {
1256
1206
  return [
1257
1207
  serverRequest,
1258
1208
  clientRows.map((row) => {
1259
- return toClient(row, this.keys, this.selectedRows);
1209
+ return toClient(row, this.keys);
1260
1210
  })
1261
1211
  ];
1262
1212
  } else if (debounceRequest) {
@@ -1340,7 +1290,7 @@ var Viewport = class {
1340
1290
  const toClient = this.isTree ? toClientRowTree : toClientRow;
1341
1291
  for (const row of records) {
1342
1292
  if (row) {
1343
- out.push(toClient(row, keys, this.selectedRows));
1293
+ out.push(toClient(row, keys));
1344
1294
  }
1345
1295
  }
1346
1296
  }
@@ -1385,15 +1335,18 @@ var Viewport = class {
1385
1335
  true
1386
1336
  );
1387
1337
  }
1388
- selectRequest(requestId, selected) {
1389
- this.selectedRows = selected;
1390
- this.awaitOperation(requestId, { type: "selection", data: selected });
1391
- info == null ? void 0 : info(\`selectRequest: \${selected}\`);
1392
- return {
1393
- type: "SET_SELECTION",
1394
- vpId: this.serverViewportId,
1395
- selection: expandSelection(selected)
1396
- };
1338
+ selectRequest(request) {
1339
+ info == null ? void 0 : info(\`selectRequest: \${request.type}\`);
1340
+ if (this.serverViewportId) {
1341
+ return {
1342
+ ...request,
1343
+ vpId: this.serverViewportId
1344
+ };
1345
+ } else {
1346
+ throw Error(
1347
+ \`[Viewport] cannot process \${request.type} before serverViewportId has been set\`
1348
+ );
1349
+ }
1397
1350
  }
1398
1351
  removePendingRangeRequest(firstIndex, lastIndex) {
1399
1352
  for (let i = this.pendingRangeRequests.length - 1; i >= 0; i--) {
@@ -1461,7 +1414,7 @@ var Viewport = class {
1461
1414
  return NO_DATA_UPDATE;
1462
1415
  }
1463
1416
  if (this.hasUpdates) {
1464
- const { keys, selectedRows } = this;
1417
+ const { keys } = this;
1465
1418
  const toClient = this.isTree ? toClientRowTree : toClientRow;
1466
1419
  if (this.updateThrottleTimer) {
1467
1420
  self.clearTimeout(this.updateThrottleTimer);
@@ -1473,30 +1426,34 @@ var Viewport = class {
1473
1426
  const missingRows = gapBetweenLastRowSentToClient(
1474
1427
  this.lastRowsReturnedToClient,
1475
1428
  this.pendingUpdates,
1476
- this.dataWindow.clientRange
1429
+ this.dataWindow.clientRange,
1430
+ this.dataWindow.rowCount
1477
1431
  );
1478
1432
  if (missingRows) {
1479
1433
  for (let i = missingRows.from; i < missingRows.to; i++) {
1480
1434
  const row = this.dataWindow.getAtIndex(i);
1481
1435
  if (row) {
1482
- out.push(toClient(row, keys, selectedRows));
1436
+ out.push(toClient(row, keys));
1483
1437
  } else {
1484
1438
  console.warn("[Viewport] missing row not in data cache");
1485
1439
  }
1486
1440
  }
1487
1441
  for (const row of this.pendingUpdates) {
1488
- out.push(toClient(row, keys, selectedRows));
1442
+ out.push(toClient(row, keys));
1489
1443
  }
1490
1444
  out.sort(
1491
1445
  ([idx1], [idx2]) => idx1 - idx2
1492
1446
  );
1493
1447
  } else {
1494
1448
  for (const row of this.pendingUpdates) {
1495
- out.push(toClient(row, keys, selectedRows));
1449
+ out.push(toClient(row, keys));
1496
1450
  }
1497
1451
  }
1498
1452
  this.lastRowsReturnedToClient[0] = (_b = (_a = out.at(0)) == null ? void 0 : _a[0]) != null ? _b : -1;
1499
1453
  this.lastRowsReturnedToClient[1] = (_d = (_c = out.at(-1)) == null ? void 0 : _c[0]) != null ? _d : -1;
1454
+ } else if (this.pendingUpdates.length > 0) {
1455
+ this.lastRowsReturnedToClient[0] = -1;
1456
+ this.lastRowsReturnedToClient[1] = -1;
1500
1457
  }
1501
1458
  this.pendingUpdates.length = 0;
1502
1459
  this.hasUpdates = false;
@@ -1533,7 +1490,7 @@ var Viewport = class {
1533
1490
  _status = new WeakMap();
1534
1491
  _clientRange = new WeakMap();
1535
1492
  var isNew = false;
1536
- var toClientRow = ({ rowIndex, rowKey, sel: isSelected, data, ts }, keys, selectedRows) => {
1493
+ var toClientRow = ({ rowIndex, rowKey, sel: isSelected, data, ts }, keys) => {
1537
1494
  return [
1538
1495
  rowIndex,
1539
1496
  keys.keyFor(rowIndex),
@@ -1542,12 +1499,12 @@ var toClientRow = ({ rowIndex, rowKey, sel: isSelected, data, ts }, keys, select
1542
1499
  0,
1543
1500
  0,
1544
1501
  rowKey,
1545
- isSelected ? getSelectionStatus(selectedRows, rowIndex) : 0,
1502
+ isSelected,
1546
1503
  ts,
1547
1504
  isNew
1548
1505
  ].concat(data);
1549
1506
  };
1550
- var toClientRowTree = ({ rowIndex, rowKey, sel: isSelected, data, ts }, keys, selectedRows) => {
1507
+ var toClientRowTree = ({ rowIndex, rowKey, sel: isSelected, data, ts }, keys) => {
1551
1508
  const [depth, isExpanded, , isLeaf, , count, ...rest] = data;
1552
1509
  return [
1553
1510
  rowIndex,
@@ -1557,7 +1514,7 @@ var toClientRowTree = ({ rowIndex, rowKey, sel: isSelected, data, ts }, keys, se
1557
1514
  depth,
1558
1515
  count,
1559
1516
  rowKey,
1560
- isSelected ? getSelectionStatus(selectedRows, rowIndex) : 0,
1517
+ isSelected,
1561
1518
  ts,
1562
1519
  isNew
1563
1520
  ].concat(rest);
@@ -1700,10 +1657,6 @@ var ServerProxy = class {
1700
1657
  );
1701
1658
  }
1702
1659
  }
1703
- if (message.selectedIndexValues) {
1704
- infoEnabled2 && info2(\`selected = \${JSON.stringify(message.selectedIndexValues)}\`);
1705
- this.select(viewport, { selected: message.selectedIndexValues });
1706
- }
1707
1660
  if (viewport.disabled) {
1708
1661
  this.disableViewport(viewport);
1709
1662
  }
@@ -1863,10 +1816,9 @@ var ServerProxy = class {
1863
1816
  }
1864
1817
  }
1865
1818
  select(viewport, message) {
1866
- const requestId = nextRequestId();
1867
- const { selected } = message;
1868
- const request = viewport.selectRequest(requestId, selected);
1869
- this.sendIfReady(request, requestId, viewport.status === "subscribed");
1819
+ const [requestId, selectRequest] = stripRequestId(message);
1820
+ const request = viewport.selectRequest(selectRequest);
1821
+ this.sendMessageToServer(request, requestId);
1870
1822
  }
1871
1823
  disableViewport(viewport) {
1872
1824
  const requestId = nextRequestId();
@@ -2021,8 +1973,6 @@ var ServerProxy = class {
2021
1973
  return this.setViewRange(viewport, message);
2022
1974
  case "config":
2023
1975
  return this.setConfig(viewport, message);
2024
- case "select":
2025
- return this.select(viewport, message);
2026
1976
  case "suspend":
2027
1977
  return this.suspendViewport(viewport);
2028
1978
  case "resume":
@@ -2042,6 +1992,13 @@ var ServerProxy = class {
2042
1992
  default:
2043
1993
  }
2044
1994
  }
1995
+ } else if (isSelectRequest(message)) {
1996
+ if (hasRequestId(message)) {
1997
+ const viewport = this.getViewportForClient(message.vpId);
1998
+ return this.select(viewport, message);
1999
+ } else {
2000
+ console.warn(\`selectRequest must have requestId\`);
2001
+ }
2045
2002
  } else if (isRpcServiceRequest(message)) {
2046
2003
  return this.rpcRequest(message);
2047
2004
  } else if (isVuuMenuRpcRequest(message)) {
@@ -2130,7 +2087,7 @@ var ServerProxy = class {
2130
2087
  }
2131
2088
  }
2132
2089
  handleMessageFromServer(message) {
2133
- var _a, _b, _c;
2090
+ var _a;
2134
2091
  const { body, requestId, sessionId } = message;
2135
2092
  const pendingRequest = this.pendingRequests.get(requestId);
2136
2093
  if (pendingRequest) {
@@ -2170,13 +2127,33 @@ var ServerProxy = class {
2170
2127
  }
2171
2128
  }
2172
2129
  break;
2173
- case SET_SELECTION_SUCCESS:
2174
- {
2175
- const viewport = this.viewports.get(body.vpId);
2176
- if (viewport) {
2177
- viewport.completeOperation(requestId);
2178
- }
2179
- }
2130
+ case "SELECT_ALL_SUCCESS":
2131
+ case "SELECT_ROW_SUCCESS":
2132
+ case "SELECT_ROW_RANGE_SUCCESS":
2133
+ case "DESELECT_ROW_SUCCESS": {
2134
+ const { type, selectedRowCount } = body;
2135
+ this.postMessageToClient({
2136
+ requestId,
2137
+ type,
2138
+ selectedRowCount
2139
+ });
2140
+ break;
2141
+ }
2142
+ case "DESELECT_ALL_SUCCESS": {
2143
+ const { type } = body;
2144
+ this.postMessageToClient({
2145
+ requestId,
2146
+ type,
2147
+ selectedRowCount: 0
2148
+ });
2149
+ break;
2150
+ }
2151
+ case "SELECT_ROW_REJECT":
2152
+ case "DESELECT_ROW_REJECT":
2153
+ case "SELECT_ROW_RANGE_REJECT":
2154
+ case "SELECT_ALL_REJECT":
2155
+ case "DESELECT_ALL_REJECT":
2156
+ console.warn(\`select error \${body.type} \${body.errorMsg}\`);
2180
2157
  break;
2181
2158
  case CHANGE_VP_SUCCESS:
2182
2159
  case DISABLE_VP_SUCCESS:
@@ -2216,7 +2193,7 @@ var ServerProxy = class {
2216
2193
  {
2217
2194
  const viewportRowMap = groupRowsByViewport(body.rows);
2218
2195
  if (debugEnabled3) {
2219
- const [firstRow, secondRow] = body.rows;
2196
+ const [firstRow] = body.rows;
2220
2197
  if (body.rows.length === 0) {
2221
2198
  infoEnabled2 && info2("handleMessageFromServer TABLE_ROW 0 rows");
2222
2199
  } else if ((firstRow == null ? void 0 : firstRow.rowIndex) === -1) {
@@ -2225,9 +2202,6 @@ var ServerProxy = class {
2225
2202
  infoEnabled2 && info2(
2226
2203
  \`handleMessageFromServer [\${firstRow.viewPortId}] TABLE_ROW SIZE ONLY \${firstRow.vpSize}\`
2227
2204
  );
2228
- infoEnabled2 && info2(
2229
- \`handleMessageFromServer [\${firstRow.viewPortId}] TABLE_ROW SIZE ONLY \${firstRow.vpSize}\`
2230
- );
2231
2205
  } else {
2232
2206
  infoEnabled2 && info2(
2233
2207
  \`handleMessageFromServer [\${firstRow.viewPortId}] TABLE_ROW SIZE \${firstRow.vpSize} rowIdx \${firstRow.rowIndex}\`
@@ -2235,12 +2209,12 @@ var ServerProxy = class {
2235
2209
  }
2236
2210
  } else {
2237
2211
  infoEnabled2 && info2(
2238
- \`handleMessageFromServer TABLE_ROW \${body.rows.length} rows, SIZE \${firstRow.vpSize}, [\${secondRow == null ? void 0 : secondRow.rowIndex}] - [\${(_b = body.rows[body.rows.length - 1]) == null ? void 0 : _b.rowIndex}]\`
2212
+ \`handleMessageFromServer TABLE_ROW \${body.rows.length} rows, SIZE \${firstRow.vpSize}, [\${body.rows.map((r) => r.rowIndex).join(",")}]\`
2239
2213
  );
2240
2214
  }
2241
2215
  } else {
2242
2216
  infoEnabled2 && info2(
2243
- \`handleMessageFromServer TABLE_ROW \${body.rows.length} rows [\${firstRow == null ? void 0 : firstRow.rowIndex}] - [\${(_c = body.rows[body.rows.length - 1]) == null ? void 0 : _c.rowIndex}]\`
2217
+ \`handleMessageFromServer TABLE_ROW \${body.rows.length} rows [\${body.rows.map((r) => r.rowIndex).join(",")}]\`
2244
2218
  );
2245
2219
  }
2246
2220
  }