@vuu-ui/vuu-utils 0.13.115 → 0.13.117
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/packages/vuu-utils/src/PageVisibilityObserver.js +4 -0
- package/cjs/packages/vuu-utils/src/PageVisibilityObserver.js.map +1 -1
- package/cjs/packages/vuu-utils/src/ScaledDecimal.js +39 -0
- package/cjs/packages/vuu-utils/src/ScaledDecimal.js.map +1 -0
- package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js +26 -9
- package/cjs/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js +4 -2
- package/cjs/packages/vuu-utils/src/filters/filter-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js +2 -1
- package/cjs/packages/vuu-utils/src/filters/filterAsQuery.js.map +1 -1
- package/cjs/packages/vuu-utils/src/form-utils.js +9 -0
- package/cjs/packages/vuu-utils/src/form-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/formatting-utils.js +2 -1
- package/cjs/packages/vuu-utils/src/formatting-utils.js.map +1 -1
- package/cjs/packages/vuu-utils/src/index.js +75 -67
- package/cjs/packages/vuu-utils/src/index.js.map +1 -1
- package/cjs/packages/vuu-utils/src/protocol-message-utils.js +13 -0
- package/cjs/packages/vuu-utils/src/protocol-message-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/PageVisibilityObserver.js +4 -0
- package/esm/packages/vuu-utils/src/PageVisibilityObserver.js.map +1 -1
- package/esm/packages/vuu-utils/src/ScaledDecimal.js +33 -0
- package/esm/packages/vuu-utils/src/ScaledDecimal.js.map +1 -0
- package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js +26 -9
- package/esm/packages/vuu-utils/src/datasource/datasource-filter-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/filters/filter-utils.js +4 -3
- package/esm/packages/vuu-utils/src/filters/filter-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/filters/filterAsQuery.js +2 -1
- package/esm/packages/vuu-utils/src/filters/filterAsQuery.js.map +1 -1
- package/esm/packages/vuu-utils/src/form-utils.js +9 -0
- package/esm/packages/vuu-utils/src/form-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/formatting-utils.js +2 -1
- package/esm/packages/vuu-utils/src/formatting-utils.js.map +1 -1
- package/esm/packages/vuu-utils/src/index.js +17 -16
- package/esm/packages/vuu-utils/src/index.js.map +1 -1
- package/esm/packages/vuu-utils/src/protocol-message-utils.js +13 -1
- package/esm/packages/vuu-utils/src/protocol-message-utils.js.map +1 -1
- package/package.json +6 -6
- package/types/PageVisibilityObserver.d.ts +2 -1
- package/types/ScaledDecimal.d.ts +12 -0
- package/types/filters/filter-utils.d.ts +2 -0
- package/types/index.d.ts +16 -16
- package/types/protocol-message-utils.d.ts +2 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var sortable = require('../../../node_modules/@dnd-kit/react/sortable.js');
|
|
4
|
-
var index = require('../../../node_modules/@dnd-kit/react/index.js');
|
|
5
|
-
var index$1 = require('../../../node_modules/@dnd-kit/dom/index.js');
|
|
6
3
|
var modifiers = require('../../../node_modules/@dnd-kit/abstract/modifiers.js');
|
|
4
|
+
var index$1 = require('../../../node_modules/@dnd-kit/dom/index.js');
|
|
5
|
+
var index = require('../../../node_modules/@dnd-kit/react/index.js');
|
|
6
|
+
var sortable = require('../../../node_modules/@dnd-kit/react/sortable.js');
|
|
7
7
|
var arrayUtils = require('./array-utils.js');
|
|
8
8
|
var boxUtils = require('./box-utils.js');
|
|
9
|
-
var columnUtils = require('./column-utils.js');
|
|
10
|
-
var cookieUtils = require('./cookie-utils.js');
|
|
11
|
-
var componentRegistry = require('./component-registry.js');
|
|
12
9
|
var Clock = require('./Clock.js');
|
|
10
|
+
var columnUtils = require('./column-utils.js');
|
|
13
11
|
var commonTypes = require('./common-types.js');
|
|
12
|
+
var componentRegistry = require('./component-registry.js');
|
|
13
|
+
var cookieUtils = require('./cookie-utils.js');
|
|
14
14
|
var cssUtils = require('./css-utils.js');
|
|
15
15
|
var dataUtils = require('./data-utils.js');
|
|
16
16
|
var BaseDataSource = require('./datasource/BaseDataSource.js');
|
|
@@ -22,15 +22,15 @@ var dateTimePattern = require('./date/dateTimePattern.js');
|
|
|
22
22
|
var formatter = require('./date/formatter.js');
|
|
23
23
|
var types = require('./date/types.js');
|
|
24
24
|
var debugUtils = require('./debug-utils.js');
|
|
25
|
-
var filterUtils = require('./filters/filter-utils.js');
|
|
26
|
-
var filterAsQuery = require('./filters/filterAsQuery.js');
|
|
27
|
-
var htmlUtils = require('./html-utils.js');
|
|
28
25
|
var eventEmitter = require('./event-emitter.js');
|
|
29
26
|
var featureUtils = require('./feature-utils.js');
|
|
27
|
+
var filterUtils = require('./filters/filter-utils.js');
|
|
28
|
+
var filterAsQuery = require('./filters/filterAsQuery.js');
|
|
30
29
|
var formUtils = require('./form-utils.js');
|
|
31
30
|
var formattingUtils = require('./formatting-utils.js');
|
|
32
31
|
var getUniqueId = require('./getUniqueId.js');
|
|
33
32
|
var groupUtils = require('./group-utils.js');
|
|
33
|
+
var htmlUtils = require('./html-utils.js');
|
|
34
34
|
var inputUtils = require('./input-utils.js');
|
|
35
35
|
var invariant = require('./invariant.js');
|
|
36
36
|
var itemToString = require('./itemToString.js');
|
|
@@ -42,42 +42,43 @@ var localStorageUtils = require('./local-storage-utils.js');
|
|
|
42
42
|
var loggingUtils = require('./logging-utils.js');
|
|
43
43
|
var moduleUtils = require('./module-utils.js');
|
|
44
44
|
var index$2 = require('./nanoid/index.js');
|
|
45
|
-
var reactUtils = require('./react-utils.js');
|
|
46
|
-
var roundDecimal = require('./round-decimal.js');
|
|
47
45
|
var perfUtils = require('./perf-utils.js');
|
|
48
46
|
var promiseUtils = require('./promise-utils.js');
|
|
49
47
|
var protocolMessageUtils = require('./protocol-message-utils.js');
|
|
50
48
|
var rangeUtils = require('./range-utils.js');
|
|
49
|
+
var reactUtils = require('./react-utils.js');
|
|
50
|
+
var roundDecimal = require('./round-decimal.js');
|
|
51
51
|
var rowUtils = require('./row-utils.js');
|
|
52
|
+
var ScaledDecimal = require('./ScaledDecimal.js');
|
|
52
53
|
var selectionUtils = require('./selection-utils.js');
|
|
53
54
|
var shellLayoutTypes = require('./shell-layout-types.js');
|
|
54
55
|
var sortUtils = require('./sort-utils.js');
|
|
55
56
|
var tableSchemaUtils = require('./table-schema-utils.js');
|
|
56
57
|
var textUtils = require('./text-utils.js');
|
|
57
|
-
var typeaheadUtils = require('./typeahead-utils.js');
|
|
58
|
-
var treeUtils = require('./tree-utils.js');
|
|
59
58
|
var ThemeProvider = require('./ThemeProvider.js');
|
|
59
|
+
var treeUtils = require('./tree-utils.js');
|
|
60
60
|
var tsUtils = require('./ts-utils.js');
|
|
61
|
+
var typeaheadUtils = require('./typeahead-utils.js');
|
|
61
62
|
var urlUtils = require('./url-utils.js');
|
|
62
63
|
var useId = require('./useId.js');
|
|
63
|
-
var useStateRef = require('./useStateRef.js');
|
|
64
64
|
var useLayoutEffectSkipFirst = require('./useLayoutEffectSkipFirst.js');
|
|
65
|
-
var
|
|
65
|
+
var useStateRef = require('./useStateRef.js');
|
|
66
66
|
var DataContext = require('./context-definitions/DataContext.js');
|
|
67
67
|
var DataProvider = require('./context-definitions/DataProvider.js');
|
|
68
68
|
var DataSourceProvider = require('./context-definitions/DataSourceProvider.js');
|
|
69
69
|
var WorkspaceContext = require('./context-definitions/WorkspaceContext.js');
|
|
70
70
|
var PageVisibilityObserver = require('./PageVisibilityObserver.js');
|
|
71
|
+
var ShellContext = require('./ShellContext.js');
|
|
71
72
|
|
|
72
73
|
|
|
73
74
|
|
|
74
|
-
exports.
|
|
75
|
+
exports.RestrictToHorizontalAxis = modifiers.RestrictToHorizontalAxis;
|
|
76
|
+
exports.KeyboardSensor = index$1.KeyboardSensor;
|
|
77
|
+
exports.PointerSensor = index$1.PointerSensor;
|
|
75
78
|
exports.DragDropProvider = index.DragDropProvider;
|
|
76
79
|
exports.DragOverlay = index.DragOverlay;
|
|
77
80
|
exports.useInstance = index.useInstance;
|
|
78
|
-
exports.
|
|
79
|
-
exports.PointerSensor = index$1.PointerSensor;
|
|
80
|
-
exports.RestrictToHorizontalAxis = modifiers.RestrictToHorizontalAxis;
|
|
81
|
+
exports.useSortable = sortable.useSortable;
|
|
81
82
|
exports.getAddedItems = arrayUtils.getAddedItems;
|
|
82
83
|
exports.getMissingItems = arrayUtils.getMissingItems;
|
|
83
84
|
exports.itemsChanged = arrayUtils.itemsChanged;
|
|
@@ -90,6 +91,7 @@ exports.getCenteredBox = boxUtils.getCenteredBox;
|
|
|
90
91
|
exports.getPositionWithinBox = boxUtils.getPositionWithinBox;
|
|
91
92
|
exports.isGridLayoutSplitDirection = boxUtils.isGridLayoutSplitDirection;
|
|
92
93
|
exports.pointPositionWithinRect = boxUtils.pointPositionWithinRect;
|
|
94
|
+
exports.Clock = Clock.Clock;
|
|
93
95
|
exports.AggregationType = columnUtils.AggregationType;
|
|
94
96
|
exports.addColumnToSubscribedColumns = columnUtils.addColumnToSubscribedColumns;
|
|
95
97
|
exports.applyDefaultColumnConfig = columnUtils.applyDefaultColumnConfig;
|
|
@@ -174,8 +176,7 @@ exports.updateColumnFormatting = columnUtils.updateColumnFormatting;
|
|
|
174
176
|
exports.updateColumnRenderProps = columnUtils.updateColumnRenderProps;
|
|
175
177
|
exports.updateColumnType = columnUtils.updateColumnType;
|
|
176
178
|
exports.visibleColumnAtIndex = columnUtils.visibleColumnAtIndex;
|
|
177
|
-
exports.
|
|
178
|
-
exports.setCookieValue = cookieUtils.setCookieValue;
|
|
179
|
+
exports.MEASURES = commonTypes.MEASURES;
|
|
179
180
|
exports.getCellConfigPanelRenderer = componentRegistry.getCellConfigPanelRenderer;
|
|
180
181
|
exports.getCellRenderer = componentRegistry.getCellRenderer;
|
|
181
182
|
exports.getCellRendererOptions = componentRegistry.getCellRendererOptions;
|
|
@@ -191,8 +192,8 @@ exports.isLayoutComponent = componentRegistry.isLayoutComponent;
|
|
|
191
192
|
exports.isView = componentRegistry.isView;
|
|
192
193
|
exports.registerComponent = componentRegistry.registerComponent;
|
|
193
194
|
exports.registerConfigurationEditor = componentRegistry.registerConfigurationEditor;
|
|
194
|
-
exports.
|
|
195
|
-
exports.
|
|
195
|
+
exports.getCookieValue = cookieUtils.getCookieValue;
|
|
196
|
+
exports.setCookieValue = cookieUtils.setCookieValue;
|
|
196
197
|
exports.importCSS = cssUtils.importCSS;
|
|
197
198
|
exports.DOWN1 = dataUtils.DOWN1;
|
|
198
199
|
exports.DOWN2 = dataUtils.DOWN2;
|
|
@@ -256,6 +257,20 @@ exports.isDatePattern = types.isDatePattern;
|
|
|
256
257
|
exports.isTimePattern = types.isTimePattern;
|
|
257
258
|
exports.supportedDateTimePatterns = types.supportedDateTimePatterns;
|
|
258
259
|
exports.RangeMonitor = debugUtils.RangeMonitor;
|
|
260
|
+
exports.EventEmitter = eventEmitter.EventEmitter;
|
|
261
|
+
exports.assertComponentRegistered = featureUtils.assertComponentRegistered;
|
|
262
|
+
exports.assertComponentsRegistered = featureUtils.assertComponentsRegistered;
|
|
263
|
+
exports.byModule = featureUtils.byModule;
|
|
264
|
+
exports.env = featureUtils.env;
|
|
265
|
+
exports.featureFromJson = featureUtils.featureFromJson;
|
|
266
|
+
exports.getCustomAndTableFeatures = featureUtils.getCustomAndTableFeatures;
|
|
267
|
+
exports.getFilterTableFeatures = featureUtils.getFilterTableFeatures;
|
|
268
|
+
exports.hasFilterTableFeatureProps = featureUtils.hasFilterTableFeatureProps;
|
|
269
|
+
exports.isCustomFeature = featureUtils.isCustomFeature;
|
|
270
|
+
exports.isSameTable = featureUtils.isSameTable;
|
|
271
|
+
exports.isStaticFeatures = featureUtils.isStaticFeatures;
|
|
272
|
+
exports.isVuuTables = featureUtils.isVuuTables;
|
|
273
|
+
exports.isWildcardSchema = featureUtils.isWildcardSchema;
|
|
259
274
|
exports.applyFilterToColumns = filterUtils.applyFilterToColumns;
|
|
260
275
|
exports.extractFilterForColumn = filterUtils.extractFilterForColumn;
|
|
261
276
|
exports.filtersAreEqual = filterUtils.filtersAreEqual;
|
|
@@ -273,6 +288,7 @@ exports.isMultiClauseFilter = filterUtils.isMultiClauseFilter;
|
|
|
273
288
|
exports.isMultiValueFilter = filterUtils.isMultiValueFilter;
|
|
274
289
|
exports.isNamedFilter = filterUtils.isNamedFilter;
|
|
275
290
|
exports.isOrFilter = filterUtils.isOrFilter;
|
|
291
|
+
exports.isScaledDecimalFilterClause = filterUtils.isScaledDecimalFilterClause;
|
|
276
292
|
exports.isSerializableFilter = filterUtils.isSerializableFilter;
|
|
277
293
|
exports.isSingleValueFilter = filterUtils.isSingleValueFilter;
|
|
278
294
|
exports.isValidFilterClauseOp = filterUtils.isValidFilterClauseOp;
|
|
@@ -280,6 +296,19 @@ exports.stripFilterFromColumns = filterUtils.stripFilterFromColumns;
|
|
|
280
296
|
exports.ONE_DAY_IN_MILLIS = filterAsQuery.ONE_DAY_IN_MILLIS;
|
|
281
297
|
exports.dateFilterAsQuery = filterAsQuery.dateFilterAsQuery;
|
|
282
298
|
exports.filterAsQuery = filterAsQuery.filterAsQuery;
|
|
299
|
+
exports.getFieldName = formUtils.getFieldName;
|
|
300
|
+
exports.getTypedRange = formUtils.getTypedRange;
|
|
301
|
+
exports.getTypedValue = formUtils.getTypedValue;
|
|
302
|
+
exports.isNumber = formUtils.isNumber;
|
|
303
|
+
exports.isValidRange = formUtils.isValidRange;
|
|
304
|
+
exports.defaultValueFormatter = formattingUtils.defaultValueFormatter;
|
|
305
|
+
exports.getValueFormatter = formattingUtils.getValueFormatter;
|
|
306
|
+
exports.lowerCase = formattingUtils.lowerCase;
|
|
307
|
+
exports.numericFormatter = formattingUtils.numericFormatter;
|
|
308
|
+
exports.getUniqueId = getUniqueId.getUniqueId;
|
|
309
|
+
exports.addGroupColumn = groupUtils.addGroupColumn;
|
|
310
|
+
exports.getGroupStatus = groupUtils.getGroupStatus;
|
|
311
|
+
exports.removeGroupColumn = groupUtils.removeGroupColumn;
|
|
283
312
|
exports.createEl = htmlUtils.createEl;
|
|
284
313
|
exports.dispatchCustomEvent = htmlUtils.dispatchCustomEvent;
|
|
285
314
|
exports.dispatchKeyboardEvent = htmlUtils.dispatchKeyboardEvent;
|
|
@@ -296,33 +325,6 @@ exports.isDateInput = htmlUtils.isDateInput;
|
|
|
296
325
|
exports.isInputElement = htmlUtils.isInputElement;
|
|
297
326
|
exports.isSelectableElement = htmlUtils.isSelectableElement;
|
|
298
327
|
exports.queryClosest = htmlUtils.queryClosest;
|
|
299
|
-
exports.EventEmitter = eventEmitter.EventEmitter;
|
|
300
|
-
exports.assertComponentRegistered = featureUtils.assertComponentRegistered;
|
|
301
|
-
exports.assertComponentsRegistered = featureUtils.assertComponentsRegistered;
|
|
302
|
-
exports.byModule = featureUtils.byModule;
|
|
303
|
-
exports.env = featureUtils.env;
|
|
304
|
-
exports.featureFromJson = featureUtils.featureFromJson;
|
|
305
|
-
exports.getCustomAndTableFeatures = featureUtils.getCustomAndTableFeatures;
|
|
306
|
-
exports.getFilterTableFeatures = featureUtils.getFilterTableFeatures;
|
|
307
|
-
exports.hasFilterTableFeatureProps = featureUtils.hasFilterTableFeatureProps;
|
|
308
|
-
exports.isCustomFeature = featureUtils.isCustomFeature;
|
|
309
|
-
exports.isSameTable = featureUtils.isSameTable;
|
|
310
|
-
exports.isStaticFeatures = featureUtils.isStaticFeatures;
|
|
311
|
-
exports.isVuuTables = featureUtils.isVuuTables;
|
|
312
|
-
exports.isWildcardSchema = featureUtils.isWildcardSchema;
|
|
313
|
-
exports.getFieldName = formUtils.getFieldName;
|
|
314
|
-
exports.getTypedRange = formUtils.getTypedRange;
|
|
315
|
-
exports.getTypedValue = formUtils.getTypedValue;
|
|
316
|
-
exports.isNumber = formUtils.isNumber;
|
|
317
|
-
exports.isValidRange = formUtils.isValidRange;
|
|
318
|
-
exports.defaultValueFormatter = formattingUtils.defaultValueFormatter;
|
|
319
|
-
exports.getValueFormatter = formattingUtils.getValueFormatter;
|
|
320
|
-
exports.lowerCase = formattingUtils.lowerCase;
|
|
321
|
-
exports.numericFormatter = formattingUtils.numericFormatter;
|
|
322
|
-
exports.getUniqueId = getUniqueId.getUniqueId;
|
|
323
|
-
exports.addGroupColumn = groupUtils.addGroupColumn;
|
|
324
|
-
exports.getGroupStatus = groupUtils.getGroupStatus;
|
|
325
|
-
exports.removeGroupColumn = groupUtils.removeGroupColumn;
|
|
326
328
|
exports.isCharacterKey = inputUtils.isCharacterKey;
|
|
327
329
|
exports.isQuoteKey = inputUtils.isQuoteKey;
|
|
328
330
|
exports.invariant = invariant.invariant;
|
|
@@ -352,14 +354,6 @@ exports.logUnhandledMessage = loggingUtils.logUnhandledMessage;
|
|
|
352
354
|
exports.logger = loggingUtils.logger;
|
|
353
355
|
exports.isModule = moduleUtils.isModule;
|
|
354
356
|
exports.uuid = index$2.uuid;
|
|
355
|
-
exports.asReactElements = reactUtils.asReactElements;
|
|
356
|
-
exports.createSyntheticEvent = reactUtils.createSyntheticEvent;
|
|
357
|
-
exports.isSimpleStateValue = reactUtils.isSimpleStateValue;
|
|
358
|
-
exports.useIsMounted = reactUtils.useIsMounted;
|
|
359
|
-
exports.useStableReference = reactUtils.useStableReference;
|
|
360
|
-
exports.exceedsMaxSafeInteger = roundDecimal.exceedsMaxSafeInteger;
|
|
361
|
-
exports.roundDecimal = roundDecimal.roundDecimal;
|
|
362
|
-
exports.roundScaledDecimal = roundDecimal.roundScaledDecimal;
|
|
363
357
|
exports.debounce = perfUtils.debounce;
|
|
364
358
|
exports.throttle = perfUtils.throttle;
|
|
365
359
|
exports.DeferredPromise = promiseUtils.DeferredPromise;
|
|
@@ -373,6 +367,7 @@ exports.isCreateVpSuccess = protocolMessageUtils.isCreateVpSuccess;
|
|
|
373
367
|
exports.isCustomComponentActionMessage = protocolMessageUtils.isCustomComponentActionMessage;
|
|
374
368
|
exports.isLoginErrorMessage = protocolMessageUtils.isLoginErrorMessage;
|
|
375
369
|
exports.isLoginResponse = protocolMessageUtils.isLoginResponse;
|
|
370
|
+
exports.isNumericType = protocolMessageUtils.isNumericType;
|
|
376
371
|
exports.isOpenDialogAction = protocolMessageUtils.isOpenDialogAction;
|
|
377
372
|
exports.isOpenSessionTableDialogMessage = protocolMessageUtils.isOpenSessionTableDialogMessage;
|
|
378
373
|
exports.isRequestResponse = protocolMessageUtils.isRequestResponse;
|
|
@@ -391,10 +386,23 @@ exports.WindowRange = rangeUtils.WindowRange;
|
|
|
391
386
|
exports.getFullRange = rangeUtils.getFullRange;
|
|
392
387
|
exports.rangeNewItems = rangeUtils.rangeNewItems;
|
|
393
388
|
exports.withinRange = rangeUtils.withinRange;
|
|
389
|
+
exports.asReactElements = reactUtils.asReactElements;
|
|
390
|
+
exports.createSyntheticEvent = reactUtils.createSyntheticEvent;
|
|
391
|
+
exports.isSimpleStateValue = reactUtils.isSimpleStateValue;
|
|
392
|
+
exports.useIsMounted = reactUtils.useIsMounted;
|
|
393
|
+
exports.useStableReference = reactUtils.useStableReference;
|
|
394
|
+
exports.exceedsMaxSafeInteger = roundDecimal.exceedsMaxSafeInteger;
|
|
395
|
+
exports.roundDecimal = roundDecimal.roundDecimal;
|
|
396
|
+
exports.roundScaledDecimal = roundDecimal.roundScaledDecimal;
|
|
394
397
|
exports.actualRowPositioning = rowUtils.actualRowPositioning;
|
|
395
398
|
exports.asDataSourceRowObject = rowUtils.asDataSourceRowObject;
|
|
396
399
|
exports.virtualRowPositioning = rowUtils.virtualRowPositioning;
|
|
397
400
|
exports.vuuRowToDataSourceRow = rowUtils.vuuRowToDataSourceRow;
|
|
401
|
+
exports.ScaledDecimal = ScaledDecimal.ScaledDecimal;
|
|
402
|
+
exports.ScaledDecimal2 = ScaledDecimal.ScaledDecimal2;
|
|
403
|
+
exports.ScaledDecimal4 = ScaledDecimal.ScaledDecimal4;
|
|
404
|
+
exports.ScaledDecimal6 = ScaledDecimal.ScaledDecimal6;
|
|
405
|
+
exports.ScaledDecimal8 = ScaledDecimal.ScaledDecimal8;
|
|
398
406
|
exports.deselectItem = selectionUtils.deselectItem;
|
|
399
407
|
exports.selectItem = selectionUtils.selectItem;
|
|
400
408
|
exports.VuuShellLocation = shellLayoutTypes.VuuShellLocation;
|
|
@@ -405,28 +413,26 @@ exports.toggleOrApplySort = sortUtils.toggleOrApplySort;
|
|
|
405
413
|
exports.getVuuTable = tableSchemaUtils.getVuuTable;
|
|
406
414
|
exports.lastWord = textUtils.lastWord;
|
|
407
415
|
exports.wordify = textUtils.wordify;
|
|
408
|
-
exports.NO_DATA_MATCH = typeaheadUtils.NO_DATA_MATCH;
|
|
409
|
-
exports.dropLastPathSegment = treeUtils.dropLastPathSegment;
|
|
410
|
-
exports.getParentRow = treeUtils.getParentRow;
|
|
411
|
-
exports.lastPathSegment = treeUtils.lastPathSegment;
|
|
412
|
-
exports.missingAncestor = treeUtils.missingAncestor;
|
|
413
|
-
exports.treeToDataSourceRows = treeUtils.treeToDataSourceRows;
|
|
414
416
|
exports.DEFAULT_DENSITY = ThemeProvider.DEFAULT_DENSITY;
|
|
415
417
|
exports.DEFAULT_THEME = ThemeProvider.DEFAULT_THEME;
|
|
416
418
|
exports.DEFAULT_THEME_MODE = ThemeProvider.DEFAULT_THEME_MODE;
|
|
417
419
|
exports.ThemeContext = ThemeProvider.ThemeContext;
|
|
418
420
|
exports.ThemeProvider = ThemeProvider.ThemeProvider;
|
|
419
421
|
exports.useThemeAttributes = ThemeProvider.useThemeAttributes;
|
|
422
|
+
exports.dropLastPathSegment = treeUtils.dropLastPathSegment;
|
|
423
|
+
exports.getParentRow = treeUtils.getParentRow;
|
|
424
|
+
exports.lastPathSegment = treeUtils.lastPathSegment;
|
|
425
|
+
exports.missingAncestor = treeUtils.missingAncestor;
|
|
426
|
+
exports.treeToDataSourceRows = treeUtils.treeToDataSourceRows;
|
|
420
427
|
exports.elementImplementsJSONSerialization = tsUtils.elementImplementsJSONSerialization;
|
|
421
428
|
exports.isNotNullOrUndefined = tsUtils.isNotNullOrUndefined;
|
|
422
429
|
exports.isObject = tsUtils.isObject;
|
|
430
|
+
exports.NO_DATA_MATCH = typeaheadUtils.NO_DATA_MATCH;
|
|
423
431
|
exports.getUrlParameter = urlUtils.getUrlParameter;
|
|
424
432
|
exports.hasUrlParameter = urlUtils.hasUrlParameter;
|
|
425
433
|
exports.useId = useId.useId;
|
|
426
|
-
exports.useStateRef = useStateRef.useStateRef;
|
|
427
434
|
exports.useLayoutEffectSkipFirst = useLayoutEffectSkipFirst.useLayoutEffectSkipFirst;
|
|
428
|
-
exports.
|
|
429
|
-
exports.useShellContext = ShellContext.useShellContext;
|
|
435
|
+
exports.useStateRef = useStateRef.useStateRef;
|
|
430
436
|
exports.DataContext = DataContext.DataContext;
|
|
431
437
|
exports.DataProvider = DataProvider.DataProvider;
|
|
432
438
|
exports.useData = DataProvider.useData;
|
|
@@ -435,4 +441,6 @@ exports.useDataSource = DataSourceProvider.useDataSource;
|
|
|
435
441
|
exports.WorkspaceContext = WorkspaceContext.WorkspaceContext;
|
|
436
442
|
exports.usePlaceholderJSON = WorkspaceContext.usePlaceholderJSON;
|
|
437
443
|
exports.PageVisibilityObserver = PageVisibilityObserver.PageVisibilityObserver;
|
|
444
|
+
exports.ShellContext = ShellContext.ShellContext;
|
|
445
|
+
exports.useShellContext = ShellContext.useShellContext;
|
|
438
446
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -55,6 +55,18 @@ function isSessionTableActionMessage(rpcResponse) {
|
|
|
55
55
|
function isCustomComponentActionMessage(rpcResponse) {
|
|
56
56
|
return isActionMessage(rpcResponse) && isOpenDialogAction(rpcResponse.action) && isSessionTable(rpcResponse.action.table) && typeof rpcResponse.action.renderComponent === "string" && componentRegistry.isView(rpcResponse.action.renderComponent);
|
|
57
57
|
}
|
|
58
|
+
const numericTypes = [
|
|
59
|
+
"int",
|
|
60
|
+
"long",
|
|
61
|
+
"double",
|
|
62
|
+
"scaleddecimal2",
|
|
63
|
+
"scaleddecimal4",
|
|
64
|
+
"scaleddecimal6",
|
|
65
|
+
"scaleddecimal8"
|
|
66
|
+
];
|
|
67
|
+
function isNumericType(dataType) {
|
|
68
|
+
return numericTypes.includes(dataType);
|
|
69
|
+
}
|
|
58
70
|
|
|
59
71
|
exports.INVALID_SESSION = INVALID_SESSION;
|
|
60
72
|
exports.INVALID_TOKEN = INVALID_TOKEN;
|
|
@@ -66,6 +78,7 @@ exports.isCreateVpSuccess = isCreateVpSuccess;
|
|
|
66
78
|
exports.isCustomComponentActionMessage = isCustomComponentActionMessage;
|
|
67
79
|
exports.isLoginErrorMessage = isLoginErrorMessage;
|
|
68
80
|
exports.isLoginResponse = isLoginResponse;
|
|
81
|
+
exports.isNumericType = isNumericType;
|
|
69
82
|
exports.isOpenDialogAction = isOpenDialogAction;
|
|
70
83
|
exports.isOpenSessionTableDialogMessage = isOpenSessionTableDialogMessage;
|
|
71
84
|
exports.isRequestResponse = isRequestResponse;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol-message-utils.js","sources":["../../../../../../packages/vuu-utils/src/protocol-message-utils.ts"],"sourcesContent":["import type {\n MenuRpcAction,\n MenuRpcResponse,\n OpenDialogActionWithSchema,\n RpcResponse,\n TableSchema,\n VuuUiMessageInRequestResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n OpenDialogAction,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuSuccess,\n VuuTable,\n VuuViewportRpcTypeaheadRequest,\n VuuRpcServiceRequest,\n ViewportRpcContext,\n OpenComponentInDialogAction,\n VuuLoginSuccessResponse,\n SelectRequest,\n SelectResponse,\n SelectSuccessWithRowCount,\n VuuViewportCreateSuccessResponse,\n VuuViewportCreateResponse,\n InvalidTokenReason,\n InvalidSessionReason,\n LoginErrorMessage,\n RpcResult,\n RpcResultSuccess,\n RpcResultError,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isView as componentInRegistry } from \"./component-registry\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n];\n\nexport const INVALID_SESSION: InvalidSessionReason = \"Invalid session\";\nexport const SESSION_LIMIT_EXCEEDED: InvalidSessionReason =\n \"User session limit exceeded\";\nexport const INVALID_TOKEN: InvalidTokenReason = \"Invalid token\";\nexport const TOKEN_EXPIRED: InvalidTokenReason = \"Token has expired\";\n\nconst InvalidLoginMessages: string[] = [\n INVALID_SESSION,\n SESSION_LIMIT_EXCEEDED,\n INVALID_TOKEN,\n TOKEN_EXPIRED,\n];\n\nexport const isLoginErrorMessage = (\n message: unknown,\n): message is LoginErrorMessage =>\n typeof message === \"string\" && InvalidLoginMessages.includes(message);\n\nexport const isSelectRequest = (message: object): message is SelectRequest =>\n message &&\n typeof message === \"object\" &&\n \"type\" in message &&\n (message.type === \"SELECT_ROW\" ||\n message.type === \"DESELECT_ROW\" ||\n message.type === \"SELECT_ROW_RANGE\" ||\n message.type === \"SELECT_ALL\" ||\n message.type === \"DESELECT_ALL\");\n\nexport const isSelectSuccessWithRowCount = (\n response: SelectResponse | SelectSuccessWithRowCount,\n): response is SelectSuccessWithRowCount =>\n [\n \"SELECT_ROW_SUCCESS\",\n \"DESELECT_ROW_SUCCESS\",\n \"SELECT_ROW_RANGE_SUCCESS\",\n \"SELECT_ALL_SUCCESS\",\n \"DESELECT_ALL_SUCCESS\",\n ].includes(response.type ?? \"\") &&\n typeof (response as SelectSuccessWithRowCount).selectedRowCount === \"number\";\n\nexport const isRpcServiceRequest = (message: {\n type: string;\n}): message is VuuRpcServiceRequest | Omit<VuuRpcServiceRequest, \"context\"> =>\n message.type === \"RPC_REQUEST\";\n\nexport const hasViewPortContext = (\n message: VuuRpcServiceRequest,\n): message is VuuRpcServiceRequest<ViewportRpcContext> =>\n message.context.type === \"VIEWPORT_CONTEXT\";\n\nexport const isVuuMenuRpcRequest = (\n message: VuuRpcRequest | Omit<VuuRpcRequest, \"vpId\">,\n): message is VuuRpcMenuRequest => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isLoginResponse = (\n message: unknown,\n): message is VuuLoginSuccessResponse =>\n message !== null &&\n typeof message === \"object\" &&\n \"type\" in message &&\n (message.type === \"LOGIN_SUCCESS\" || message.type === \"LOGIN_FAIL\");\n\nexport const isRpcSuccess = (\n rpcResult?: RpcResult,\n): rpcResult is RpcResultSuccess => rpcResult?.type === \"SUCCESS_RESULT\";\n\nexport const isRpcError = (\n rpcResult?: RpcResult,\n): rpcResult is RpcResultError => rpcResult?.type === \"ERROR_RESULT\";\n\nexport const isRequestResponse = (\n message: object,\n): message is VuuUiMessageInRequestResponse => \"requestId\" in message;\n\nexport const isOpenSessionTableDialogMessage = (\n rpcResponse: RpcResponse,\n): rpcResponse is MenuRpcResponse<OpenDialogActionWithSchema> =>\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" &&\n isOpenDialogAction(rpcResponse.action) &&\n \"tableSchema\" in rpcResponse.action;\n\nexport const isOpenDialogAction = (\n action?: MenuRpcAction,\n): action is OpenDialogAction =>\n action !== undefined && action.type === \"OPEN_DIALOG_ACTION\";\n\nexport const isTypeaheadRequest = (\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is Omit<VuuViewportRpcTypeaheadRequest, \"vpId\"> => {\n return (\n isRpcServiceRequest(request) &&\n (request.rpcName === \"getUniqueFieldValues\" ||\n request.rpcName === \"getUniqueFieldValuesStartingWith\")\n );\n};\n\nexport const isCreateVpSuccess = (\n response: VuuViewportCreateResponse,\n): response is VuuViewportCreateSuccessResponse =>\n response.type === \"CREATE_VP_SUCCESS\";\n\nexport const isSessionTable = (table?: unknown) => {\n if (\n table !== null &&\n typeof table === \"object\" &&\n \"table\" in table &&\n \"module\" in table\n ) {\n return (table as VuuTable).table.startsWith(\"session\");\n }\n return false;\n};\n\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcMenuSuccess;\nexport function isActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is Omit<VuuRpcMenuSuccess, \"vpId\">;\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n) {\n return rpcResponse.type === \"VIEW_PORT_MENU_RESP\";\n}\n\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is Omit<\n VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n >,\n \"vpId\"\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n> {\n return (\n isActionMessage(rpcResponse) &&\n isOpenDialogAction(rpcResponse.action) &&\n isSessionTable(rpcResponse.action.table) &&\n rpcResponse.action?.renderComponent === \"inline-form\"\n );\n}\n\nexport function isCustomComponentActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenComponentInDialogAction & {\n tableSchema: TableSchema;\n }\n> {\n return (\n isActionMessage(rpcResponse) &&\n isOpenDialogAction(rpcResponse.action) &&\n isSessionTable(rpcResponse.action.table) &&\n typeof rpcResponse.action.renderComponent === \"string\" &&\n componentInRegistry(rpcResponse.action.renderComponent)\n );\n}\n"],"names":["componentInRegistry"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"protocol-message-utils.js","sources":["../../../../../../packages/vuu-utils/src/protocol-message-utils.ts"],"sourcesContent":["import type {\n MenuRpcAction,\n MenuRpcResponse,\n OpenDialogActionWithSchema,\n RpcResponse,\n TableSchema,\n VuuUiMessageInRequestResponse,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n OpenDialogAction,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuSuccess,\n VuuTable,\n VuuViewportRpcTypeaheadRequest,\n VuuRpcServiceRequest,\n ViewportRpcContext,\n OpenComponentInDialogAction,\n VuuLoginSuccessResponse,\n SelectRequest,\n SelectResponse,\n SelectSuccessWithRowCount,\n VuuViewportCreateSuccessResponse,\n VuuViewportCreateResponse,\n InvalidTokenReason,\n InvalidSessionReason,\n LoginErrorMessage,\n RpcResult,\n RpcResultSuccess,\n RpcResultError,\n VuuColumnDataType,\n VuuNumericType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isView as componentInRegistry } from \"./component-registry\";\n\nconst MENU_RPC_TYPES = [\n \"VIEW_PORT_MENUS_SELECT_RPC\",\n \"VIEW_PORT_MENU_TABLE_RPC\",\n \"VIEW_PORT_MENU_ROW_RPC\",\n \"VIEW_PORT_MENU_CELL_RPC\",\n];\n\nexport const INVALID_SESSION: InvalidSessionReason = \"Invalid session\";\nexport const SESSION_LIMIT_EXCEEDED: InvalidSessionReason =\n \"User session limit exceeded\";\nexport const INVALID_TOKEN: InvalidTokenReason = \"Invalid token\";\nexport const TOKEN_EXPIRED: InvalidTokenReason = \"Token has expired\";\n\nconst InvalidLoginMessages: string[] = [\n INVALID_SESSION,\n SESSION_LIMIT_EXCEEDED,\n INVALID_TOKEN,\n TOKEN_EXPIRED,\n];\n\nexport const isLoginErrorMessage = (\n message: unknown,\n): message is LoginErrorMessage =>\n typeof message === \"string\" && InvalidLoginMessages.includes(message);\n\nexport const isSelectRequest = (message: object): message is SelectRequest =>\n message &&\n typeof message === \"object\" &&\n \"type\" in message &&\n (message.type === \"SELECT_ROW\" ||\n message.type === \"DESELECT_ROW\" ||\n message.type === \"SELECT_ROW_RANGE\" ||\n message.type === \"SELECT_ALL\" ||\n message.type === \"DESELECT_ALL\");\n\nexport const isSelectSuccessWithRowCount = (\n response: SelectResponse | SelectSuccessWithRowCount,\n): response is SelectSuccessWithRowCount =>\n [\n \"SELECT_ROW_SUCCESS\",\n \"DESELECT_ROW_SUCCESS\",\n \"SELECT_ROW_RANGE_SUCCESS\",\n \"SELECT_ALL_SUCCESS\",\n \"DESELECT_ALL_SUCCESS\",\n ].includes(response.type ?? \"\") &&\n typeof (response as SelectSuccessWithRowCount).selectedRowCount === \"number\";\n\nexport const isRpcServiceRequest = (message: {\n type: string;\n}): message is VuuRpcServiceRequest | Omit<VuuRpcServiceRequest, \"context\"> =>\n message.type === \"RPC_REQUEST\";\n\nexport const hasViewPortContext = (\n message: VuuRpcServiceRequest,\n): message is VuuRpcServiceRequest<ViewportRpcContext> =>\n message.context.type === \"VIEWPORT_CONTEXT\";\n\nexport const isVuuMenuRpcRequest = (\n message: VuuRpcRequest | Omit<VuuRpcRequest, \"vpId\">,\n): message is VuuRpcMenuRequest => MENU_RPC_TYPES.includes(message[\"type\"]);\n\nexport const isLoginResponse = (\n message: unknown,\n): message is VuuLoginSuccessResponse =>\n message !== null &&\n typeof message === \"object\" &&\n \"type\" in message &&\n (message.type === \"LOGIN_SUCCESS\" || message.type === \"LOGIN_FAIL\");\n\nexport const isRpcSuccess = (\n rpcResult?: RpcResult,\n): rpcResult is RpcResultSuccess => rpcResult?.type === \"SUCCESS_RESULT\";\n\nexport const isRpcError = (\n rpcResult?: RpcResult,\n): rpcResult is RpcResultError => rpcResult?.type === \"ERROR_RESULT\";\n\nexport const isRequestResponse = (\n message: object,\n): message is VuuUiMessageInRequestResponse => \"requestId\" in message;\n\nexport const isOpenSessionTableDialogMessage = (\n rpcResponse: RpcResponse,\n): rpcResponse is MenuRpcResponse<OpenDialogActionWithSchema> =>\n rpcResponse.type === \"VIEW_PORT_MENU_RESP\" &&\n isOpenDialogAction(rpcResponse.action) &&\n \"tableSchema\" in rpcResponse.action;\n\nexport const isOpenDialogAction = (\n action?: MenuRpcAction,\n): action is OpenDialogAction =>\n action !== undefined && action.type === \"OPEN_DIALOG_ACTION\";\n\nexport const isTypeaheadRequest = (\n request: Omit<VuuRpcRequest, \"vpId\">,\n): request is Omit<VuuViewportRpcTypeaheadRequest, \"vpId\"> => {\n return (\n isRpcServiceRequest(request) &&\n (request.rpcName === \"getUniqueFieldValues\" ||\n request.rpcName === \"getUniqueFieldValuesStartingWith\")\n );\n};\n\nexport const isCreateVpSuccess = (\n response: VuuViewportCreateResponse,\n): response is VuuViewportCreateSuccessResponse =>\n response.type === \"CREATE_VP_SUCCESS\";\n\nexport const isSessionTable = (table?: unknown) => {\n if (\n table !== null &&\n typeof table === \"object\" &&\n \"table\" in table &&\n \"module\" in table\n ) {\n return (table as VuuTable).table.startsWith(\"session\");\n }\n return false;\n};\n\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcMenuSuccess;\nexport function isActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is Omit<VuuRpcMenuSuccess, \"vpId\">;\nexport function isActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n) {\n return rpcResponse.type === \"VIEW_PORT_MENU_RESP\";\n}\n\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is Omit<\n VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n >,\n \"vpId\"\n>;\nexport function isSessionTableActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenDialogAction & {\n tableSchema: TableSchema;\n }\n> {\n return (\n isActionMessage(rpcResponse) &&\n isOpenDialogAction(rpcResponse.action) &&\n isSessionTable(rpcResponse.action.table) &&\n rpcResponse.action?.renderComponent === \"inline-form\"\n );\n}\n\nexport function isCustomComponentActionMessage(\n rpcResponse: VuuRpcResponse | Omit<VuuRpcResponse, \"vpId\">,\n): rpcResponse is VuuRpcMenuSuccess<\n OpenComponentInDialogAction & {\n tableSchema: TableSchema;\n }\n> {\n return (\n isActionMessage(rpcResponse) &&\n isOpenDialogAction(rpcResponse.action) &&\n isSessionTable(rpcResponse.action.table) &&\n typeof rpcResponse.action.renderComponent === \"string\" &&\n componentInRegistry(rpcResponse.action.renderComponent)\n );\n}\n\nconst numericTypes: VuuNumericType[] = [\n \"int\",\n \"long\",\n \"double\",\n \"scaleddecimal2\",\n \"scaleddecimal4\",\n \"scaleddecimal6\",\n \"scaleddecimal8\",\n];\n\nexport function isNumericType(\n dataType?: VuuColumnDataType,\n): dataType is VuuNumericType {\n return numericTypes.includes(dataType as VuuNumericType);\n}\n"],"names":["componentInRegistry"],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ class PageVisibilityObserver extends EventEmitter {
|
|
|
16
16
|
constructor({
|
|
17
17
|
inactiveTimeout = 0,
|
|
18
18
|
onHidden,
|
|
19
|
+
onInactiveTimeout,
|
|
19
20
|
onVisibilityChange,
|
|
20
21
|
onVisible
|
|
21
22
|
} = defaultProps) {
|
|
@@ -28,6 +29,9 @@ class PageVisibilityObserver extends EventEmitter {
|
|
|
28
29
|
});
|
|
29
30
|
__privateSet(this, _hidden, document.hidden);
|
|
30
31
|
__privateSet(this, _inactiveTimeoutMs, inactiveTimeout * 1e3);
|
|
32
|
+
if (onInactiveTimeout) {
|
|
33
|
+
this.on("inactive-timeout", onInactiveTimeout);
|
|
34
|
+
}
|
|
31
35
|
if (onHidden) {
|
|
32
36
|
this.on("hidden", onHidden);
|
|
33
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageVisibilityObserver.js","sources":["../../../../../../packages/vuu-utils/src/PageVisibilityObserver.ts"],"sourcesContent":["import { EventEmitter } from \"./event-emitter\";\n\nexport type PageVisibilityEvents = {\n /**\n * emits when page has been hidden for this period of time\n */\n \"inactive-timeout\": () => void;\n /**\n * emits when page is hidden\n */\n hidden: () => void;\n /**\n * emits when page is made visible\n */\n visible: () => void;\n /**\n * emits when page visibility status changes\n */\n visibilityChange: (hidden: boolean) => void;\n};\n\nexport interface PageVisibilityObserverConstructorProps {\n /**\n * timeout period in seconds. Defaults to zero which will never timeout\n */\n inactiveTimeout?: number;\n onHidden?: () => void;\n onVisible?: () => void;\n onVisibilityChange?: () => void;\n}\n\nconst defaultProps: PageVisibilityObserverConstructorProps = {};\n\nexport class PageVisibilityObserver extends EventEmitter<PageVisibilityEvents> {\n #inactiveTimeoutMs?: number;\n #inactivityTimer?: ReturnType<typeof setTimeout>;\n #hidden: boolean;\n\n visibilityChangeHandler = () => {\n this.hidden = document.hidden;\n };\n\n constructor({\n inactiveTimeout = 0,\n onHidden,\n onVisibilityChange,\n onVisible,\n } = defaultProps) {\n super();\n\n this.#hidden = document.hidden;\n this.#inactiveTimeoutMs = inactiveTimeout * 1000;\n\n if (onHidden) {\n this.on(\"hidden\", onHidden);\n }\n if (onVisible) {\n this.on(\"visible\", onVisible);\n }\n if (onVisibilityChange) {\n this.on(\"visibilityChange\", onVisibilityChange);\n }\n\n document.addEventListener(\"visibilitychange\", this.visibilityChangeHandler);\n }\n\n clear() {\n document.removeEventListener(\n \"visibilitychange\",\n this.visibilityChangeHandler,\n );\n }\n\n private set hidden(hidden: boolean) {\n if (hidden !== this.#hidden) {\n this.#hidden = hidden;\n if (document.hidden) {\n this.emit(\"hidden\");\n if (this.#inactiveTimeoutMs) {\n this.#inactivityTimer = setTimeout(() => {\n this.emit(\"inactive-timeout\");\n }, this.#inactiveTimeoutMs);\n }\n } else {\n this.emit(\"visible\");\n if (this.#inactivityTimer) {\n clearTimeout(this.#inactivityTimer);\n this.#inactivityTimer = undefined;\n }\n }\n this.emit(\"visibilityChange\", hidden);\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAA,kBAAA,EAAA,gBAAA,EAAA,OAAA;
|
|
1
|
+
{"version":3,"file":"PageVisibilityObserver.js","sources":["../../../../../../packages/vuu-utils/src/PageVisibilityObserver.ts"],"sourcesContent":["import { EventEmitter } from \"./event-emitter\";\n\nexport type PageVisibilityEvents = {\n /**\n * emits when page has been hidden for this period of time\n */\n \"inactive-timeout\": () => void;\n /**\n * emits when page is hidden\n */\n hidden: () => void;\n /**\n * emits when page is made visible\n */\n visible: () => void;\n /**\n * emits when page visibility status changes\n */\n visibilityChange: (hidden: boolean) => void;\n};\n\nexport interface PageVisibilityObserverConstructorProps {\n /**\n * timeout period in seconds. Defaults to zero which will never timeout\n */\n inactiveTimeout?: number;\n onHidden?: () => void;\n onInactiveTimeout?: () => void;\n onVisible?: () => void;\n onVisibilityChange?: () => void;\n}\n\nconst defaultProps: PageVisibilityObserverConstructorProps = {};\n\nexport class PageVisibilityObserver extends EventEmitter<PageVisibilityEvents> {\n #inactiveTimeoutMs?: number;\n #inactivityTimer?: ReturnType<typeof setTimeout>;\n #hidden: boolean;\n\n visibilityChangeHandler = () => {\n this.hidden = document.hidden;\n };\n\n constructor({\n inactiveTimeout = 0,\n onHidden,\n onInactiveTimeout,\n onVisibilityChange,\n onVisible,\n } = defaultProps) {\n super();\n\n this.#hidden = document.hidden;\n this.#inactiveTimeoutMs = inactiveTimeout * 1000;\n\n if (onInactiveTimeout) {\n this.on(\"inactive-timeout\", onInactiveTimeout);\n }\n\n if (onHidden) {\n this.on(\"hidden\", onHidden);\n }\n if (onVisible) {\n this.on(\"visible\", onVisible);\n }\n if (onVisibilityChange) {\n this.on(\"visibilityChange\", onVisibilityChange);\n }\n\n document.addEventListener(\"visibilitychange\", this.visibilityChangeHandler);\n }\n\n clear() {\n document.removeEventListener(\n \"visibilitychange\",\n this.visibilityChangeHandler,\n );\n }\n\n private set hidden(hidden: boolean) {\n if (hidden !== this.#hidden) {\n this.#hidden = hidden;\n if (document.hidden) {\n this.emit(\"hidden\");\n if (this.#inactiveTimeoutMs) {\n this.#inactivityTimer = setTimeout(() => {\n this.emit(\"inactive-timeout\");\n }, this.#inactiveTimeoutMs);\n }\n } else {\n this.emit(\"visible\");\n if (this.#inactivityTimer) {\n clearTimeout(this.#inactivityTimer);\n this.#inactivityTimer = undefined;\n }\n }\n this.emit(\"visibilityChange\", hidden);\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA,IAAA,kBAAA,EAAA,gBAAA,EAAA,OAAA;AAgCA,MAAM,eAAuD,EAAC;AAEvD,MAAM,+BAA+B,YAAmC,CAAA;AAAA,EAS7E,WAAY,CAAA;AAAA,IACV,eAAkB,GAAA,CAAA;AAAA,IAClB,QAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,MACE,YAAc,EAAA;AAChB,IAAM,KAAA,EAAA;AAfR,IAAA,YAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,yBAAA,EAA0B,MAAM;AAC9B,MAAA,IAAA,CAAK,SAAS,QAAS,CAAA,MAAA;AAAA,KACzB,CAAA;AAWE,IAAA,YAAA,CAAA,IAAA,EAAK,SAAU,QAAS,CAAA,MAAA,CAAA;AACxB,IAAA,YAAA,CAAA,IAAA,EAAK,oBAAqB,eAAkB,GAAA,GAAA,CAAA;AAE5C,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAK,IAAA,CAAA,EAAA,CAAG,oBAAoB,iBAAiB,CAAA;AAAA;AAG/C,IAAA,IAAI,QAAU,EAAA;AACZ,MAAK,IAAA,CAAA,EAAA,CAAG,UAAU,QAAQ,CAAA;AAAA;AAE5B,IAAA,IAAI,SAAW,EAAA;AACb,MAAK,IAAA,CAAA,EAAA,CAAG,WAAW,SAAS,CAAA;AAAA;AAE9B,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAK,IAAA,CAAA,EAAA,CAAG,oBAAoB,kBAAkB,CAAA;AAAA;AAGhD,IAAS,QAAA,CAAA,gBAAA,CAAiB,kBAAoB,EAAA,IAAA,CAAK,uBAAuB,CAAA;AAAA;AAC5E,EAEA,KAAQ,GAAA;AACN,IAAS,QAAA,CAAA,mBAAA;AAAA,MACP,kBAAA;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AAAA;AACF,EAEA,IAAY,OAAO,MAAiB,EAAA;AAClC,IAAI,IAAA,MAAA,KAAW,mBAAK,OAAS,CAAA,EAAA;AAC3B,MAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,MAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,QAAA,IAAA,CAAK,KAAK,QAAQ,CAAA;AAClB,QAAA,IAAI,mBAAK,kBAAoB,CAAA,EAAA;AAC3B,UAAK,YAAA,CAAA,IAAA,EAAA,gBAAA,EAAmB,WAAW,MAAM;AACvC,YAAA,IAAA,CAAK,KAAK,kBAAkB,CAAA;AAAA,WAC9B,EAAG,mBAAK,kBAAkB,CAAA,CAAA,CAAA;AAAA;AAC5B,OACK,MAAA;AACL,QAAA,IAAA,CAAK,KAAK,SAAS,CAAA;AACnB,QAAA,IAAI,mBAAK,gBAAkB,CAAA,EAAA;AACzB,UAAA,YAAA,CAAa,mBAAK,gBAAgB,CAAA,CAAA;AAClC,UAAA,YAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,KAAA,CAAA,CAAA;AAAA;AAC1B;AAEF,MAAK,IAAA,CAAA,IAAA,CAAK,oBAAoB,MAAM,CAAA;AAAA;AACtC;AAEJ;AAhEE,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const scaledDecimals = (fraction, decimals) => {
|
|
2
|
+
if (fraction.length > decimals) {
|
|
3
|
+
return fraction.slice(0, decimals);
|
|
4
|
+
} else if (fraction.length === decimals) {
|
|
5
|
+
return fraction;
|
|
6
|
+
} else {
|
|
7
|
+
return fraction.padEnd(decimals, "0");
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
class ScaledDecimal {
|
|
11
|
+
constructor(value, decimals = 6) {
|
|
12
|
+
this.value = value;
|
|
13
|
+
this.decimals = decimals;
|
|
14
|
+
console.log(`create a scaled decimal ${value} (${decimals} decimals)`);
|
|
15
|
+
}
|
|
16
|
+
get asLong() {
|
|
17
|
+
const [integral, fraction = "0"] = this.value.split(".");
|
|
18
|
+
return `${integral}${scaledDecimals(fraction, this.decimals)}`;
|
|
19
|
+
}
|
|
20
|
+
toJSON() {
|
|
21
|
+
return this.value;
|
|
22
|
+
}
|
|
23
|
+
toString() {
|
|
24
|
+
return this.value;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const ScaledDecimal2 = (value) => new ScaledDecimal(value, 2);
|
|
28
|
+
const ScaledDecimal4 = (value) => new ScaledDecimal(value, 4);
|
|
29
|
+
const ScaledDecimal6 = (value) => new ScaledDecimal(value, 6);
|
|
30
|
+
const ScaledDecimal8 = (value) => new ScaledDecimal(value, 8);
|
|
31
|
+
|
|
32
|
+
export { ScaledDecimal, ScaledDecimal2, ScaledDecimal4, ScaledDecimal6, ScaledDecimal8 };
|
|
33
|
+
//# sourceMappingURL=ScaledDecimal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScaledDecimal.js","sources":["../../../../../../packages/vuu-utils/src/ScaledDecimal.ts"],"sourcesContent":["const scaledDecimals = (fraction: string, decimals: number) => {\n if (fraction.length > decimals) {\n return fraction.slice(0, decimals);\n } else if (fraction.length === decimals) {\n return fraction;\n } else {\n return fraction.padEnd(decimals, \"0\");\n }\n};\n\nexport class ScaledDecimal {\n constructor(\n protected readonly value: string,\n private readonly decimals = 6,\n ) {\n console.log(`create a scaled decimal ${value} (${decimals} decimals)`);\n }\n\n get asLong() {\n const [integral, fraction = \"0\"] = this.value.split(\".\");\n return `${integral}${scaledDecimals(fraction, this.decimals)}`;\n }\n\n toJSON() {\n return this.value;\n }\n\n toString() {\n return this.value;\n }\n}\n\nexport const ScaledDecimal2 = (value: string): ScaledDecimal =>\n new ScaledDecimal(value, 2);\nexport const ScaledDecimal4 = (value: string): ScaledDecimal =>\n new ScaledDecimal(value, 4);\nexport const ScaledDecimal6 = (value: string): ScaledDecimal =>\n new ScaledDecimal(value, 6);\nexport const ScaledDecimal8 = (value: string): ScaledDecimal =>\n new ScaledDecimal(value, 8);\n"],"names":[],"mappings":"AAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,EAAkB,QAAqB,KAAA;AAC7D,EAAI,IAAA,QAAA,CAAS,SAAS,QAAU,EAAA;AAC9B,IAAO,OAAA,QAAA,CAAS,KAAM,CAAA,CAAA,EAAG,QAAQ,CAAA;AAAA,GACnC,MAAA,IAAW,QAAS,CAAA,MAAA,KAAW,QAAU,EAAA;AACvC,IAAO,OAAA,QAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,QAAA,CAAS,MAAO,CAAA,QAAA,EAAU,GAAG,CAAA;AAAA;AAExC,CAAA;AAEO,MAAM,aAAc,CAAA;AAAA,EACzB,WAAA,CACqB,KACF,EAAA,QAAA,GAAW,CAC5B,EAAA;AAFmB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACF,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAEjB,IAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,wBAAA,EAA2B,KAAK,CAAA,EAAA,EAAK,QAAQ,CAAY,UAAA,CAAA,CAAA;AAAA;AACvE,EAEA,IAAI,MAAS,GAAA;AACX,IAAM,MAAA,CAAC,UAAU,QAAW,GAAA,GAAG,IAAI,IAAK,CAAA,KAAA,CAAM,MAAM,GAAG,CAAA;AACvD,IAAA,OAAO,GAAG,QAAQ,CAAA,EAAG,eAAe,QAAU,EAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA;AAAA;AAC9D,EAEA,MAAS,GAAA;AACP,IAAA,OAAO,IAAK,CAAA,KAAA;AAAA;AACd,EAEA,QAAW,GAAA;AACT,IAAA,OAAO,IAAK,CAAA,KAAA;AAAA;AAEhB;AAEO,MAAM,iBAAiB,CAAC,KAAA,KAC7B,IAAI,aAAA,CAAc,OAAO,CAAC;AACrB,MAAM,iBAAiB,CAAC,KAAA,KAC7B,IAAI,aAAA,CAAc,OAAO,CAAC;AACrB,MAAM,iBAAiB,CAAC,KAAA,KAC7B,IAAI,aAAA,CAAc,OAAO,CAAC;AACrB,MAAM,iBAAiB,CAAC,KAAA,KAC7B,IAAI,aAAA,CAAc,OAAO,CAAC;;;;"}
|
|
@@ -5,16 +5,33 @@ const combineFilters = ({
|
|
|
5
5
|
filterSpec,
|
|
6
6
|
...config
|
|
7
7
|
}) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
if (baseFilterSpec === void 0 || baseFilterSpec.filter === "") {
|
|
9
|
+
if (filterSpec.filterStruct || filterSpec.filter === "") {
|
|
10
|
+
return {
|
|
11
|
+
...config,
|
|
12
|
+
filterSpec
|
|
13
|
+
};
|
|
14
|
+
} else {
|
|
15
|
+
return {
|
|
16
|
+
...config,
|
|
17
|
+
filterSpec: {
|
|
18
|
+
filter: filterSpec.filter,
|
|
19
|
+
filterStruct: parseFilter(filterSpec.filter)
|
|
20
|
+
}
|
|
21
|
+
};
|
|
15
22
|
}
|
|
16
|
-
}
|
|
17
|
-
|
|
23
|
+
} else {
|
|
24
|
+
const baseFilterQuery = baseFilterSpec.filter;
|
|
25
|
+
const combinedFilter = filterSpec.filter.length > 0 && baseFilterQuery.length > 0 ? `${filterSpec.filter} and ${baseFilterQuery}` : filterSpec.filter || baseFilterQuery;
|
|
26
|
+
const newConfig = {
|
|
27
|
+
...config,
|
|
28
|
+
filterSpec: {
|
|
29
|
+
filter: combinedFilter,
|
|
30
|
+
filterStruct: combinedFilter.length > 0 ? parseFilter(combinedFilter) : void 0
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
return newConfig;
|
|
34
|
+
}
|
|
18
35
|
};
|
|
19
36
|
|
|
20
37
|
export { combineFilters };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource-filter-utils.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/datasource-filter-utils.ts"],"sourcesContent":["import { WithBaseFilter, WithFullConfig } from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\n\nexport const combineFilters = ({\n baseFilterSpec,\n filterSpec,\n ...config\n}: WithBaseFilter<WithFullConfig>) => {\n
|
|
1
|
+
{"version":3,"file":"datasource-filter-utils.js","sources":["../../../../../../../packages/vuu-utils/src/datasource/datasource-filter-utils.ts"],"sourcesContent":["import { WithBaseFilter, WithFullConfig } from \"@vuu-ui/vuu-data-types\";\nimport { parseFilter } from \"@vuu-ui/vuu-filter-parser\";\n\n// TODO as we mugrate to a Filter only API, remove parseFilter\nexport const combineFilters = ({\n baseFilterSpec,\n filterSpec,\n ...config\n}: WithBaseFilter<WithFullConfig>) => {\n if (baseFilterSpec === undefined || baseFilterSpec.filter === \"\") {\n if (filterSpec.filterStruct || filterSpec.filter === \"\") {\n return {\n ...config,\n filterSpec,\n };\n } else {\n return {\n ...config,\n filterSpec: {\n filter: filterSpec.filter,\n filterStruct: parseFilter(filterSpec.filter),\n },\n };\n }\n } else {\n const baseFilterQuery = baseFilterSpec.filter;\n const combinedFilter =\n filterSpec.filter.length > 0 && baseFilterQuery.length > 0\n ? `${filterSpec.filter} and ${baseFilterQuery}`\n : filterSpec.filter || baseFilterQuery;\n\n const newConfig: WithFullConfig = {\n ...config,\n filterSpec: {\n filter: combinedFilter,\n filterStruct:\n combinedFilter.length > 0 ? parseFilter(combinedFilter) : undefined,\n },\n };\n\n return newConfig;\n }\n};\n"],"names":[],"mappings":";;AAIO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,cAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAsC,KAAA;AACpC,EAAA,IAAI,cAAmB,KAAA,KAAA,CAAA,IAAa,cAAe,CAAA,MAAA,KAAW,EAAI,EAAA;AAChE,IAAA,IAAI,UAAW,CAAA,YAAA,IAAgB,UAAW,CAAA,MAAA,KAAW,EAAI,EAAA;AACvD,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH;AAAA,OACF;AAAA,KACK,MAAA;AACL,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,UAAY,EAAA;AAAA,UACV,QAAQ,UAAW,CAAA,MAAA;AAAA,UACnB,YAAA,EAAc,WAAY,CAAA,UAAA,CAAW,MAAM;AAAA;AAC7C,OACF;AAAA;AACF,GACK,MAAA;AACL,IAAA,MAAM,kBAAkB,cAAe,CAAA,MAAA;AACvC,IAAA,MAAM,cACJ,GAAA,UAAA,CAAW,MAAO,CAAA,MAAA,GAAS,KAAK,eAAgB,CAAA,MAAA,GAAS,CACrD,GAAA,CAAA,EAAG,WAAW,MAAM,CAAA,KAAA,EAAQ,eAAe,CAAA,CAAA,GAC3C,WAAW,MAAU,IAAA,eAAA;AAE3B,IAAA,MAAM,SAA4B,GAAA;AAAA,MAChC,GAAG,MAAA;AAAA,MACH,UAAY,EAAA;AAAA,QACV,MAAQ,EAAA,cAAA;AAAA,QACR,cACE,cAAe,CAAA,MAAA,GAAS,CAAI,GAAA,WAAA,CAAY,cAAc,CAAI,GAAA,KAAA;AAAA;AAC9D,KACF;AAEA,IAAO,OAAA,SAAA;AAAA;AAEX;;;;"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ScaledDecimal } from '../ScaledDecimal.js';
|
|
2
|
+
|
|
1
3
|
const singleValueFilterOps = /* @__PURE__ */ new Set([
|
|
2
4
|
"=",
|
|
3
5
|
"!=",
|
|
@@ -13,6 +15,7 @@ const isBetweenOperator = (op) => op === "between" || op === "between-inclusive"
|
|
|
13
15
|
const isValidFilterClauseOp = (op) => op === "in" || singleValueFilterOps.has(op);
|
|
14
16
|
const isNamedFilter = (f) => f !== void 0 && f.name !== void 0;
|
|
15
17
|
const isSingleValueFilter = (f) => f !== void 0 && singleValueFilterOps.has(f.op);
|
|
18
|
+
const isScaledDecimalFilterClause = (f) => f.value instanceof ScaledDecimal;
|
|
16
19
|
const isSerializableFilter = (f) => isSingleValueFilter(f) && "asQuery" in f && typeof f["asQuery"] === "function";
|
|
17
20
|
const isFilter = (f) => typeof f === "object" && f !== null && (isFilterClause(f) || isMultiClauseFilter(f));
|
|
18
21
|
const isFilterClause = (f) => f !== void 0 && (isSingleValueFilter(f) || isMultiValueFilter(f));
|
|
@@ -93,8 +96,6 @@ const getColumnValueFromFilter = (column, operator, filter) => {
|
|
|
93
96
|
if (filter.filters[0].column === column.name) {
|
|
94
97
|
const [{ value: v1 }, { value: v2 }] = filter.filters;
|
|
95
98
|
return [`${v1}`, `${v2}`];
|
|
96
|
-
} else {
|
|
97
|
-
return ["", ""];
|
|
98
99
|
}
|
|
99
100
|
} else if (isAndFilter(filter)) {
|
|
100
101
|
const filterForColumn = filter.filters.find(
|
|
@@ -154,5 +155,5 @@ const filtersAreEqual = (f1, f2) => {
|
|
|
154
155
|
return false;
|
|
155
156
|
};
|
|
156
157
|
|
|
157
|
-
export { applyFilterToColumns, extractFilterForColumn, filtersAreEqual, getColumnValueFromFilter, isAndFilter, isBetweenFilter, isBetweenOperator, isCompleteFilter, isExtendedFilter, isFilter, isFilterClause, isFilteredColumn, isInFilter, isMultiClauseFilter, isMultiValueFilter, isNamedFilter, isOrFilter, isSerializableFilter, isSingleValueFilter, isValidFilterClauseOp, stripFilterFromColumns };
|
|
158
|
+
export { applyFilterToColumns, extractFilterForColumn, filtersAreEqual, getColumnValueFromFilter, isAndFilter, isBetweenFilter, isBetweenOperator, isCompleteFilter, isExtendedFilter, isFilter, isFilterClause, isFilteredColumn, isInFilter, isMultiClauseFilter, isMultiValueFilter, isNamedFilter, isOrFilter, isScaledDecimalFilterClause, isSerializableFilter, isSingleValueFilter, isValidFilterClauseOp, stripFilterFromColumns };
|
|
158
159
|
//# sourceMappingURL=filter-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-utils.js","sources":["../../../../../../../packages/vuu-utils/src/filters/filter-utils.ts"],"sourcesContent":["import type { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnFilterOp,\n ColumnFilterValue,\n ExtendedFilter,\n Filter,\n FilterClauseOp,\n FilterClauseOpBetween,\n FilterContainerFilter,\n FilterWithPartialClause,\n MultiClauseFilter,\n MultiValueFilterClause,\n SingleValueFilterClause,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { SerializableFilter } from \"@vuu-ui/vuu-filters/src/filter-container/ExtendedSingleValueFilterClause\";\nimport {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\n\nconst singleValueFilterOps = new Set<SingleValueFilterClauseOp>([\n \"=\",\n \"!=\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"contains\",\n \"starts\",\n \"ends\",\n]);\n\nexport const isBetweenOperator = (\n op: ColumnFilterOp,\n): op is FilterClauseOpBetween =>\n op === \"between\" || op === \"between-inclusive\";\n\nexport const isValidFilterClauseOp = (op?: string): op is FilterClauseOp =>\n op === \"in\" || singleValueFilterOps.has(op as SingleValueFilterClauseOp);\n\nexport const isNamedFilter = (f?: Filter) =>\n f !== undefined && f.name !== undefined;\n\n// ... with type constraints\nexport const isSingleValueFilter = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause =>\n f !== undefined &&\n singleValueFilterOps.has(f.op as SingleValueFilterClauseOp);\n\nexport const isSerializableFilter = (f: object): f is SerializableFilter =>\n isSingleValueFilter(f) &&\n \"asQuery\" in f &&\n typeof f[\"asQuery\"] === \"function\";\n\nexport const isFilter = (f: unknown): f is Filter =>\n typeof f === \"object\" &&\n f !== null &&\n (isFilterClause(f) || isMultiClauseFilter(f));\n\nexport const isFilterClause = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause | MultiValueFilterClause =>\n f !== undefined && (isSingleValueFilter(f) || isMultiValueFilter(f));\n\nexport const isMultiValueFilter = (\n f?: Partial<Filter>,\n): f is MultiValueFilterClause => f !== undefined && f.op === \"in\";\n\nexport const isInFilter = (f: Partial<Filter>): f is MultiValueFilterClause =>\n f.op === \"in\";\nexport const isAndFilter = (\n f?: Partial<Filter>,\n): f is MultiClauseFilter<\"and\"> => f?.op === \"and\";\n\nexport const isBetweenFilter = (\n f?: Filter,\n): f is MultiClauseFilter<\"and\", SingleValueFilterClause> =>\n isAndFilter(f) &&\n f.filters.length === 2 &&\n f.filters[0].column === f.filters[1].column &&\n ((f.filters[0].op === \">\" && f.filters[1].op === \"<\") ||\n (f.filters[0].op === \">=\" && f.filters[1].op === \"<=\"));\n\nexport const isOrFilter = (f?: Partial<Filter>): f is MultiClauseFilter<\"or\"> =>\n f?.op === \"or\";\n\nexport const isCompleteFilter = (filter: Partial<Filter>): filter is Filter =>\n isSingleValueFilter(filter) &&\n filter.column !== undefined &&\n filter.op !== undefined &&\n filter.value !== undefined;\n\nexport function isMultiClauseFilter(\n f?: Partial<Filter> | FilterWithPartialClause,\n): f is MultiClauseFilter {\n return f !== undefined && (f.op === \"and\" || f.op === \"or\");\n}\n\nexport const isExtendedFilter = (f: Filter): f is ExtendedFilter =>\n typeof (f as ExtendedFilter).extendedOptions === \"object\";\n\nexport const applyFilterToColumns = (\n columns: RuntimeColumnDescriptor[],\n { filterStruct }: DataSourceFilter,\n) =>\n columns.map((column) => {\n // TODO this gives us a dependency on vuu-filters\n const filter = extractFilterForColumn(filterStruct, column.name);\n if (filter !== undefined) {\n return {\n ...column,\n filter,\n };\n } else if (column.filter) {\n return {\n ...column,\n filter: undefined,\n };\n } else {\n return column;\n }\n });\n\nexport const isFilteredColumn = (column: RuntimeColumnDescriptor) =>\n column.filter !== undefined;\n\nexport const stripFilterFromColumns = (columns: RuntimeColumnDescriptor[]) =>\n columns.map((col) => {\n const { filter, ...rest } = col;\n return filter ? rest : col;\n });\n\nexport const extractFilterForColumn = (\n filter: Filter | undefined,\n columnName: string,\n) => {\n if (isMultiClauseFilter(filter)) {\n return collectFiltersForColumn(filter, columnName);\n }\n if (isFilterClause(filter)) {\n return filter.column === columnName ? filter : undefined;\n }\n return undefined;\n};\n\nconst collectFiltersForColumn = (\n filter: MultiClauseFilter,\n columnName: string,\n) => {\n const { filters, op } = filter;\n const results: Filter[] = [];\n filters.forEach((filter) => {\n const ffc = extractFilterForColumn(filter, columnName);\n if (ffc) {\n results.push(ffc);\n }\n });\n if (results.length === 0) {\n return undefined;\n } else if (results.length === 1) {\n return results[0];\n }\n return {\n op,\n filters: results,\n };\n};\n\n// Just until we fully support bool values in filters\nconst stringifyBoolean = (value: string | number | boolean) =>\n typeof value === \"boolean\" ? \"${filter.value}\" : value;\n\nexport const getColumnValueFromFilter = (\n column: ColumnDescriptor,\n operator: ColumnFilterOp,\n filter?: FilterContainerFilter,\n): ColumnFilterValue => {\n if (isSingleValueFilter(filter)) {\n if (filter.column === column.name) {\n if (operator.startsWith(\"between\")) {\n if (filter.op === \"=\") {\n return [`${filter.value}`, \"\"];\n } else if (filter.op === \"<\") {\n return [\"\", `${filter.value}`];\n }\n } else {\n return stringifyBoolean(filter.value);\n }\n }\n } else if (isBetweenFilter(filter)) {\n if (filter.filters[0].column === column.name) {\n const [{ value: v1 }, { value: v2 }] = filter.filters;\n return [`${v1}`, `${v2}`];\n } else {\n return [\"\", \"\"];\n }\n } else if (isAndFilter(filter)) {\n const filterForColumn = filter.filters.find((f) =>\n isBetweenFilter(f)\n ? f.filters[0].column === column.name\n : f.column === column.name,\n );\n if (isSingleValueFilter(filterForColumn)) {\n return stringifyBoolean(filterForColumn.value);\n } else if (\n operator.startsWith(\"between\") &&\n isBetweenFilter(filterForColumn)\n ) {\n const [{ value: v1 }, { value: v2 }] = filterForColumn.filters;\n return [`${v1}`, `${v2}`];\n }\n }\n if (operator.startsWith(\"between\")) {\n if (column.type === \"time\") {\n return [\"00:00:00\", \"23:59:59\"];\n } else {\n return [\"\", \"\"];\n }\n } else {\n return \"\";\n }\n};\n\ntype BetweenFilter = MultiClauseFilter<\"and\", SingleValueFilterClause>;\ntype ChildFilterClause = SingleValueFilterClause | BetweenFilter;\n\nconst betweenFiltersAreEqual = (f1: BetweenFilter, f2: BetweenFilter) => {\n const [from1, to1] = f1.filters;\n const [from2, to2] = f2.filters;\n return filtersAreEqual(from1, from2) && filtersAreEqual(to1, to2);\n};\n\nconst singleValueFilterClausesAreEqual = (\n f1: SingleValueFilterClause,\n f2: SingleValueFilterClause,\n) => f1.column === f2.column && f1.op === f2.op && f1.value === f2.value;\n\nconst findEqualFilter =\n (filters: ChildFilterClause[]) => (filter: ChildFilterClause) => {\n if (isBetweenFilter(filter)) {\n const target = filters.find(\n (f) => isBetweenFilter(f) && betweenFiltersAreEqual(f, filter),\n );\n return target !== undefined;\n } else {\n // A FilterContainerFilter only has one filter clause per column\n const target = filters.find((f) => f.column === filter.column);\n if (target) {\n return target.op === filter.op && target.value === filter.value;\n }\n }\n return false;\n };\n\nexport const filtersAreEqual = (\n f1: FilterContainerFilter | null | undefined,\n f2: FilterContainerFilter | null | undefined,\n): boolean => {\n if (f1 == null && f2 == null) {\n return true;\n } else if (f1 == null || f2 == null) {\n return false;\n } else if (isSingleValueFilter(f1) && isSingleValueFilter(f2)) {\n return singleValueFilterClausesAreEqual(f1, f2);\n } else if (isBetweenFilter(f1) && isBetweenFilter(f2)) {\n return betweenFiltersAreEqual(f1, f2);\n } else if (isAndFilter(f1) && isAndFilter(f2)) {\n if (f1.filters.length === f2.filters.length) {\n return f1.filters.every(findEqualFilter(f2.filters));\n }\n }\n\n return false;\n};\n"],"names":["filter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filter-utils.js","sources":["../../../../../../../packages/vuu-utils/src/filters/filter-utils.ts"],"sourcesContent":["import type { DataSourceFilter } from \"@vuu-ui/vuu-data-types\";\nimport {\n ColumnFilterOp,\n ColumnFilterValue,\n ExtendedFilter,\n Filter,\n FilterClauseOp,\n FilterClauseOpBetween,\n FilterContainerFilter,\n FilterWithPartialClause,\n MultiClauseFilter,\n MultiValueFilterClause,\n SingleValueFilterClause,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport { SerializableFilter } from \"@vuu-ui/vuu-filters/src/filter-container/ExtendedSingleValueFilterClause\";\nimport {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { ScaledDecimal } from \"../ScaledDecimal\";\n\nconst singleValueFilterOps = new Set<SingleValueFilterClauseOp>([\n \"=\",\n \"!=\",\n \">\",\n \">=\",\n \"<\",\n \"<=\",\n \"contains\",\n \"starts\",\n \"ends\",\n]);\n\nexport const isBetweenOperator = (\n op: ColumnFilterOp,\n): op is FilterClauseOpBetween =>\n op === \"between\" || op === \"between-inclusive\";\n\nexport const isValidFilterClauseOp = (op?: string): op is FilterClauseOp =>\n op === \"in\" || singleValueFilterOps.has(op as SingleValueFilterClauseOp);\n\nexport const isNamedFilter = (f?: Filter) =>\n f !== undefined && f.name !== undefined;\n\n// ... with type constraints\nexport const isSingleValueFilter = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause =>\n f !== undefined &&\n singleValueFilterOps.has(f.op as SingleValueFilterClauseOp);\n\nexport const isScaledDecimalFilterClause = (\n f: SingleValueFilterClause,\n): f is SingleValueFilterClause<ScaledDecimal> =>\n f.value instanceof ScaledDecimal;\n\nexport const isSerializableFilter = (f: object): f is SerializableFilter =>\n isSingleValueFilter(f) &&\n \"asQuery\" in f &&\n typeof f[\"asQuery\"] === \"function\";\n\nexport const isFilter = (f: unknown): f is Filter =>\n typeof f === \"object\" &&\n f !== null &&\n (isFilterClause(f) || isMultiClauseFilter(f));\n\nexport const isFilterClause = (\n f?: Partial<Filter>,\n): f is SingleValueFilterClause | MultiValueFilterClause =>\n f !== undefined && (isSingleValueFilter(f) || isMultiValueFilter(f));\n\nexport const isMultiValueFilter = (\n f?: Partial<Filter>,\n): f is MultiValueFilterClause => f !== undefined && f.op === \"in\";\n\nexport const isInFilter = (f: Partial<Filter>): f is MultiValueFilterClause =>\n f.op === \"in\";\nexport const isAndFilter = (\n f?: Partial<Filter>,\n): f is MultiClauseFilter<\"and\"> => f?.op === \"and\";\n\nexport const isBetweenFilter = (\n f?: Filter,\n): f is MultiClauseFilter<\"and\", SingleValueFilterClause> =>\n isAndFilter(f) &&\n f.filters.length === 2 &&\n f.filters[0].column === f.filters[1].column &&\n ((f.filters[0].op === \">\" && f.filters[1].op === \"<\") ||\n (f.filters[0].op === \">=\" && f.filters[1].op === \"<=\"));\n\nexport const isOrFilter = (f?: Partial<Filter>): f is MultiClauseFilter<\"or\"> =>\n f?.op === \"or\";\n\nexport const isCompleteFilter = (filter: Partial<Filter>): filter is Filter =>\n isSingleValueFilter(filter) &&\n filter.column !== undefined &&\n filter.op !== undefined &&\n filter.value !== undefined;\n\nexport function isMultiClauseFilter(\n f?: Partial<Filter> | FilterWithPartialClause,\n): f is MultiClauseFilter {\n return f !== undefined && (f.op === \"and\" || f.op === \"or\");\n}\n\nexport const isExtendedFilter = (f: Filter): f is ExtendedFilter =>\n typeof (f as ExtendedFilter).extendedOptions === \"object\";\n\nexport const applyFilterToColumns = (\n columns: RuntimeColumnDescriptor[],\n { filterStruct }: DataSourceFilter,\n) =>\n columns.map((column) => {\n // TODO this gives us a dependency on vuu-filters\n const filter = extractFilterForColumn(filterStruct, column.name);\n if (filter !== undefined) {\n return {\n ...column,\n filter,\n };\n } else if (column.filter) {\n return {\n ...column,\n filter: undefined,\n };\n } else {\n return column;\n }\n });\n\nexport const isFilteredColumn = (column: RuntimeColumnDescriptor) =>\n column.filter !== undefined;\n\nexport const stripFilterFromColumns = (columns: RuntimeColumnDescriptor[]) =>\n columns.map((col) => {\n const { filter, ...rest } = col;\n return filter ? rest : col;\n });\n\nexport const extractFilterForColumn = (\n filter: Filter | undefined,\n columnName: string,\n) => {\n if (isMultiClauseFilter(filter)) {\n return collectFiltersForColumn(filter, columnName);\n }\n if (isFilterClause(filter)) {\n return filter.column === columnName ? filter : undefined;\n }\n return undefined;\n};\n\nconst collectFiltersForColumn = (\n filter: MultiClauseFilter,\n columnName: string,\n) => {\n const { filters, op } = filter;\n const results: Filter[] = [];\n filters.forEach((filter) => {\n const ffc = extractFilterForColumn(filter, columnName);\n if (ffc) {\n results.push(ffc);\n }\n });\n if (results.length === 0) {\n return undefined;\n } else if (results.length === 1) {\n return results[0];\n }\n return {\n op,\n filters: results,\n };\n};\n\n// Just until we fully support bool values in filters\nconst stringifyBoolean = (value: string | number | boolean) =>\n typeof value === \"boolean\" ? \"${filter.value}\" : value;\n\nexport const getColumnValueFromFilter = (\n column: ColumnDescriptor,\n operator: ColumnFilterOp,\n filter?: FilterContainerFilter,\n): ColumnFilterValue => {\n if (isSingleValueFilter(filter)) {\n if (filter.column === column.name) {\n if (operator.startsWith(\"between\")) {\n if (filter.op === \"=\") {\n return [`${filter.value}`, \"\"];\n } else if (filter.op === \"<\") {\n return [\"\", `${filter.value}`];\n }\n } else {\n return stringifyBoolean(filter.value);\n }\n }\n } else if (isBetweenFilter(filter)) {\n if (filter.filters[0].column === column.name) {\n const [{ value: v1 }, { value: v2 }] = filter.filters;\n return [`${v1}`, `${v2}`];\n }\n } else if (isAndFilter(filter)) {\n const filterForColumn = filter.filters.find((f) =>\n isBetweenFilter(f)\n ? f.filters[0].column === column.name\n : f.column === column.name,\n );\n if (isSingleValueFilter(filterForColumn)) {\n return stringifyBoolean(filterForColumn.value);\n } else if (\n operator.startsWith(\"between\") &&\n isBetweenFilter(filterForColumn)\n ) {\n const [{ value: v1 }, { value: v2 }] = filterForColumn.filters;\n return [`${v1}`, `${v2}`];\n }\n }\n if (operator.startsWith(\"between\")) {\n if (column.type === \"time\") {\n return [\"00:00:00\", \"23:59:59\"];\n } else {\n return [\"\", \"\"];\n }\n } else {\n return \"\";\n }\n};\n\ntype BetweenFilter = MultiClauseFilter<\"and\", SingleValueFilterClause>;\ntype ChildFilterClause = SingleValueFilterClause | BetweenFilter;\n\nconst betweenFiltersAreEqual = (f1: BetweenFilter, f2: BetweenFilter) => {\n const [from1, to1] = f1.filters;\n const [from2, to2] = f2.filters;\n return filtersAreEqual(from1, from2) && filtersAreEqual(to1, to2);\n};\n\nconst singleValueFilterClausesAreEqual = (\n f1: SingleValueFilterClause,\n f2: SingleValueFilterClause,\n) => f1.column === f2.column && f1.op === f2.op && f1.value === f2.value;\n\nconst findEqualFilter =\n (filters: ChildFilterClause[]) => (filter: ChildFilterClause) => {\n if (isBetweenFilter(filter)) {\n const target = filters.find(\n (f) => isBetweenFilter(f) && betweenFiltersAreEqual(f, filter),\n );\n return target !== undefined;\n } else {\n // A FilterContainerFilter only has one filter clause per column\n const target = filters.find((f) => f.column === filter.column);\n if (target) {\n return target.op === filter.op && target.value === filter.value;\n }\n }\n return false;\n };\n\nexport const filtersAreEqual = (\n f1: FilterContainerFilter | null | undefined,\n f2: FilterContainerFilter | null | undefined,\n): boolean => {\n if (f1 == null && f2 == null) {\n return true;\n } else if (f1 == null || f2 == null) {\n return false;\n } else if (isSingleValueFilter(f1) && isSingleValueFilter(f2)) {\n return singleValueFilterClausesAreEqual(f1, f2);\n } else if (isBetweenFilter(f1) && isBetweenFilter(f2)) {\n return betweenFiltersAreEqual(f1, f2);\n } else if (isAndFilter(f1) && isAndFilter(f2)) {\n if (f1.filters.length === f2.filters.length) {\n return f1.filters.every(findEqualFilter(f2.filters));\n }\n }\n\n return false;\n};\n"],"names":["filter"],"mappings":"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"}
|