@finos/legend-query-builder 4.15.25 → 4.15.26

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 (36) hide show
  1. package/lib/components/QueryBuilder.d.ts.map +1 -1
  2. package/lib/components/QueryBuilder.js +2 -2
  3. package/lib/components/QueryBuilder.js.map +1 -1
  4. package/lib/components/data-cube/QueryBuilderDataCube.d.ts +7 -3
  5. package/lib/components/data-cube/QueryBuilderDataCube.d.ts.map +1 -1
  6. package/lib/components/data-cube/QueryBuilderDataCube.js +11 -15
  7. package/lib/components/data-cube/QueryBuilderDataCube.js.map +1 -1
  8. package/lib/components/result/QueryBuilderResultPanel.js +2 -2
  9. package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
  10. package/lib/index.css +2 -2
  11. package/lib/index.css.map +1 -1
  12. package/lib/index.d.ts +1 -0
  13. package/lib/index.d.ts.map +1 -1
  14. package/lib/index.js +1 -0
  15. package/lib/index.js.map +1 -1
  16. package/lib/package.json +1 -1
  17. package/lib/stores/QueryBuilderState.d.ts +4 -2
  18. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  19. package/lib/stores/QueryBuilderState.js +16 -5
  20. package/lib/stores/QueryBuilderState.js.map +1 -1
  21. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.d.ts +3 -3
  22. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.d.ts.map +1 -1
  23. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js +7 -4
  24. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js.map +1 -1
  25. package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.d.ts +2 -2
  26. package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.d.ts.map +1 -1
  27. package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.js +0 -1
  28. package/lib/stores/data-cube/QueryBuilderDataCubeEngineHelper.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/components/QueryBuilder.tsx +6 -3
  31. package/src/components/data-cube/QueryBuilderDataCube.tsx +31 -27
  32. package/src/components/result/QueryBuilderResultPanel.tsx +2 -2
  33. package/src/index.ts +1 -0
  34. package/src/stores/QueryBuilderState.ts +19 -5
  35. package/src/stores/data-cube/QueryBuilderDataCubeEngine.ts +14 -11
  36. package/src/stores/data-cube/QueryBuilderDataCubeEngineHelper.ts +1 -2
@@ -15,7 +15,6 @@
15
15
  */
16
16
 
17
17
  import { DataCube } from '@finos/legend-data-cube';
18
- import type { QueryBuilderState } from '../../stores/QueryBuilderState.js';
19
18
  import { observer } from 'mobx-react-lite';
20
19
  import {
21
20
  clsx,
@@ -25,56 +24,61 @@ import {
25
24
  ModalFooterButton,
26
25
  TimesIcon,
27
26
  } from '@finos/legend-art';
28
- import { createDataCubeEngineFromQueryBuilder } from '../../stores/data-cube/QueryBuilderDataCubeEngineHelper.js';
27
+ import type { QueryBuilderDataCubeEngine } from '../../stores/data-cube/QueryBuilderDataCubeEngine.js';
29
28
 
30
- const QueryBuilderDataCube = observer(
31
- (props: { queryBuilderState: QueryBuilderState }) => {
32
- const { queryBuilderState } = props;
33
- const engine = createDataCubeEngineFromQueryBuilder(queryBuilderState);
34
-
35
- if (!engine) {
36
- return null;
37
- }
38
- return <DataCube engine={engine} />;
39
- },
40
- );
41
-
42
- export const QueryBuilderDataCubeDialog = observer(
43
- (props: { queryBuilderState: QueryBuilderState }) => {
44
- const { queryBuilderState } = props;
45
- const closeModal = () => queryBuilderState.setIsCubeEnabled(false);
29
+ export const QueryDataCubeViewer = observer(
30
+ (props: {
31
+ engine: QueryBuilderDataCubeEngine;
32
+ close: () => void;
33
+ options?: {
34
+ fullScreen: boolean;
35
+ };
36
+ }) => {
37
+ const { engine, close, options } = props;
46
38
  return (
47
39
  <Dialog
48
40
  open={true}
49
- onClose={closeModal}
41
+ onClose={close}
50
42
  classes={{
51
43
  root: 'editor-modal__root-container',
52
44
  container: 'editor-modal__container',
53
- paper: 'editor-modal__content',
45
+ paper: clsx('editor-modal__content', {
46
+ 'query-builder-data-cube__dialog__container__content':
47
+ options?.fullScreen,
48
+ }),
54
49
  }}
55
50
  >
56
51
  <Modal
57
52
  darkMode={false}
58
- className={clsx('editor-modal query-builder-data-cube__dialog')}
53
+ className={clsx('editor-modal query-builder-data-cube__dialog', {
54
+ 'query-builder-data-cube__dialog--expanded': options?.fullScreen,
55
+ })}
59
56
  >
60
57
  <div className="query-builder-data-cube__dialog__header">
61
58
  <div className="query-builder-data-cube__dialog__header__actions">
62
59
  <button
63
60
  className="query-builder-data-cube__dialog__header__action"
64
61
  tabIndex={-1}
65
- onClick={closeModal}
62
+ onClick={close}
66
63
  title="Close"
67
64
  >
68
65
  <TimesIcon />
69
66
  </button>
70
67
  </div>
71
68
  </div>
72
- <div className="query-builder-data-cube__dialog__content">
73
- <QueryBuilderDataCube queryBuilderState={queryBuilderState} />
69
+ <div
70
+ className={clsx('query-builder-data-cube__dialog__content', {
71
+ 'query-builder-data-cube__dialog__content-full':
72
+ options?.fullScreen,
73
+ })}
74
+ >
75
+ <DataCube engine={engine} />
74
76
  </div>
75
- <ModalFooter>
76
- <ModalFooterButton onClick={closeModal}>Close</ModalFooterButton>
77
- </ModalFooter>
77
+ {!options?.fullScreen && (
78
+ <ModalFooter>
79
+ <ModalFooterButton onClick={close}>Close</ModalFooterButton>
80
+ </ModalFooter>
81
+ )}
78
82
  </Modal>
79
83
  </Dialog>
80
84
  );
@@ -421,13 +421,13 @@ export const QueryBuilderResultPanel = observer(
421
421
  ) {
422
422
  queryParametersState.parameterValuesEditorState.open(
423
423
  (): Promise<void> => {
424
- queryBuilderState.setIsCubeEnabled(true);
424
+ queryBuilderState.openDataCubeEngine();
425
425
  return Promise.resolve();
426
426
  },
427
427
  PARAMETER_SUBMIT_ACTION.DATA_CUBE,
428
428
  );
429
429
  } else {
430
- queryBuilderState.setIsCubeEnabled(true);
430
+ queryBuilderState.openDataCubeEngine();
431
431
  }
432
432
  };
433
433
  const cancelQuery = applicationStore.guardUnhandledError(() =>
package/src/index.ts CHANGED
@@ -30,6 +30,7 @@ export {
30
30
  QueryBuilder_LegendApplicationPlugin,
31
31
  } from './components/QueryBuilder_LegendApplicationPlugin.js';
32
32
  export { QueryBuilderNavigationBlocker } from './components/QueryBuilderNavigationBlocker.js';
33
+ export { QueryDataCubeViewer } from './components/data-cube/QueryBuilderDataCube.js';
33
34
  export { QueryBuilder } from './components/QueryBuilder.js';
34
35
  export { QUERY_BUILDER_COMPONENT_ELEMENT_ID } from './components/QueryBuilderComponentElement.js';
35
36
  export {
@@ -110,6 +110,8 @@ import { QueryBuilderChangeHistoryState } from './QueryBuilderChangeHistoryState
110
110
  import { type QueryBuilderWorkflowState } from './query-workflow/QueryBuilderWorkFlowState.js';
111
111
  import { type QueryChatState } from './QueryChatState.js';
112
112
  import type { QueryBuilder_LegendApplicationPlugin_Extension } from './QueryBuilder_LegendApplicationPlugin_Extension.js';
113
+ import type { QueryBuilderDataCubeEngine } from './data-cube/QueryBuilderDataCubeEngine.js';
114
+ import { createDataCubeEngineFromQueryBuilder } from './data-cube/QueryBuilderDataCubeEngineHelper.js';
113
115
 
114
116
  // eslint-disable-next-line @typescript-eslint/no-empty-object-type
115
117
  export interface QueryableSourceInfo {}
@@ -162,7 +164,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
162
164
  isCheckingEntitlments = false;
163
165
  isCalendarEnabled = false;
164
166
  isLocalModeEnabled = false;
165
- isCubeEnabled = false;
167
+ dataCubeEngine: QueryBuilderDataCubeEngine | undefined;
166
168
  INTERNAL__enableInitializingDefaultSimpleExpressionValue = false;
167
169
 
168
170
  lambdaWriteMode = QUERY_BUILDER_LAMBDA_WRITER_MODE.STANDARD;
@@ -215,7 +217,7 @@ export abstract class QueryBuilderState implements CommandRegistrar {
215
217
  queryChatState: observable,
216
218
  isQueryChatOpened: observable,
217
219
  isLocalModeEnabled: observable,
218
- isCubeEnabled: observable,
220
+ dataCubeEngine: observable,
219
221
  getAllFunction: observable,
220
222
  lambdaWriteMode: observable,
221
223
  INTERNAL__enableInitializingDefaultSimpleExpressionValue: observable,
@@ -229,7 +231,8 @@ export abstract class QueryBuilderState implements CommandRegistrar {
229
231
  setShowParametersPanel: action,
230
232
  setIsEditingWatermark: action,
231
233
  setIsCalendarEnabled: action,
232
- setIsCubeEnabled: action,
234
+ setDataCubeEngine: action,
235
+ openDataCubeEngine: action,
233
236
  setIsCheckingEntitlments: action,
234
237
  setClass: action,
235
238
  setIsQueryChatOpened: action,
@@ -412,8 +415,8 @@ export abstract class QueryBuilderState implements CommandRegistrar {
412
415
  this.isLocalModeEnabled = val;
413
416
  }
414
417
 
415
- setIsCubeEnabled(val: boolean): void {
416
- this.isCubeEnabled = val;
418
+ setDataCubeEngine(val: QueryBuilderDataCubeEngine | undefined): void {
419
+ this.dataCubeEngine = val;
417
420
  }
418
421
 
419
422
  setInternalize(val: QueryBuilderInternalizeState | undefined): void {
@@ -466,6 +469,17 @@ export abstract class QueryBuilderState implements CommandRegistrar {
466
469
  return !this.unsupportedQueryState.rawLambda;
467
470
  }
468
471
 
472
+ openDataCubeEngine(): void {
473
+ try {
474
+ this.setDataCubeEngine(createDataCubeEngineFromQueryBuilder(this));
475
+ } catch (error) {
476
+ assertErrorThrown(error);
477
+ this.applicationStore.notificationService.notifyError(
478
+ `Unable to open data cube in query builder`,
479
+ );
480
+ }
481
+ }
482
+
469
483
  registerCommands(): void {
470
484
  this.applicationStore.commandService.registerCommand({
471
485
  key: QUERY_BUILDER_COMMAND_KEY.COMPILE,
@@ -46,7 +46,7 @@ import { guaranteeType, isNonNullable, LogService } from '@finos/legend-shared';
46
46
 
47
47
  class QueryBuilderDataCubeSource extends DataCubeSource {
48
48
  mapping?: string | undefined;
49
- runtime!: string;
49
+ runtime: string | undefined;
50
50
  }
51
51
 
52
52
  export class QueryBuilderDataCubeEngine extends DataCubeEngine {
@@ -55,14 +55,14 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
55
55
  readonly selectInitialQuery: RawLambda;
56
56
  readonly mappingPath: string | undefined;
57
57
  readonly parameterValues: ParameterValue[] | undefined;
58
- readonly runtimePath: string;
58
+ readonly runtimePath: string | undefined;
59
59
  _parameters: object | undefined;
60
60
 
61
61
  constructor(
62
62
  selectQuery: RawLambda,
63
63
  parameterValues: ParameterValue[] | undefined,
64
64
  mappingPath: string | undefined,
65
- runtimePath: string,
65
+ runtimePath: string | undefined,
66
66
  graphManagerState: GraphManagerState,
67
67
  ) {
68
68
  super();
@@ -177,7 +177,7 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
177
177
  );
178
178
  }
179
179
 
180
- private async getRelationalType(query: RawLambda): Promise<RelationType> {
180
+ async getRelationalType(query: RawLambda): Promise<RelationType> {
181
181
  const relationType =
182
182
  await this.graphState.graphManager.getLambdaRelationType(
183
183
  query,
@@ -242,13 +242,16 @@ export class QueryBuilderDataCubeEngine extends DataCubeEngine {
242
242
  source: DataCubeSource,
243
243
  ): V1_AppliedFunction | undefined {
244
244
  if (source instanceof QueryBuilderDataCubeSource) {
245
- return _function(
246
- DataCubeFunction.FROM,
247
- [
248
- source.mapping ? _elementPtr(source.mapping) : undefined,
249
- _elementPtr(source.runtime),
250
- ].filter(isNonNullable),
251
- );
245
+ const appendFromFunc = Boolean(source.mapping ?? source.runtime);
246
+ return appendFromFunc
247
+ ? _function(
248
+ DataCubeFunction.FROM,
249
+ [
250
+ source.mapping ? _elementPtr(source.mapping) : undefined,
251
+ source.runtime ? _elementPtr(source.runtime) : undefined,
252
+ ].filter(isNonNullable),
253
+ )
254
+ : undefined;
252
255
  }
253
256
  return undefined;
254
257
  }
@@ -14,7 +14,6 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import { type DataCubeEngine } from '@finos/legend-data-cube';
18
17
  import {
19
18
  QUERY_BUILDER_LAMBDA_WRITER_MODE,
20
19
  type QueryBuilderState,
@@ -25,7 +24,7 @@ import { buildExecutionParameterValues } from '../shared/LambdaParameterState.js
25
24
 
26
25
  export const createDataCubeEngineFromQueryBuilder = (
27
26
  queryBuilderState: QueryBuilderState,
28
- ): DataCubeEngine | undefined => {
27
+ ): QueryBuilderDataCubeEngine | undefined => {
29
28
  const runtime =
30
29
  queryBuilderState.executionContextState.runtimeValue instanceof
31
30
  RuntimePointer