@finos/legend-query-builder 0.6.30 → 0.6.32

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.
Files changed (131) hide show
  1. package/lib/components/QueryBuilder.d.ts.map +1 -1
  2. package/lib/components/QueryBuilder.js +1 -1
  3. package/lib/components/QueryBuilder.js.map +1 -1
  4. package/lib/components/QueryBuilderComponentTestUtils.d.ts.map +1 -1
  5. package/lib/components/QueryBuilderComponentTestUtils.js +2 -2
  6. package/lib/components/QueryBuilderComponentTestUtils.js.map +1 -1
  7. package/lib/components/QueryBuilderConstantExpressionPanel.d.ts.map +1 -1
  8. package/lib/components/QueryBuilderConstantExpressionPanel.js +3 -2
  9. package/lib/components/QueryBuilderConstantExpressionPanel.js.map +1 -1
  10. package/lib/components/QueryBuilderDiffPanel.js +1 -1
  11. package/lib/components/QueryBuilderDiffPanel.js.map +1 -1
  12. package/lib/components/QueryBuilderNavigationBlocker.js +4 -4
  13. package/lib/components/QueryBuilderNavigationBlocker.js.map +1 -1
  14. package/lib/components/QueryBuilderParametersPanel.d.ts.map +1 -1
  15. package/lib/components/QueryBuilderParametersPanel.js +4 -3
  16. package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
  17. package/lib/components/QueryBuilderPropertyExpressionEditor.js +1 -1
  18. package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
  19. package/lib/components/QueryBuilderResultPanel.js +4 -4
  20. package/lib/components/QueryBuilderResultPanel.js.map +1 -1
  21. package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
  22. package/lib/components/QueryBuilderSideBar.js +9 -6
  23. package/lib/components/QueryBuilderSideBar.js.map +1 -1
  24. package/lib/components/QueryBuilderTextEditor.js +1 -1
  25. package/lib/components/QueryBuilderTextEditor.js.map +1 -1
  26. package/lib/components/explorer/QueryBuilderExplorerPanel.js +2 -2
  27. package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
  28. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js +3 -3
  29. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
  30. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts.map +1 -1
  31. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +1 -1
  32. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
  33. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
  34. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +9 -6
  35. package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
  36. package/lib/components/filter/QueryBuilderFilterPanel.js +3 -3
  37. package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
  38. package/lib/components/shared/BasicValueSpecificationEditor.d.ts.map +1 -1
  39. package/lib/components/shared/BasicValueSpecificationEditor.js +1 -1
  40. package/lib/components/shared/BasicValueSpecificationEditor.js.map +1 -1
  41. package/lib/components/shared/CustomDatePicker.d.ts.map +1 -1
  42. package/lib/components/shared/CustomDatePicker.js +3 -7
  43. package/lib/components/shared/CustomDatePicker.js.map +1 -1
  44. package/lib/components/shared/LambdaEditor.js +3 -3
  45. package/lib/components/shared/LambdaEditor.js.map +1 -1
  46. package/lib/components/workflows/ClassQueryBuilder.d.ts.map +1 -1
  47. package/lib/components/workflows/ClassQueryBuilder.js +6 -4
  48. package/lib/components/workflows/ClassQueryBuilder.js.map +1 -1
  49. package/lib/components/workflows/MappingQueryBuilder.d.ts.map +1 -1
  50. package/lib/components/workflows/MappingQueryBuilder.js +6 -4
  51. package/lib/components/workflows/MappingQueryBuilder.js.map +1 -1
  52. package/lib/components/workflows/ServiceQueryBuilder.d.ts.map +1 -1
  53. package/lib/components/workflows/ServiceQueryBuilder.js +3 -2
  54. package/lib/components/workflows/ServiceQueryBuilder.js.map +1 -1
  55. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.js +2 -2
  56. package/lib/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.js.map +1 -1
  57. package/lib/index.css +2 -2
  58. package/lib/index.css.map +1 -1
  59. package/lib/package.json +7 -7
  60. package/lib/stores/QueryBuilderChangeDetectionState.js +1 -1
  61. package/lib/stores/QueryBuilderChangeDetectionState.js.map +1 -1
  62. package/lib/stores/QueryBuilderConstantsState.d.ts.map +1 -1
  63. package/lib/stores/QueryBuilderConstantsState.js +1 -1
  64. package/lib/stores/QueryBuilderConstantsState.js.map +1 -1
  65. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  66. package/lib/stores/QueryBuilderResultState.js +11 -16
  67. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  68. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  69. package/lib/stores/QueryBuilderState.js +10 -10
  70. package/lib/stores/QueryBuilderState.js.map +1 -1
  71. package/lib/stores/QueryBuilderTelemetry.d.ts +1 -1
  72. package/lib/stores/QueryBuilderTelemetry.d.ts.map +1 -1
  73. package/lib/stores/QueryBuilderTextEditorState.js +3 -3
  74. package/lib/stores/QueryBuilderTextEditorState.js.map +1 -1
  75. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
  76. package/lib/stores/explorer/QueryBuilderExplorerState.js +4 -4
  77. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  78. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +3 -3
  79. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
  80. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js +1 -1
  81. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js.map +1 -1
  82. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +3 -3
  83. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
  84. package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.js +1 -1
  85. package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.js.map +1 -1
  86. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +2 -2
  87. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
  88. package/lib/stores/filter/QueryBuilderFilterState.d.ts.map +1 -1
  89. package/lib/stores/filter/QueryBuilderFilterState.js +1 -1
  90. package/lib/stores/filter/QueryBuilderFilterState.js.map +1 -1
  91. package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts +3 -2
  92. package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts.map +1 -1
  93. package/lib/stores/shared/ValueSpecificationEditorHelper.js +32 -22
  94. package/lib/stores/shared/ValueSpecificationEditorHelper.js.map +1 -1
  95. package/package.json +14 -14
  96. package/src/components/QueryBuilder.tsx +3 -1
  97. package/src/components/QueryBuilderComponentTestUtils.tsx +5 -2
  98. package/src/components/QueryBuilderConstantExpressionPanel.tsx +6 -2
  99. package/src/components/QueryBuilderDiffPanel.tsx +1 -1
  100. package/src/components/QueryBuilderNavigationBlocker.tsx +4 -4
  101. package/src/components/QueryBuilderParametersPanel.tsx +9 -3
  102. package/src/components/QueryBuilderPropertyExpressionEditor.tsx +1 -1
  103. package/src/components/QueryBuilderResultPanel.tsx +4 -4
  104. package/src/components/QueryBuilderSideBar.tsx +18 -6
  105. package/src/components/QueryBuilderTextEditor.tsx +1 -1
  106. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +2 -2
  107. package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +3 -3
  108. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +3 -1
  109. package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +13 -6
  110. package/src/components/filter/QueryBuilderFilterPanel.tsx +3 -3
  111. package/src/components/shared/BasicValueSpecificationEditor.tsx +3 -1
  112. package/src/components/shared/CustomDatePicker.tsx +9 -16
  113. package/src/components/shared/LambdaEditor.tsx +3 -3
  114. package/src/components/workflows/ClassQueryBuilder.tsx +12 -4
  115. package/src/components/workflows/MappingQueryBuilder.tsx +12 -4
  116. package/src/components/workflows/ServiceQueryBuilder.tsx +7 -2
  117. package/src/graphManager/protocol/pure/v1/V1_QueryBuilder_PureGraphManagerExtension.ts +2 -2
  118. package/src/stores/QueryBuilderChangeDetectionState.ts +1 -1
  119. package/src/stores/QueryBuilderConstantsState.ts +3 -1
  120. package/src/stores/QueryBuilderResultState.ts +23 -16
  121. package/src/stores/QueryBuilderState.ts +16 -10
  122. package/src/stores/QueryBuilderTelemetry.ts +1 -1
  123. package/src/stores/QueryBuilderTextEditorState.ts +3 -3
  124. package/src/stores/explorer/QueryBuilderExplorerState.ts +6 -4
  125. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +3 -3
  126. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.ts +1 -1
  127. package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +3 -3
  128. package/src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.ts +1 -1
  129. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +2 -2
  130. package/src/stores/filter/QueryBuilderFilterState.ts +3 -1
  131. package/src/stores/shared/ValueSpecificationEditorHelper.ts +54 -50
@@ -197,11 +197,13 @@ export class QueryBuilderResultState {
197
197
  this.exportDataState.pass();
198
198
  } catch (error) {
199
199
  assertErrorThrown(error);
200
- this.queryBuilderState.applicationStore.log.error(
200
+ this.queryBuilderState.applicationStore.logService.error(
201
201
  LogEvent.create(GRAPH_MANAGER_EVENT.EXECUTION_FAILURE),
202
202
  error,
203
203
  );
204
- this.queryBuilderState.applicationStore.notifyError(error);
204
+ this.queryBuilderState.applicationStore.notificationService.notifyError(
205
+ error,
206
+ );
205
207
  this.exportDataState.fail();
206
208
  }
207
209
  }
@@ -254,13 +256,13 @@ export class QueryBuilderResultState {
254
256
  if (this.queryRunPromise === promise) {
255
257
  this.setExecutionResult(result);
256
258
  this.latestRunHashCode = currentHashCode;
257
- stopWatch.record();
258
259
  this.setExecutionDuration(stopWatch.elapsed);
259
260
 
260
- report.timings = {
261
- ...report.timings,
262
- total: stopWatch.elapsed,
263
- };
261
+ report.timings =
262
+ this.queryBuilderState.applicationStore.timeService.finalizeTimingsRecord(
263
+ stopWatch,
264
+ report.timings,
265
+ );
264
266
  QueryBuilderTelemetry.logEvent_QueryRunSucceeded(
265
267
  this.queryBuilderState.applicationStore.telemetryService,
266
268
  report,
@@ -268,11 +270,13 @@ export class QueryBuilderResultState {
268
270
  }
269
271
  } catch (error) {
270
272
  assertErrorThrown(error);
271
- this.queryBuilderState.applicationStore.log.error(
273
+ this.queryBuilderState.applicationStore.logService.error(
272
274
  LogEvent.create(GRAPH_MANAGER_EVENT.EXECUTION_FAILURE),
273
275
  error,
274
276
  );
275
- this.queryBuilderState.applicationStore.notifyError(error);
277
+ this.queryBuilderState.applicationStore.notificationService.notifyError(
278
+ error,
279
+ );
276
280
  } finally {
277
281
  this.setIsRunningQuery(false);
278
282
  this.pressedRunQuery.complete();
@@ -350,11 +354,12 @@ export class QueryBuilderResultState {
350
354
  }
351
355
  stopWatch.record(QUERY_BUILDER_EVENT.BUILD_EXECUTION_PLAN__SUCCESS);
352
356
 
353
- report.timings = {
354
- ...report.timings,
355
- ...Object.fromEntries(stopWatch.records),
356
- total: stopWatch.elapsed,
357
- };
357
+ // report
358
+ report.timings =
359
+ this.queryBuilderState.applicationStore.timeService.finalizeTimingsRecord(
360
+ stopWatch,
361
+ report.timings,
362
+ );
358
363
  if (debug) {
359
364
  QueryBuilderTelemetry.logEvent_ExecutionPlanDebugSucceeded(
360
365
  this.queryBuilderState.applicationStore.telemetryService,
@@ -368,11 +373,13 @@ export class QueryBuilderResultState {
368
373
  }
369
374
  } catch (error) {
370
375
  assertErrorThrown(error);
371
- this.queryBuilderState.applicationStore.log.error(
376
+ this.queryBuilderState.applicationStore.logService.error(
372
377
  LogEvent.create(GRAPH_MANAGER_EVENT.EXECUTION_FAILURE),
373
378
  error,
374
379
  );
375
- this.queryBuilderState.applicationStore.notifyError(error);
380
+ this.queryBuilderState.applicationStore.notificationService.notifyError(
381
+ error,
382
+ );
376
383
  } finally {
377
384
  this.isGeneratingPlan = false;
378
385
  }
@@ -268,7 +268,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
268
268
  }
269
269
 
270
270
  registerCommands(): void {
271
- this.applicationStore.commandCenter.registerCommand({
271
+ this.applicationStore.commandService.registerCommand({
272
272
  key: QUERY_BUILDER_COMMAND_KEY.COMPILE,
273
273
  action: () => {
274
274
  flowResult(this.compileQuery()).catch(
@@ -291,7 +291,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
291
291
 
292
292
  deregisterCommands(): void {
293
293
  [QUERY_BUILDER_COMMAND_KEY.COMPILE].forEach((key) =>
294
- this.applicationStore.commandCenter.deregisterCommand(key),
294
+ this.applicationStore.commandService.deregisterCommand(key),
295
295
  );
296
296
  }
297
297
 
@@ -439,7 +439,9 @@ export abstract class QueryBuilderState implements CommandRegistrar {
439
439
  await onSaveQuery(query);
440
440
  } catch (error) {
441
441
  assertErrorThrown(error);
442
- this.applicationStore.notifyError(`Can't save query: ${error.message}`);
442
+ this.applicationStore.notificationService.notifyError(
443
+ `Can't save query: ${error.message}`,
444
+ );
443
445
  }
444
446
  }
445
447
 
@@ -457,10 +459,12 @@ export abstract class QueryBuilderState implements CommandRegistrar {
457
459
  this.graphManagerState.graph,
458
460
  { keepSourceInformation: true },
459
461
  )) as string;
460
- this.applicationStore.notifySuccess('Compiled successfully');
462
+ this.applicationStore.notificationService.notifySuccess(
463
+ 'Compiled successfully',
464
+ );
461
465
  } catch (error) {
462
466
  assertErrorThrown(error);
463
- this.applicationStore.log.error(
467
+ this.applicationStore.logService.error(
464
468
  LogEvent.create(GRAPH_MANAGER_EVENT.COMPILATION_FAILURE),
465
469
  error,
466
470
  );
@@ -476,7 +480,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
476
480
 
477
481
  // decide if we need to fall back to text mode for debugging
478
482
  if (fallbackToTextModeForDebugging) {
479
- this.applicationStore.notifyWarning(
483
+ this.applicationStore.notificationService.notifyWarning(
480
484
  'Compilation failed and error cannot be located in form mode. Redirected to text mode for debugging.',
481
485
  );
482
486
  this.textEditorState.openModal(QueryBuilderTextEditorMode.TEXT);
@@ -487,7 +491,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
487
491
  // of query builder text-mode
488
492
  // See https://github.com/finos/legend-studio/issues/319
489
493
  } else {
490
- this.applicationStore.notifyWarning(
494
+ this.applicationStore.notificationService.notifyWarning(
491
495
  `Compilation failed: ${error.message}`,
492
496
  );
493
497
  }
@@ -503,15 +507,17 @@ export abstract class QueryBuilderState implements CommandRegistrar {
503
507
  this.graphManagerState.graph,
504
508
  { keepSourceInformation: true },
505
509
  )) as string;
506
- this.applicationStore.notifySuccess('Compiled successfully');
510
+ this.applicationStore.notificationService.notifySuccess(
511
+ 'Compiled successfully',
512
+ );
507
513
  } catch (error) {
508
514
  assertErrorThrown(error);
509
515
  if (error instanceof CompilationError) {
510
- this.applicationStore.log.error(
516
+ this.applicationStore.logService.error(
511
517
  LogEvent.create(GRAPH_MANAGER_EVENT.COMPILATION_FAILURE),
512
518
  error,
513
519
  );
514
- this.applicationStore.notifyWarning(
520
+ this.applicationStore.notificationService.notifyWarning(
515
521
  `Compilation failed: ${error.message}`,
516
522
  );
517
523
  const errorElementCoordinates = extractSourceInformationCoordinates(
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import type { GraphManagerOperationReport } from '@finos/legend-graph';
18
- import type { TelemetryService } from '@finos/legend-shared';
18
+ import type { TelemetryService } from '@finos/legend-application';
19
19
  import { QUERY_BUILDER_EVENT } from './QueryBuilderEvent.js';
20
20
 
21
21
  type LaunchQueryExecution_TelemteryData = {
@@ -118,7 +118,7 @@ export class QueryBuilderTextEditorState extends LambdaEditorState {
118
118
  if (error instanceof ParserError) {
119
119
  this.setParserError(error);
120
120
  }
121
- this.queryBuilderState.applicationStore.log.error(
121
+ this.queryBuilderState.applicationStore.logService.error(
122
122
  LogEvent.create(GRAPH_MANAGER_EVENT.PARSING_FAILURE),
123
123
  error,
124
124
  );
@@ -156,7 +156,7 @@ export class QueryBuilderTextEditorState extends LambdaEditorState {
156
156
  this.isConvertingLambdaToString = false;
157
157
  } catch (error) {
158
158
  assertErrorThrown(error);
159
- this.queryBuilderState.applicationStore.log.error(
159
+ this.queryBuilderState.applicationStore.logService.error(
160
160
  LogEvent.create(GRAPH_MANAGER_EVENT.PARSING_FAILURE),
161
161
  error,
162
162
  );
@@ -194,7 +194,7 @@ export class QueryBuilderTextEditorState extends LambdaEditorState {
194
194
  if (this.mode === QueryBuilderTextEditorMode.TEXT) {
195
195
  yield flowResult(this.convertLambdaGrammarStringToObject());
196
196
  if (this.parserError) {
197
- this.queryBuilderState.applicationStore.notifyError(
197
+ this.queryBuilderState.applicationStore.notificationService.notifyError(
198
198
  `Can't parse query. Please fix error before closing: ${this.parserError.message}`,
199
199
  );
200
200
  } else {
@@ -679,7 +679,9 @@ export class QueryBuilderExplorerState {
679
679
  this.refreshTreeData();
680
680
  } catch (error) {
681
681
  assertErrorThrown(error);
682
- this.queryBuilderState.applicationStore.notifyError(error.message);
682
+ this.queryBuilderState.applicationStore.notificationService.notifyError(
683
+ error.message,
684
+ );
683
685
  } finally {
684
686
  this.mappingModelCoverageAnalysisState.complete();
685
687
  }
@@ -691,7 +693,7 @@ export class QueryBuilderExplorerState {
691
693
  ): GeneratorFn<void> {
692
694
  const runtime = this.queryBuilderState.runtimeValue;
693
695
  if (!runtime) {
694
- this.queryBuilderState.applicationStore.notifyWarning(
696
+ this.queryBuilderState.applicationStore.notificationService.notifyWarning(
695
697
  `Can't preview data for property '${node.property.name}': runtime is not specified`,
696
698
  );
697
699
  return;
@@ -704,7 +706,7 @@ export class QueryBuilderExplorerState {
704
706
  return;
705
707
  }
706
708
  if (this.previewDataState.isGeneratingPreviewData) {
707
- this.queryBuilderState.applicationStore.notifyWarning(
709
+ this.queryBuilderState.applicationStore.notificationService.notifyWarning(
708
710
  `Can't preview data for property '${node.property.name}': another preview request is being executed`,
709
711
  );
710
712
  return;
@@ -786,7 +788,7 @@ export class QueryBuilderExplorerState {
786
788
  }
787
789
  } catch (error) {
788
790
  assertErrorThrown(error);
789
- this.queryBuilderState.applicationStore.notifyWarning(
791
+ this.queryBuilderState.applicationStore.notificationService.notifyWarning(
790
792
  `Can't preview data for property '${node.property.name}'. Error: ${error.message}`,
791
793
  );
792
794
  this.previewDataState.setPreviewData(undefined);
@@ -181,7 +181,7 @@ export class QueryBuilderGraphFetchTreeState
181
181
  },
182
182
  ): void {
183
183
  if (!this.treeData) {
184
- this.queryBuilderState.applicationStore.notifyWarning(
184
+ this.queryBuilderState.applicationStore.notificationService.notifyWarning(
185
185
  `Can't add property: graph-fetch tree has not been properly initialized`,
186
186
  );
187
187
  return;
@@ -211,7 +211,7 @@ export class QueryBuilderGraphFetchTreeState
211
211
 
212
212
  fetchProperties(nodes: QueryBuilderExplorerTreePropertyNodeData[]): void {
213
213
  if (!this.treeData) {
214
- this.queryBuilderState.applicationStore.notifyWarning(
214
+ this.queryBuilderState.applicationStore.notificationService.notifyWarning(
215
215
  `Can't add property: graph-fetch tree has not been properly initialized`,
216
216
  );
217
217
  return;
@@ -224,7 +224,7 @@ export class QueryBuilderGraphFetchTreeState
224
224
 
225
225
  checkBeforeChangingImplementation(onChange: () => void): void {
226
226
  if (this.treeData?.rootIds.length) {
227
- this.queryBuilderState.applicationStore.setActionAlertInfo({
227
+ this.queryBuilderState.applicationStore.alertService.setActionAlertInfo({
228
228
  message:
229
229
  'Current graph-fetch will be lost when switching to projection mode. Do you still want to proceed?',
230
230
  type: ActionAlertType.CAUTION,
@@ -253,7 +253,7 @@ export const addQueryBuilderPropertyNode = (
253
253
  parentExplorerTreeNode.parentId,
254
254
  );
255
255
  } else {
256
- queryBuilderState.applicationStore.notifyError(
256
+ queryBuilderState.applicationStore.notificationService.notifyError(
257
257
  `Can't cast the root class of graph fetch structure to its subtype`,
258
258
  );
259
259
  return;
@@ -360,7 +360,7 @@ export class QueryBuilderTDSState
360
360
  });
361
361
  } catch (error) {
362
362
  assertErrorThrown(error);
363
- this.queryBuilderState.applicationStore.log.error(
363
+ this.queryBuilderState.applicationStore.logService.error(
364
364
  LogEvent.create(GRAPH_MANAGER_EVENT.PARSING_FAILURE),
365
365
  error,
366
366
  );
@@ -609,7 +609,7 @@ export class QueryBuilderTDSState
609
609
  }
610
610
 
611
611
  checkBeforeClearingColumns(onChange: () => void): void {
612
- this.queryBuilderState.applicationStore.setActionAlertInfo({
612
+ this.queryBuilderState.applicationStore.alertService.setActionAlertInfo({
613
613
  message:
614
614
  'You will be clearing all projection columns. Do you still want to proceed?',
615
615
  type: ActionAlertType.CAUTION,
@@ -637,7 +637,7 @@ export class QueryBuilderTDSState
637
637
  // but we make the assumption that if there is no projection column, there should
638
638
  // not be any post-filter at all
639
639
  ) {
640
- this.queryBuilderState.applicationStore.setActionAlertInfo({
640
+ this.queryBuilderState.applicationStore.alertService.setActionAlertInfo({
641
641
  message:
642
642
  this.showPostFilterPanel && this.postFilterState.nodes.size > 0
643
643
  ? 'With graph-fetch mode, post filter is not supported. Current projection columns and post filters will be lost when switching to the graph-fetch mode. Do you still want to proceed?'
@@ -452,7 +452,7 @@ export class PostFilterConditionState implements Hashable {
452
452
  }
453
453
  } catch (error) {
454
454
  assertErrorThrown(error);
455
- this.postFilterState.tdsState.queryBuilderState.applicationStore.notifyError(
455
+ this.postFilterState.tdsState.queryBuilderState.applicationStore.notificationService.notifyError(
456
456
  `Can't drag column '${columnState.columnName}' due to: ${error.message}`,
457
457
  );
458
458
  }
@@ -215,7 +215,7 @@ class QueryBuilderDerivationProjectionLambdaState extends LambdaEditorState {
215
215
  if (error instanceof ParserError) {
216
216
  this.setParserError(error);
217
217
  }
218
- this.queryBuilderState.applicationStore.log.error(
218
+ this.queryBuilderState.applicationStore.logService.error(
219
219
  LogEvent.create(GRAPH_MANAGER_EVENT.PARSING_FAILURE),
220
220
  error,
221
221
  );
@@ -251,7 +251,7 @@ class QueryBuilderDerivationProjectionLambdaState extends LambdaEditorState {
251
251
  this.clearErrors();
252
252
  } catch (error) {
253
253
  assertErrorThrown(error);
254
- this.queryBuilderState.applicationStore.log.error(
254
+ this.queryBuilderState.applicationStore.logService.error(
255
255
  LogEvent.create(GRAPH_MANAGER_EVENT.PARSING_FAILURE),
256
256
  error,
257
257
  );
@@ -158,7 +158,9 @@ export class FilterConditionState implements Hashable {
158
158
  new FilterConditionState(this.filterState, propertyExpression);
159
159
  } catch (error) {
160
160
  assertErrorThrown(error);
161
- this.filterState.queryBuilderState.applicationStore.notifyError(error);
161
+ this.filterState.queryBuilderState.applicationStore.notificationService.notifyError(
162
+ error,
163
+ );
162
164
  return;
163
165
  }
164
166
 
@@ -16,14 +16,11 @@
16
16
 
17
17
  import {
18
18
  type PureModel,
19
- type InstanceValue,
20
19
  VariableExpression,
21
20
  type ValueSpecification,
22
21
  type Type,
23
22
  type Enum,
24
23
  CollectionInstanceValue,
25
- DATE_FORMAT,
26
- DATE_TIME_FORMAT,
27
24
  Enumeration,
28
25
  EnumValueExplicitReference,
29
26
  EnumValueInstanceValue,
@@ -35,53 +32,73 @@ import {
35
32
  PRIMITIVE_TYPE,
36
33
  INTERNAL__PropagatedValue,
37
34
  SimpleFunctionExpression,
35
+ SUPPORTED_FUNCTIONS,
38
36
  } from '@finos/legend-graph';
39
- import {
40
- addDays,
41
- formatDate,
42
- Randomizer,
43
- UnsupportedOperationError,
44
- } from '@finos/legend-shared';
37
+ import { Randomizer, UnsupportedOperationError } from '@finos/legend-shared';
45
38
  import { generateDefaultValueForPrimitiveType } from '../QueryBuilderValueSpecificationHelper.js';
46
- import { instanceValue_setValues } from './ValueSpecificationModifierHelper.js';
39
+ import {
40
+ instanceValue_setValues,
41
+ valueSpecification_setGenericType,
42
+ } from './ValueSpecificationModifierHelper.js';
43
+
44
+ const VAR_DEFAULT_NAME = 'var';
45
+
46
+ export const createSupportedFunctionExpression = (
47
+ supportedFuncName: SUPPORTED_FUNCTIONS,
48
+ expectedReturnType: Type,
49
+ ): SimpleFunctionExpression => {
50
+ const funcExpression = new SimpleFunctionExpression(supportedFuncName);
51
+ valueSpecification_setGenericType(
52
+ funcExpression,
53
+ GenericTypeExplicitReference.create(new GenericType(expectedReturnType)),
54
+ );
55
+ return funcExpression;
56
+ };
47
57
 
48
- const createMockPrimitiveProperty = (
58
+ const createMockPrimitiveValueSpecification = (
49
59
  primitiveType: PrimitiveType,
50
60
  propertyName: string,
51
- ): string | number | boolean => {
61
+ ): ValueSpecification => {
62
+ const primitiveTypeName = primitiveType.name;
63
+ if (
64
+ primitiveTypeName === PRIMITIVE_TYPE.DATE ||
65
+ primitiveTypeName === PRIMITIVE_TYPE.DATETIME
66
+ ) {
67
+ return createSupportedFunctionExpression(
68
+ SUPPORTED_FUNCTIONS.NOW,
69
+ PrimitiveType.DATETIME,
70
+ );
71
+ } else if (primitiveTypeName === PRIMITIVE_TYPE.STRICTDATE) {
72
+ return createSupportedFunctionExpression(
73
+ SUPPORTED_FUNCTIONS.TODAY,
74
+ PrimitiveType.STRICTDATE,
75
+ );
76
+ }
77
+ const primitiveInstanceValue = new PrimitiveInstanceValue(
78
+ GenericTypeExplicitReference.create(new GenericType(primitiveType)),
79
+ );
52
80
  const randomizer = new Randomizer();
81
+ let value: string | boolean | number;
53
82
  switch (primitiveType.name) {
54
83
  case PRIMITIVE_TYPE.BOOLEAN:
55
- return randomizer.getRandomItemInCollection([true, false]) ?? true;
84
+ value = randomizer.getRandomItemInCollection([true, false]) ?? true;
85
+ break;
56
86
  case PRIMITIVE_TYPE.FLOAT:
57
- return randomizer.getRandomFloat();
87
+ value = randomizer.getRandomFloat();
88
+ break;
58
89
  case PRIMITIVE_TYPE.DECIMAL:
59
- return randomizer.getRandomDouble();
90
+ value = randomizer.getRandomDouble();
91
+ break;
60
92
  case PRIMITIVE_TYPE.NUMBER:
61
93
  case PRIMITIVE_TYPE.INTEGER:
62
- return randomizer.getRandomWholeNumber(100);
63
- // NOTE that `Date` is the umbrella type that comprises `StrictDate` and `DateTime`, but for simplicity, we will generate `Date` as `StrictDate`
64
- case PRIMITIVE_TYPE.DATE:
65
- case PRIMITIVE_TYPE.STRICTDATE:
66
- return formatDate(
67
- randomizer.getRandomDate(
68
- new Date(Date.now()),
69
- addDays(Date.now(), 100),
70
- ),
71
- DATE_FORMAT,
72
- );
73
- case PRIMITIVE_TYPE.DATETIME:
74
- return formatDate(
75
- randomizer.getRandomDate(
76
- new Date(Date.now()),
77
- addDays(Date.now(), 100),
78
- ),
79
- DATE_TIME_FORMAT,
80
- );
94
+ value = randomizer.getRandomWholeNumber(100);
95
+ break;
81
96
  case PRIMITIVE_TYPE.STRING:
82
97
  default:
83
- return `${propertyName} ${randomizer.getRandomWholeNumber(100)}`;
98
+ value = `${propertyName} ${randomizer.getRandomWholeNumber(100)}`;
84
99
  }
100
+ instanceValue_setValues(primitiveInstanceValue, [value]);
101
+ return primitiveInstanceValue;
85
102
  };
86
103
 
87
104
  export const createMockEnumerationProperty = (
@@ -155,7 +172,7 @@ export const buildDefaultInstanceValue = (
155
172
  export const generateVariableExpressionMockValue = (
156
173
  parameter: VariableExpression,
157
174
  graph: PureModel,
158
- ): InstanceValue | undefined => {
175
+ ): ValueSpecification | undefined => {
159
176
  const varType = parameter.genericType?.value.rawType;
160
177
  const multiplicity = parameter.multiplicity;
161
178
  if ((!multiplicity.upperBound || multiplicity.upperBound > 1) && varType) {
@@ -165,20 +182,7 @@ export const generateVariableExpressionMockValue = (
165
182
  );
166
183
  }
167
184
  if (varType instanceof PrimitiveType) {
168
- const primitiveInstanceValue = new PrimitiveInstanceValue(
169
- GenericTypeExplicitReference.create(
170
- varType === PrimitiveType.DATE
171
- ? new GenericType(PrimitiveType.STRICTDATE)
172
- : new GenericType(varType),
173
- ),
174
- );
175
- instanceValue_setValues(primitiveInstanceValue, [
176
- createMockPrimitiveProperty(
177
- varType,
178
- parameter.name === '' ? 'myVar' : parameter.name,
179
- ),
180
- ]);
181
- return primitiveInstanceValue;
185
+ return createMockPrimitiveValueSpecification(varType, VAR_DEFAULT_NAME);
182
186
  } else if (varType instanceof Enumeration) {
183
187
  const enumValueInstance = new EnumValueInstanceValue(
184
188
  GenericTypeExplicitReference.create(new GenericType(varType)),