@vuu-ui/vuu-data-react 0.8.23-debug → 0.8.23

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/cjs/index.js CHANGED
@@ -1,575 +1,2 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
23
- MovingWindow: () => MovingWindow,
24
- addRowsFromInstruments: () => addRowsFromInstruments,
25
- getTypeaheadParams: () => getTypeaheadParams,
26
- getVuuTableSchema: () => getVuuTableSchema,
27
- useDataSource: () => useDataSource,
28
- useLookupValues: () => useLookupValues,
29
- useServerConnectionQuality: () => useServerConnectionQuality,
30
- useServerConnectionStatus: () => useServerConnectionStatus,
31
- useTypeaheadSuggestions: () => useTypeaheadSuggestions,
32
- useVuuMenuActions: () => useVuuMenuActions,
33
- useVuuTables: () => useVuuTables
34
- });
35
- module.exports = __toCommonJS(src_exports);
36
-
37
- // src/hooks/useDataSource.ts
38
- var import_vuu_utils = require("@vuu-ui/vuu-utils");
39
- var import_react = require("react");
40
- var { SELECTED } = import_vuu_utils.metadataKeys;
41
- function useDataSource({
42
- dataSource,
43
- renderBufferSize = 10
44
- }) {
45
- const [, forceUpdate] = (0, import_react.useState)(null);
46
- const isMounted = (0, import_react.useRef)(true);
47
- const hasUpdated = (0, import_react.useRef)(false);
48
- const rafHandle = (0, import_react.useRef)(null);
49
- const data = (0, import_react.useRef)([]);
50
- const rangeRef = (0, import_react.useRef)({ from: 0, to: 10 });
51
- const dataWindow = (0, import_react.useMemo)(
52
- () => new MovingWindow((0, import_vuu_utils.getFullRange)(rangeRef.current, renderBufferSize)),
53
- [renderBufferSize]
54
- );
55
- const setData = (0, import_react.useCallback)(
56
- (updates) => {
57
- for (const row of updates) {
58
- dataWindow.add(row);
59
- }
60
- data.current = dataWindow.data.slice();
61
- hasUpdated.current = true;
62
- },
63
- [dataWindow]
64
- );
65
- const datasourceMessageHandler = (0, import_react.useCallback)(
66
- (message) => {
67
- if (message.type === "viewport-update") {
68
- if (message.size !== void 0) {
69
- dataWindow.setRowCount(message.size);
70
- }
71
- if (message.rows) {
72
- setData(message.rows);
73
- forceUpdate({});
74
- } else if (message.size !== void 0) {
75
- data.current = dataWindow.data.slice();
76
- hasUpdated.current = true;
77
- }
78
- }
79
- },
80
- [dataWindow, setData]
81
- );
82
- (0, import_react.useEffect)(
83
- () => () => {
84
- if (rafHandle.current) {
85
- cancelAnimationFrame(rafHandle.current);
86
- rafHandle.current = null;
87
- }
88
- isMounted.current = false;
89
- },
90
- []
91
- );
92
- const setRange = (0, import_react.useCallback)(
93
- (range) => {
94
- rangeRef.current = range;
95
- const fullRange = (0, import_vuu_utils.getFullRange)(rangeRef.current, renderBufferSize);
96
- dataSource.range = fullRange;
97
- dataWindow.setRange(fullRange.from, fullRange.to);
98
- },
99
- [dataSource, dataWindow, renderBufferSize]
100
- );
101
- (0, import_react.useMemo)(() => {
102
- const { from, to } = rangeRef.current;
103
- const fullRange = (0, import_vuu_utils.getFullRange)({ from, to }, renderBufferSize);
104
- dataSource.range = fullRange;
105
- dataWindow.setRange(fullRange.from, fullRange.to);
106
- }, [dataSource, dataWindow, renderBufferSize]);
107
- (0, import_react.useEffect)(() => {
108
- const { from, to } = (0, import_vuu_utils.getFullRange)(rangeRef.current, renderBufferSize);
109
- dataSource.subscribe(
110
- {
111
- range: { from, to }
112
- },
113
- datasourceMessageHandler
114
- );
115
- }, [dataSource, datasourceMessageHandler, renderBufferSize]);
116
- (0, import_react.useEffect)(
117
- () => () => {
118
- dataSource.unsubscribe();
119
- },
120
- [dataSource]
121
- );
122
- return [
123
- data.current,
124
- dataWindow.rowCount,
125
- (0, import_vuu_utils.getFullRange)(rangeRef.current, renderBufferSize),
126
- setRange
127
- ];
128
- }
129
- var MovingWindow = class {
130
- constructor({ from, to }) {
131
- this.rowCount = 0;
132
- this.setRowCount = (rowCount) => {
133
- if (rowCount < this.data.length) {
134
- this.data.length = rowCount;
135
- }
136
- this.rowCount = rowCount;
137
- };
138
- this.range = new import_vuu_utils.WindowRange(from, to);
139
- this.data = new Array(to - from);
140
- }
141
- add(data) {
142
- const [index] = data;
143
- if (this.isWithinRange(index)) {
144
- const internalIndex = index - this.range.from;
145
- this.data[internalIndex] = data;
146
- if (this.data[internalIndex - 1]) {
147
- if (this.data[internalIndex - 1][SELECTED] === 1 && data[SELECTED] === 0) {
148
- data[SELECTED] = 2;
149
- }
150
- }
151
- if (index === this.rowCount - 1) {
152
- this.data.length = internalIndex + 1;
153
- }
154
- }
155
- }
156
- getAtIndex(index) {
157
- return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
158
- }
159
- isWithinRange(index) {
160
- return this.range.isWithin(index);
161
- }
162
- setRange(from, to) {
163
- if (from !== this.range.from || to !== this.range.to) {
164
- const [overlapFrom, overlapTo] = this.range.overlap(from, to);
165
- const newData = new Array(to - from);
166
- for (let i = overlapFrom; i < overlapTo; i++) {
167
- const data = this.getAtIndex(i);
168
- if (data) {
169
- const index = i - from;
170
- newData[index] = data;
171
- }
172
- }
173
- this.data = newData;
174
- this.range.from = from;
175
- this.range.to = to;
176
- }
177
- }
178
- };
179
-
180
- // src/hooks/useLookupValues.ts
181
- var import_vuu_data_remote = require("@vuu-ui/vuu-data-remote");
182
- var import_vuu_shell = require("@vuu-ui/vuu-shell");
183
- var import_vuu_utils2 = require("@vuu-ui/vuu-utils");
184
- var import_react2 = require("react");
185
- var NO_VALUES = [];
186
- var lookupValueMap = /* @__PURE__ */ new Map();
187
- var loadLookupValues = ({
188
- labelColumn,
189
- table,
190
- valueColumn
191
- }) => {
192
- const tableKey = `${table.module}:${table.table}`;
193
- const lookupValues = lookupValueMap.get(tableKey);
194
- if (lookupValues) {
195
- return lookupValues;
196
- } else {
197
- const promise = new Promise((resolve) => {
198
- const columns = [valueColumn, labelColumn];
199
- const columnMap = (0, import_vuu_utils2.buildColumnMap)(columns);
200
- const dataSource = new import_vuu_data_remote.VuuDataSource({
201
- bufferSize: 0,
202
- table
203
- });
204
- dataSource.subscribe(
205
- {
206
- columns,
207
- range: { from: 0, to: 100 }
208
- },
209
- (message) => {
210
- if (message.type === "viewport-update") {
211
- if (message.rows) {
212
- const listOptions = message.rows.map((row) => ({
213
- value: row[columnMap[valueColumn]],
214
- label: row[columnMap[labelColumn]]
215
- }));
216
- resolve(listOptions);
217
- dataSource.unsubscribe();
218
- }
219
- }
220
- }
221
- );
222
- });
223
- lookupValueMap.set(tableKey, promise);
224
- return promise;
225
- }
226
- };
227
- var getSelectedOption = (values, selectedValue) => {
228
- var _a;
229
- if (selectedValue === void 0) {
230
- return null;
231
- }
232
- return (_a = values.find((option) => option.value === selectedValue)) != null ? _a : null;
233
- };
234
- var getLookupDetails = ({ name, type }) => {
235
- if ((0, import_vuu_utils2.isTypeDescriptor)(type) && (0, import_vuu_utils2.isLookupRenderer)(type.renderer)) {
236
- return type.renderer.lookup;
237
- } else {
238
- throw Error(
239
- `useLookupValues column ${name} is not configured to use lookup values`
240
- );
241
- }
242
- };
243
- var useLookupValues = (column, initialValueProp) => {
244
- const lookupDetails = getLookupDetails(column);
245
- const { getLookupValues } = (0, import_vuu_shell.useShellContext)();
246
- const initialState = (0, import_react2.useMemo)(() => {
247
- var _a;
248
- const values2 = (_a = getLookupValues == null ? void 0 : getLookupValues(lookupDetails.table)) != null ? _a : NO_VALUES;
249
- return {
250
- initialValue: getSelectedOption(values2, initialValueProp),
251
- values: values2
252
- };
253
- }, [getLookupValues, initialValueProp, lookupDetails.table]);
254
- const [{ initialValue, values }, setLookupState] = (0, import_react2.useState)(initialState);
255
- (0, import_react2.useMemo)(() => {
256
- if (values === NO_VALUES) {
257
- loadLookupValues(lookupDetails).then(
258
- (values2) => setLookupState({
259
- initialValue: getSelectedOption(values2, initialValueProp),
260
- values: values2
261
- })
262
- );
263
- }
264
- }, [values, lookupDetails, initialValueProp]);
265
- return {
266
- initialValue,
267
- values
268
- };
269
- };
270
-
271
- // src/hooks/useServerConnectionStatus.ts
272
- var import_react3 = require("react");
273
- var import_vuu_data_remote2 = require("@vuu-ui/vuu-data-remote");
274
- var useServerConnectionStatus = () => {
275
- const [connectionStatus, setConnectionStatus] = (0, import_react3.useState)("disconnected");
276
- const handleStatusChange = (0, import_react3.useCallback)(
277
- ({ status }) => {
278
- setConnectionStatus(status);
279
- },
280
- []
281
- );
282
- (0, import_react3.useEffect)(() => {
283
- import_vuu_data_remote2.ConnectionManager.on("connection-status", handleStatusChange);
284
- return () => {
285
- import_vuu_data_remote2.ConnectionManager.removeListener("connection-status", handleStatusChange);
286
- };
287
- }, [handleStatusChange]);
288
- return connectionStatus;
289
- };
290
-
291
- // src/hooks/useServerConnectionQuality.ts
292
- var import_react4 = require("react");
293
- var import_vuu_data_remote3 = require("@vuu-ui/vuu-data-remote");
294
- var useServerConnectionQuality = () => {
295
- const [messagesPerSecond, setMessagesPerSecond] = (0, import_react4.useState)(0);
296
- const handleConnectivityMessage = (0, import_react4.useCallback)(({ messages }) => {
297
- setMessagesPerSecond(messages.messagesLength);
298
- }, []);
299
- (0, import_react4.useEffect)(() => {
300
- import_vuu_data_remote3.ConnectionManager.on("connection-metrics", handleConnectivityMessage);
301
- return () => {
302
- import_vuu_data_remote3.ConnectionManager.removeListener(
303
- "connection-metrics",
304
- handleConnectivityMessage
305
- );
306
- };
307
- }, [handleConnectivityMessage]);
308
- return messagesPerSecond;
309
- };
310
-
311
- // src/hooks/useTypeaheadSuggestions.ts
312
- var import_vuu_data_remote4 = require("@vuu-ui/vuu-data-remote");
313
- var import_react5 = require("react");
314
- var TYPEAHEAD_MESSAGE_CONSTANTS = {
315
- type: "RPC_CALL",
316
- service: "TypeAheadRpcHandler"
317
- };
318
- var getTypeaheadParams = (table, column, text = "", selectedValues = []) => {
319
- if (text !== "" && !selectedValues.includes(text.toLowerCase())) {
320
- return [table, column, text];
321
- }
322
- return [table, column];
323
- };
324
- var useTypeaheadSuggestions = () => (0, import_react5.useCallback)(async (params) => {
325
- const rpcMessage = params.length === 2 ? {
326
- method: "getUniqueFieldValues",
327
- params,
328
- ...TYPEAHEAD_MESSAGE_CONSTANTS
329
- } : {
330
- method: "getUniqueFieldValuesStartingWith",
331
- params,
332
- ...TYPEAHEAD_MESSAGE_CONSTANTS
333
- };
334
- return (0, import_vuu_data_remote4.makeRpcCall)(rpcMessage);
335
- }, []);
336
-
337
- // src/hooks/useVuuMenuActions.ts
338
- var import_vuu_filter_parser = require("@vuu-ui/vuu-filter-parser");
339
- var import_vuu_utils3 = require("@vuu-ui/vuu-utils");
340
- var import_react6 = require("react");
341
- var addRowsFromInstruments = "addRowsFromInstruments";
342
- var { KEY } = import_vuu_utils3.metadataKeys;
343
- var NO_CONFIG = {};
344
- var isMenuItem = (menu) => "rpcName" in menu;
345
- var isGroupMenuItem = (menu) => "menus" in menu;
346
- var isRoot = (menu) => menu.name === "ROOT";
347
- var isCellMenu = (options) => options.context === "cell";
348
- var isRowMenu = (options) => options.context === "row";
349
- var isSelectionMenu = (options) => options.context === "selected-rows";
350
- var vuuContextCompatibleWithTableLocation = (uiLocation, vuuContext, selectedRowCount = 0) => {
351
- switch (uiLocation) {
352
- case "grid":
353
- if (vuuContext === "selected-rows") {
354
- return selectedRowCount > 0;
355
- } else {
356
- return true;
357
- }
358
- case "header":
359
- return vuuContext === "grid";
360
- default:
361
- return false;
362
- }
363
- };
364
- var gridRowMeetsFilterCriteria = (context, row, selectedRows, filter, columnMap) => {
365
- if (context === "cell" || context === "row") {
366
- const filterPredicate = (0, import_vuu_filter_parser.getFilterPredicate)(columnMap, filter);
367
- return filterPredicate(row);
368
- } else if (context === "selected-rows") {
369
- if (selectedRows.length === 0) {
370
- return false;
371
- } else {
372
- const filterPredicate = (0, import_vuu_filter_parser.getFilterPredicate)(columnMap, filter);
373
- return selectedRows.every(filterPredicate);
374
- }
375
- }
376
- return true;
377
- };
378
- var getMenuRpcRequest = (options) => {
379
- const { rpcName } = options;
380
- if (isCellMenu(options)) {
381
- return {
382
- field: options.field,
383
- rowKey: options.rowKey,
384
- rpcName,
385
- value: options.value,
386
- type: "VIEW_PORT_MENU_CELL_RPC"
387
- };
388
- } else if (isRowMenu(options)) {
389
- return {
390
- rowKey: options.rowKey,
391
- row: options.row,
392
- rpcName,
393
- type: "VIEW_PORT_MENU_ROW_RPC"
394
- };
395
- } else if (isSelectionMenu(options)) {
396
- return {
397
- rpcName,
398
- type: "VIEW_PORT_MENUS_SELECT_RPC"
399
- };
400
- } else {
401
- return {
402
- rpcName,
403
- type: "VIEW_PORT_MENU_TABLE_RPC"
404
- };
405
- }
406
- };
407
- var isTableLocation = (location) => ["grid", "header", "filter"].includes(location);
408
- var hasFilter = ({ filter }) => typeof filter === "string" && filter.length > 0;
409
- var getMenuItemOptions = (menu, options) => {
410
- switch (menu.context) {
411
- case "cell":
412
- return {
413
- ...menu,
414
- field: options.columnName,
415
- rowKey: options.row[KEY],
416
- value: options.row[options.columnMap[options.columnName]]
417
- };
418
- case "row":
419
- return {
420
- ...menu,
421
- row: (0, import_vuu_utils3.getRowRecord)(options.row, options.columnMap),
422
- rowKey: options.row[KEY]
423
- };
424
- default:
425
- return menu;
426
- }
427
- };
428
- var menuShouldBeRenderedInThisContext = (menuItem, tableLocation, options) => {
429
- var _a;
430
- if (isGroupMenuItem(menuItem)) {
431
- return menuItem.menus.some(
432
- (childMenu) => menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)
433
- );
434
- }
435
- if (!vuuContextCompatibleWithTableLocation(
436
- tableLocation,
437
- menuItem.context,
438
- (_a = options.selectedRows) == null ? void 0 : _a.length
439
- )) {
440
- return false;
441
- }
442
- if (tableLocation === "grid" && hasFilter(menuItem)) {
443
- return gridRowMeetsFilterCriteria(
444
- menuItem.context,
445
- options.row,
446
- options.selectedRows,
447
- menuItem.filter,
448
- options.columnMap
449
- );
450
- }
451
- if (isCellMenu(menuItem) && menuItem.field !== "*") {
452
- return menuItem.field === options.columnName;
453
- }
454
- return true;
455
- };
456
- var buildMenuDescriptor = (menu, tableLocation, options) => {
457
- if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {
458
- if (isMenuItem(menu)) {
459
- return {
460
- label: menu.name,
461
- action: "MENU_RPC_CALL",
462
- options: getMenuItemOptions(menu, options)
463
- };
464
- } else {
465
- const children = menu.menus.map(
466
- (childMenu) => buildMenuDescriptor(childMenu, tableLocation, options)
467
- ).filter(
468
- (childMenu) => childMenu !== void 0
469
- );
470
- if (children.length > 0) {
471
- return {
472
- label: menu.name,
473
- children
474
- };
475
- }
476
- }
477
- }
478
- };
479
- var useVuuMenuActions = ({
480
- clientSideMenuActionHandler,
481
- dataSource,
482
- menuActionConfig = NO_CONFIG,
483
- onRpcResponse
484
- }) => {
485
- const buildViewserverMenuOptions = (0, import_react6.useCallback)(
486
- (location, options) => {
487
- const { links, menu } = dataSource;
488
- const { visualLink } = menuActionConfig;
489
- const descriptors = [];
490
- if (location === "grid" && links && !visualLink) {
491
- links.forEach((linkDescriptor) => {
492
- const { link, label: linkLabel } = linkDescriptor;
493
- const label = linkLabel ? linkLabel : link.toTable;
494
- descriptors.push({
495
- label: `Link to ${label}`,
496
- action: "link-table",
497
- options: linkDescriptor
498
- });
499
- });
500
- }
501
- if (menu && isTableLocation(location)) {
502
- const menuDescriptor = buildMenuDescriptor(
503
- menu,
504
- location,
505
- options
506
- );
507
- if (isRoot(menu) && (0, import_vuu_utils3.isGroupMenuItemDescriptor)(menuDescriptor)) {
508
- descriptors.push(...menuDescriptor.children);
509
- } else if (menuDescriptor) {
510
- descriptors.push(menuDescriptor);
511
- }
512
- }
513
- return descriptors;
514
- },
515
- [dataSource, menuActionConfig]
516
- );
517
- const handleMenuAction = (0, import_react6.useCallback)(
518
- ({ menuId, options }) => {
519
- if (clientSideMenuActionHandler == null ? void 0 : clientSideMenuActionHandler(menuId, options)) {
520
- return true;
521
- } else if (menuId === "MENU_RPC_CALL") {
522
- const rpcRequest = getMenuRpcRequest(options);
523
- dataSource.menuRpcCall(rpcRequest).then((rpcResponse) => {
524
- if (onRpcResponse && rpcResponse) {
525
- onRpcResponse && onRpcResponse(rpcResponse);
526
- }
527
- });
528
- return true;
529
- } else if (menuId === "link-table") {
530
- return dataSource.visualLink = options, true;
531
- } else {
532
- console.log(
533
- `useViewServer handleMenuAction, can't handle action type ${menuId}`
534
- );
535
- }
536
- return false;
537
- },
538
- [clientSideMenuActionHandler, dataSource, onRpcResponse]
539
- );
540
- return {
541
- buildViewserverMenuOptions,
542
- handleMenuAction
543
- };
544
- };
545
-
546
- // src/hooks/useVuuTables.ts
547
- var import_vuu_data_remote5 = require("@vuu-ui/vuu-data-remote");
548
- var import_react7 = require("react");
549
- var useVuuTables = () => {
550
- const [tables, setTables] = (0, import_react7.useState)();
551
- const buildTables = (0, import_react7.useCallback)((schemas) => {
552
- const vuuTables = /* @__PURE__ */ new Map();
553
- schemas.forEach((schema) => {
554
- vuuTables.set(schema.table.table, schema);
555
- });
556
- return vuuTables;
557
- }, []);
558
- (0, import_react7.useEffect)(() => {
559
- async function fetchTableMetadata() {
560
- console.log("GET TABLE LIST");
561
- const server = await (0, import_vuu_data_remote5.getServerAPI)();
562
- const { tables: tables2 } = await server.getTableList();
563
- const tableSchemas = buildTables(
564
- await Promise.all(
565
- tables2.map((vuuTable) => server.getTableSchema(vuuTable))
566
- )
567
- );
568
- setTables(tableSchemas);
569
- }
570
- fetchTableMetadata();
571
- }, [buildTables]);
572
- return tables;
573
- };
574
- var getVuuTableSchema = (table) => (0, import_vuu_data_remote5.getServerAPI)().then((server) => server.getTableSchema(table));
1
+ "use strict";var T=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var j=Object.prototype.hasOwnProperty;var Y=(t,e)=>{for(var n in e)T(t,n,{get:e[n],enumerable:!0})},Q=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of $(e))!j.call(t,o)&&o!==n&&T(t,o,{get:()=>e[o],enumerable:!(r=q(e,o))||r.enumerable});return t};var J=t=>Q(T({},"__esModule",{value:!0}),t);var we={};Y(we,{MovingWindow:()=>S,addRowsFromInstruments:()=>oe,getTypeaheadParams:()=>ne,getVuuTableSchema:()=>Ce,useDataSource:()=>X,useLookupValues:()=>z,useServerConnectionQuality:()=>te,useServerConnectionStatus:()=>ee,useTypeaheadSuggestions:()=>re,useVuuMenuActions:()=>he,useVuuTables:()=>Re});module.exports=J(we);var f=require("@vuu-ui/vuu-utils"),l=require("react"),{SELECTED:v}=f.metadataKeys;function X({dataSource:t,renderBufferSize:e=10}){let[,n]=(0,l.useState)(null),r=(0,l.useRef)(!0),o=(0,l.useRef)(!1),c=(0,l.useRef)(null),s=(0,l.useRef)([]),i=(0,l.useRef)({from:0,to:10}),u=(0,l.useMemo)(()=>new S((0,f.getFullRange)(i.current,e)),[e]),p=(0,l.useCallback)(a=>{for(let m of a)u.add(m);s.current=u.data.slice(),o.current=!0},[u]),d=(0,l.useCallback)(a=>{a.type==="viewport-update"&&(a.size!==void 0&&u.setRowCount(a.size),a.rows?(p(a.rows),n({})):a.size!==void 0&&(s.current=u.data.slice(),o.current=!0))},[u,p]);(0,l.useEffect)(()=>()=>{c.current&&(cancelAnimationFrame(c.current),c.current=null),r.current=!1},[]);let M=(0,l.useCallback)(a=>{i.current=a;let m=(0,f.getFullRange)(i.current,e);t.range=m,u.setRange(m.from,m.to)},[t,u,e]);return(0,l.useMemo)(()=>{let{from:a,to:m}=i.current,g=(0,f.getFullRange)({from:a,to:m},e);t.range=g,u.setRange(g.from,g.to)},[t,u,e]),(0,l.useEffect)(()=>{let{from:a,to:m}=(0,f.getFullRange)(i.current,e);t.subscribe({range:{from:a,to:m}},d)},[t,d,e]),(0,l.useEffect)(()=>()=>{t.unsubscribe()},[t]),[s.current,u.rowCount,(0,f.getFullRange)(i.current,e),M]}var S=class{constructor({from:e,to:n}){this.rowCount=0;this.setRowCount=e=>{e<this.data.length&&(this.data.length=e),this.rowCount=e};this.range=new f.WindowRange(e,n),this.data=new Array(n-e)}add(e){let[n]=e;if(this.isWithinRange(n)){let r=n-this.range.from;this.data[r]=e,this.data[r-1]&&this.data[r-1][v]===1&&e[v]===0&&(e[v]=2),n===this.rowCount-1&&(this.data.length=r+1)}}getAtIndex(e){return this.range.isWithin(e)&&this.data[e-this.range.from]!=null?this.data[e-this.range.from]:void 0}isWithinRange(e){return this.range.isWithin(e)}setRange(e,n){if(e!==this.range.from||n!==this.range.to){let[r,o]=this.range.overlap(e,n),c=new Array(n-e);for(let s=r;s<o;s++){let i=this.getAtIndex(s);if(i){let u=s-e;c[u]=i}}this.data=c,this.range.from=e,this.range.to=n}}};var O=require("@vuu-ui/vuu-data-remote"),A=require("@vuu-ui/vuu-shell"),h=require("@vuu-ui/vuu-utils"),V=require("react"),x=[],P=new Map,Z=({labelColumn:t,table:e,valueColumn:n})=>{let r=`${e.module}:${e.table}`,o=P.get(r);if(o)return o;{let c=new Promise(s=>{let i=[n,t],u=(0,h.buildColumnMap)(i),p=new O.VuuDataSource({bufferSize:0,table:e});p.subscribe({columns:i,range:{from:0,to:100}},d=>{if(d.type==="viewport-update"&&d.rows){let M=d.rows.map(a=>({value:a[u[n]],label:a[u[t]]}));s(M),p.unsubscribe()}})});return P.set(r,c),c}},E=(t,e)=>{var n;return e===void 0?null:(n=t.find(r=>r.value===e))!=null?n:null},B=({name:t,type:e})=>{if((0,h.isTypeDescriptor)(e)&&(0,h.isLookupRenderer)(e.renderer))return e.renderer.lookup;throw Error(`useLookupValues column ${t} is not configured to use lookup values`)},z=(t,e)=>{let n=B(t),{getLookupValues:r}=(0,A.useShellContext)(),o=(0,V.useMemo)(()=>{var p;let u=(p=r==null?void 0:r(n.table))!=null?p:x;return{initialValue:E(u,e),values:u}},[r,e,n.table]),[{initialValue:c,values:s},i]=(0,V.useState)(o);return(0,V.useMemo)(()=>{s===x&&Z(n).then(u=>i({initialValue:E(u,e),values:u}))},[s,n,e]),{initialValue:c,values:s}};var R=require("react"),L=require("@vuu-ui/vuu-data-remote"),ee=()=>{let[t,e]=(0,R.useState)("disconnected"),n=(0,R.useCallback)(({status:r})=>{e(r)},[]);return(0,R.useEffect)(()=>(L.ConnectionManager.on("connection-status",n),()=>{L.ConnectionManager.removeListener("connection-status",n)}),[n]),t};var C=require("react"),y=require("@vuu-ui/vuu-data-remote"),te=()=>{let[t,e]=(0,C.useState)(0),n=(0,C.useCallback)(({messages:r})=>{e(r.messagesLength)},[]);return(0,C.useEffect)(()=>(y.ConnectionManager.on("connection-metrics",n),()=>{y.ConnectionManager.removeListener("connection-metrics",n)}),[n]),t};var U=require("@vuu-ui/vuu-data-remote"),W=require("react"),_={type:"RPC_CALL",service:"TypeAheadRpcHandler"},ne=(t,e,n="",r=[])=>n!==""&&!r.includes(n.toLowerCase())?[t,e,n]:[t,e],re=()=>(0,W.useCallback)(async t=>{let e=t.length===2?{method:"getUniqueFieldValues",params:t,..._}:{method:"getUniqueFieldValuesStartingWith",params:t,..._};return(0,U.makeRpcCall)(e)},[]);var I=require("@vuu-ui/vuu-filter-parser"),w=require("@vuu-ui/vuu-utils"),k=require("react"),oe="addRowsFromInstruments",{KEY:N}=w.metadataKeys,ue={},se=t=>"rpcName"in t,ae=t=>"menus"in t,ie=t=>t.name==="ROOT",F=t=>t.context==="cell",ce=t=>t.context==="row",le=t=>t.context==="selected-rows",pe=(t,e,n=0)=>{switch(t){case"grid":return e==="selected-rows"?n>0:!0;case"header":return e==="grid";default:return!1}},me=(t,e,n,r,o)=>{if(t==="cell"||t==="row")return(0,I.getFilterPredicate)(o,r)(e);if(t==="selected-rows"){if(n.length===0)return!1;{let c=(0,I.getFilterPredicate)(o,r);return n.every(c)}}return!0},fe=t=>{let{rpcName:e}=t;return F(t)?{field:t.field,rowKey:t.rowKey,rpcName:e,value:t.value,type:"VIEW_PORT_MENU_CELL_RPC"}:ce(t)?{rowKey:t.rowKey,row:t.row,rpcName:e,type:"VIEW_PORT_MENU_ROW_RPC"}:le(t)?{rpcName:e,type:"VIEW_PORT_MENUS_SELECT_RPC"}:{rpcName:e,type:"VIEW_PORT_MENU_TABLE_RPC"}},de=t=>["grid","header","filter"].includes(t),Me=({filter:t})=>typeof t=="string"&&t.length>0,ge=(t,e)=>{switch(t.context){case"cell":return{...t,field:e.columnName,rowKey:e.row[N],value:e.row[e.columnMap[e.columnName]]};case"row":return{...t,row:(0,w.getRowRecord)(e.row,e.columnMap),rowKey:e.row[N]};default:return t}},H=(t,e,n)=>{var r;return ae(t)?t.menus.some(o=>H(o,e,n)):pe(e,t.context,(r=n.selectedRows)==null?void 0:r.length)?e==="grid"&&Me(t)?me(t.context,n.row,n.selectedRows,t.filter,n.columnMap):F(t)&&t.field!=="*"?t.field===n.columnName:!0:!1},K=(t,e,n)=>{if(H(t,e,n)){if(se(t))return{label:t.name,action:"MENU_RPC_CALL",options:ge(t,n)};{let r=t.menus.map(o=>K(o,e,n)).filter(o=>o!==void 0);if(r.length>0)return{label:t.name,children:r}}}},he=({clientSideMenuActionHandler:t,dataSource:e,menuActionConfig:n=ue,onRpcResponse:r})=>{let o=(0,k.useCallback)((s,i)=>{let{links:u,menu:p}=e,{visualLink:d}=n,M=[];if(s==="grid"&&u&&!d&&u.forEach(a=>{let{link:m,label:g}=a,G=g||m.toTable;M.push({label:`Link to ${G}`,action:"link-table",options:a})}),p&&de(s)){let a=K(p,s,i);ie(p)&&(0,w.isGroupMenuItemDescriptor)(a)?M.push(...a.children):a&&M.push(a)}return M},[e,n]),c=(0,k.useCallback)(({menuId:s,options:i})=>{if(t!=null&&t(s,i))return!0;if(s==="MENU_RPC_CALL"){let u=fe(i);return e.menuRpcCall(u).then(p=>{r&&p&&r&&r(p)}),!0}else{if(s==="link-table")return e.visualLink=i,!0;console.log(`useViewServer handleMenuAction, can't handle action type ${s}`)}return!1},[t,e,r]);return{buildViewserverMenuOptions:o,handleMenuAction:c}};var D=require("@vuu-ui/vuu-data-remote"),b=require("react"),Re=()=>{let[t,e]=(0,b.useState)(),n=(0,b.useCallback)(r=>{let o=new Map;return r.forEach(c=>{o.set(c.table.table,c)}),o},[]);return(0,b.useEffect)(()=>{async function r(){console.log("GET TABLE LIST");let o=await(0,D.getServerAPI)(),{tables:c}=await o.getTableList(),s=n(await Promise.all(c.map(i=>o.getTableSchema(i))));e(s)}r()},[n]),t},Ce=t=>(0,D.getServerAPI)().then(e=>e.getTableSchema(t));
575
2
  //# sourceMappingURL=index.js.map