@finos/legend-application-query 5.0.2 → 5.1.0

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 (81) hide show
  1. package/lib/components/QueryBuilderFetchStructurePanel.d.ts.map +1 -1
  2. package/lib/components/QueryBuilderFetchStructurePanel.js +1 -1
  3. package/lib/components/QueryBuilderFetchStructurePanel.js.map +1 -1
  4. package/lib/components/QueryBuilderFilterPanel.d.ts.map +1 -1
  5. package/lib/components/QueryBuilderFilterPanel.js +17 -4
  6. package/lib/components/QueryBuilderFilterPanel.js.map +1 -1
  7. package/lib/components/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
  8. package/lib/components/QueryBuilderFunctionsExplorerPanel.js.map +1 -1
  9. package/lib/components/QueryBuilderParameterPanel.d.ts.map +1 -1
  10. package/lib/components/QueryBuilderParameterPanel.js +3 -2
  11. package/lib/components/QueryBuilderParameterPanel.js.map +1 -1
  12. package/lib/components/QueryBuilderPostFilterPanel.d.ts.map +1 -1
  13. package/lib/components/QueryBuilderPostFilterPanel.js +17 -4
  14. package/lib/components/QueryBuilderPostFilterPanel.js.map +1 -1
  15. package/lib/components/QueryBuilderProjectionPanel.d.ts.map +1 -1
  16. package/lib/components/QueryBuilderProjectionPanel.js +6 -2
  17. package/lib/components/QueryBuilderProjectionPanel.js.map +1 -1
  18. package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
  19. package/lib/components/QueryBuilderResultPanel.js +3 -1
  20. package/lib/components/QueryBuilderResultPanel.js.map +1 -1
  21. package/lib/components/QueryBuilderSetupPanel.d.ts.map +1 -1
  22. package/lib/components/QueryBuilderSetupPanel.js +5 -3
  23. package/lib/components/QueryBuilderSetupPanel.js.map +1 -1
  24. package/lib/index.css +2 -2
  25. package/lib/index.css.map +1 -1
  26. package/lib/package.json +1 -1
  27. package/lib/stores/QueryBuilderFetchStructureState.d.ts +2 -1
  28. package/lib/stores/QueryBuilderFetchStructureState.d.ts.map +1 -1
  29. package/lib/stores/QueryBuilderFetchStructureState.js +2 -2
  30. package/lib/stores/QueryBuilderFetchStructureState.js.map +1 -1
  31. package/lib/stores/QueryBuilderFilterState.d.ts +4 -0
  32. package/lib/stores/QueryBuilderFilterState.d.ts.map +1 -1
  33. package/lib/stores/QueryBuilderFilterState.js +28 -2
  34. package/lib/stores/QueryBuilderFilterState.js.map +1 -1
  35. package/lib/stores/QueryBuilderOperatorLoader.d.ts +47 -0
  36. package/lib/stores/QueryBuilderOperatorLoader.d.ts.map +1 -0
  37. package/lib/stores/QueryBuilderOperatorLoader.js +94 -0
  38. package/lib/stores/QueryBuilderOperatorLoader.js.map +1 -0
  39. package/lib/stores/QueryBuilderPostFilterState.d.ts +5 -2
  40. package/lib/stores/QueryBuilderPostFilterState.d.ts.map +1 -1
  41. package/lib/stores/QueryBuilderPostFilterState.js +25 -1
  42. package/lib/stores/QueryBuilderPostFilterState.js.map +1 -1
  43. package/lib/stores/QueryBuilderPreviewDataHelper.d.ts +4 -3
  44. package/lib/stores/QueryBuilderPreviewDataHelper.d.ts.map +1 -1
  45. package/lib/stores/QueryBuilderPreviewDataHelper.js +77 -97
  46. package/lib/stores/QueryBuilderPreviewDataHelper.js.map +1 -1
  47. package/lib/stores/QueryBuilderProjectionState.d.ts +3 -2
  48. package/lib/stores/QueryBuilderProjectionState.d.ts.map +1 -1
  49. package/lib/stores/QueryBuilderProjectionState.js +17 -32
  50. package/lib/stores/QueryBuilderProjectionState.js.map +1 -1
  51. package/lib/stores/QueryBuilderState.d.ts +1 -0
  52. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  53. package/lib/stores/QueryBuilderState.js +8 -58
  54. package/lib/stores/QueryBuilderState.js.map +1 -1
  55. package/lib/stores/QueryBuilderTestUtils.d.ts +24 -0
  56. package/lib/stores/QueryBuilderTestUtils.d.ts.map +1 -0
  57. package/lib/stores/QueryBuilderTestUtils.js +49 -0
  58. package/lib/stores/QueryBuilderTestUtils.js.map +1 -0
  59. package/lib/stores/QueryBuilderTypeaheadHelper.d.ts +24 -0
  60. package/lib/stores/QueryBuilderTypeaheadHelper.d.ts.map +1 -0
  61. package/lib/stores/QueryBuilderTypeaheadHelper.js +89 -0
  62. package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -0
  63. package/package.json +8 -8
  64. package/src/components/QueryBuilderFetchStructurePanel.tsx +4 -1
  65. package/src/components/QueryBuilderFilterPanel.tsx +31 -4
  66. package/src/components/QueryBuilderFunctionsExplorerPanel.tsx +1 -0
  67. package/src/components/QueryBuilderParameterPanel.tsx +3 -2
  68. package/src/components/QueryBuilderPostFilterPanel.tsx +31 -4
  69. package/src/components/QueryBuilderProjectionPanel.tsx +19 -2
  70. package/src/components/QueryBuilderResultPanel.tsx +6 -0
  71. package/src/components/QueryBuilderSetupPanel.tsx +5 -3
  72. package/src/stores/QueryBuilderFetchStructureState.ts +9 -2
  73. package/src/stores/QueryBuilderFilterState.ts +43 -0
  74. package/src/stores/QueryBuilderOperatorLoader.ts +133 -0
  75. package/src/stores/QueryBuilderPostFilterState.ts +40 -1
  76. package/src/stores/QueryBuilderPreviewDataHelper.ts +122 -217
  77. package/src/stores/QueryBuilderProjectionState.ts +29 -46
  78. package/src/stores/QueryBuilderState.ts +23 -94
  79. package/src/stores/QueryBuilderTestUtils.ts +93 -0
  80. package/src/stores/QueryBuilderTypeaheadHelper.ts +149 -0
  81. package/tsconfig.json +3 -0
@@ -62,71 +62,20 @@ import {
62
62
  buildLambdaVariableExpressions,
63
63
  buildRawLambdaFromLambdaFunction,
64
64
  } from '@finos/legend-graph';
65
- import {
66
- QueryBuilderFilterOperator_Equal,
67
- QueryBuilderFilterOperator_NotEqual,
68
- } from './filterOperators/QueryBuilderFilterOperator_Equal.js';
69
- import { QueryBuilderFilterOperator_GreaterThan } from './filterOperators/QueryBuilderFilterOperator_GreaterThan.js';
70
- import {
71
- QueryBuilderFilterOperator_NotStartWith,
72
- QueryBuilderFilterOperator_StartWith,
73
- } from './filterOperators/QueryBuilderFilterOperator_StartWith.js';
74
- import { QueryBuilderFilterOperator_GreaterThanEqual } from './filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js';
75
- import { QueryBuilderFilterOperator_LessThanEqual } from './filterOperators/QueryBuilderFilterOperator_LessThanEqual.js';
76
- import { QueryBuilderFilterOperator_LessThan } from './filterOperators/QueryBuilderFilterOperator_LessThan.js';
77
- import {
78
- QueryBuilderFilterOperator_EndWith,
79
- QueryBuilderFilterOperator_NotEndWith,
80
- } from './filterOperators/QueryBuilderFilterOperator_EndWith.js';
81
- import {
82
- QueryBuilderFilterOperator_Contain,
83
- QueryBuilderFilterOperator_NotContain,
84
- } from './filterOperators/QueryBuilderFilterOperator_Contain.js';
85
- import {
86
- QueryBuilderFilterOperator_IsEmpty,
87
- QueryBuilderFilterOperator_IsNotEmpty,
88
- } from './filterOperators/QueryBuilderFilterOperator_IsEmpty.js';
89
- import {
90
- QueryBuilderFilterOperator_In,
91
- QueryBuilderFilterOperator_NotIn,
92
- } from './filterOperators/QueryBuilderFilterOperator_In.js';
93
65
  import { buildLambdaFunction } from './QueryBuilderLambdaBuilder.js';
94
66
  import {
95
67
  LambdaParameterState,
96
68
  type GenericLegendApplicationStore,
97
69
  } from '@finos/legend-application';
98
70
  import { QueryBuilderPostFilterState } from './QueryBuilderPostFilterState.js';
99
- import {
100
- QueryBuilderPostFilterOperator_Equal,
101
- QueryBuilderPostFilterOperator_NotEqual,
102
- } from './postFilterOperators/QueryBuilderPostFilterOperator_Equal.js';
103
- import { QueryBuilderPostFilterOperator_LessThan } from './postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js';
104
- import { QueryBuilderPostFilterOperator_LessThanEqual } from './postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.js';
105
- import { QueryBuilderPostFilterOperator_GreaterThan } from './postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js';
106
- import { QueryBuilderPostFilterOperator_GreaterThanEqual } from './postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.js';
107
- import {
108
- QueryBuilderPostFilterOperator_NotStartWith,
109
- QueryBuilderPostFilterOperator_StartWith,
110
- } from './postFilterOperators/QueryBuilderPostFilterOperator_StartWith.js';
111
- import {
112
- QueryBuilderPostFilterOperator_Contain,
113
- QueryBuilderPostFilterOperator_NotContain,
114
- } from './postFilterOperators/QueryBuilderPostFilterOperator_Contain.js';
115
- import {
116
- QueryBuilderPostFilterOperator_EndWith,
117
- QueryBuilderPostFilterOperator_NotEndWith,
118
- } from './postFilterOperators/QueryBuilderPostFilterOperator_EndWith.js';
119
71
  import type { QueryBuilderPostFilterOperator } from './QueryBuilderPostFilterOperator.js';
120
- import {
121
- QueryBuilderPostFilterOperator_In,
122
- QueryBuilderPostFilterOperator_NotIn,
123
- } from './postFilterOperators/QueryBuilderPostFilterOperator_In.js';
124
- import {
125
- QueryBuilderPostFilterOperator_IsEmpty,
126
- QueryBuilderPostFilterOperator_IsNotEmpty,
127
- } from './postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.js';
128
72
  import { QueryFunctionsExplorerState } from './QueryFunctionsExplorerState.js';
129
73
  import { QueryParametersState } from './QueryParametersState.js';
74
+ import {
75
+ AGGREGATION_OPERATORS,
76
+ FILTER_OPERATORS,
77
+ POST_FILTER_OPERATORS,
78
+ } from './QueryBuilderOperatorLoader.js';
130
79
 
131
80
  export abstract class QueryBuilderMode {
132
81
  abstract get isParametersDisabled(): boolean;
@@ -179,42 +128,8 @@ export class QueryBuilderState {
179
128
  queryTextEditorState: QueryTextEditorState;
180
129
  queryUnsupportedState: QueryBuilderUnsupportedState;
181
130
  observableContext: ObserverContext;
182
- filterOperators: QueryBuilderFilterOperator[] = [
183
- new QueryBuilderFilterOperator_Equal(),
184
- new QueryBuilderFilterOperator_NotEqual(),
185
- new QueryBuilderFilterOperator_LessThan(),
186
- new QueryBuilderFilterOperator_LessThanEqual(),
187
- new QueryBuilderFilterOperator_GreaterThan(),
188
- new QueryBuilderFilterOperator_GreaterThanEqual(),
189
- new QueryBuilderFilterOperator_StartWith(),
190
- new QueryBuilderFilterOperator_NotStartWith(),
191
- new QueryBuilderFilterOperator_Contain(),
192
- new QueryBuilderFilterOperator_NotContain(),
193
- new QueryBuilderFilterOperator_EndWith(),
194
- new QueryBuilderFilterOperator_NotEndWith(),
195
- new QueryBuilderFilterOperator_In(),
196
- new QueryBuilderFilterOperator_NotIn(),
197
- new QueryBuilderFilterOperator_IsEmpty(),
198
- new QueryBuilderFilterOperator_IsNotEmpty(),
199
- ];
200
- postFilterOperators: QueryBuilderPostFilterOperator[] = [
201
- new QueryBuilderPostFilterOperator_Equal(),
202
- new QueryBuilderPostFilterOperator_NotEqual(),
203
- new QueryBuilderPostFilterOperator_LessThan(),
204
- new QueryBuilderPostFilterOperator_LessThanEqual(),
205
- new QueryBuilderPostFilterOperator_GreaterThan(),
206
- new QueryBuilderPostFilterOperator_GreaterThanEqual(),
207
- new QueryBuilderPostFilterOperator_StartWith(),
208
- new QueryBuilderPostFilterOperator_NotStartWith(),
209
- new QueryBuilderPostFilterOperator_Contain(),
210
- new QueryBuilderPostFilterOperator_NotContain(),
211
- new QueryBuilderPostFilterOperator_EndWith(),
212
- new QueryBuilderPostFilterOperator_NotEndWith(),
213
- new QueryBuilderPostFilterOperator_In(),
214
- new QueryBuilderPostFilterOperator_NotIn(),
215
- new QueryBuilderPostFilterOperator_IsEmpty(),
216
- new QueryBuilderPostFilterOperator_IsNotEmpty(),
217
- ];
131
+ filterOperators: QueryBuilderFilterOperator[] = FILTER_OPERATORS;
132
+ postFilterOperators: QueryBuilderPostFilterOperator[] = POST_FILTER_OPERATORS;
218
133
  isCompiling = false;
219
134
  backdrop = false;
220
135
  showFunctionPanel = false;
@@ -267,7 +182,10 @@ export class QueryBuilderState {
267
182
  this.explorerState = new QueryBuilderExplorerState(this);
268
183
  this.queryParametersState = new QueryParametersState(this);
269
184
  this.queryFunctionsExplorerState = new QueryFunctionsExplorerState(this);
270
- this.fetchStructureState = new QueryBuilderFetchStructureState(this);
185
+ this.fetchStructureState = new QueryBuilderFetchStructureState(
186
+ this,
187
+ AGGREGATION_OPERATORS,
188
+ );
271
189
  this.filterState = new QueryBuilderFilterState(this, this.filterOperators);
272
190
  this.postFilterState = new QueryBuilderPostFilterState(
273
191
  this,
@@ -338,7 +256,10 @@ export class QueryBuilderState {
338
256
  this.explorerState.refreshTreeData();
339
257
  this.queryParametersState = new QueryParametersState(this);
340
258
  this.queryFunctionsExplorerState = new QueryFunctionsExplorerState(this);
341
- const fetchStructureState = new QueryBuilderFetchStructureState(this);
259
+ const fetchStructureState = new QueryBuilderFetchStructureState(
260
+ this,
261
+ this.fetchStructureState.projectionState.aggregationState.operators,
262
+ );
342
263
  fetchStructureState.setFetchStructureMode(
343
264
  this.fetchStructureState.fetchStructureMode,
344
265
  );
@@ -562,4 +483,12 @@ export class QueryBuilderState {
562
483
  isValidQueryBuilderState(): boolean {
563
484
  return this.fetchStructureState.projectionState.isValidProjectionState();
564
485
  }
486
+
487
+ createBareBuilderState(): QueryBuilderState {
488
+ return new QueryBuilderState(
489
+ this.applicationStore,
490
+ this.graphManagerState,
491
+ this.mode,
492
+ );
493
+ }
565
494
  }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import { TEST__getTestApplicationStore } from '@finos/legend-application';
18
+ import {
19
+ type RawLambda,
20
+ type RawMappingModelCoverageAnalysisResult,
21
+ TEST__buildGraphWithEntities,
22
+ TEST__getTestGraphManagerState,
23
+ } from '@finos/legend-graph';
24
+ import type { Entity } from '@finos/legend-storage';
25
+ import { jest } from '@jest/globals';
26
+ import { LegendQueryPluginManager } from '../application/LegendQueryPluginManager.js';
27
+ import { QueryBuilder_GraphManagerPreset } from '../graphManager/QueryBuilder_GraphManagerPreset.js';
28
+ import {
29
+ QueryBuilderState,
30
+ StandardQueryBuilderMode,
31
+ } from './QueryBuilderState.js';
32
+ import { TEST__getTestLegendQueryApplicationConfig } from './QueryEditorStoreTestUtils.js';
33
+
34
+ export const TEST_setUpQueryBuilderState = async (
35
+ entities: Entity[],
36
+ rawLambda?: RawLambda | undefined,
37
+ executionContext?:
38
+ | {
39
+ _class: string;
40
+ mapping: string;
41
+ runtime?: string | undefined;
42
+ }
43
+ | undefined,
44
+ rawMappingModelCoverageAnalysisResult?:
45
+ | RawMappingModelCoverageAnalysisResult
46
+ | undefined,
47
+ ): Promise<QueryBuilderState> => {
48
+ const pluginManager = LegendQueryPluginManager.create();
49
+ pluginManager.usePresets([new QueryBuilder_GraphManagerPreset()]).install();
50
+ const applicationStore = TEST__getTestApplicationStore(
51
+ TEST__getTestLegendQueryApplicationConfig(),
52
+ LegendQueryPluginManager.create(),
53
+ );
54
+ const graphManagerState = TEST__getTestGraphManagerState(pluginManager);
55
+ await TEST__buildGraphWithEntities(graphManagerState, entities);
56
+ const queryBuilderState = new QueryBuilderState(
57
+ applicationStore,
58
+ graphManagerState,
59
+ new StandardQueryBuilderMode(),
60
+ );
61
+ if (rawLambda) {
62
+ queryBuilderState.buildStateFromRawLambda(rawLambda);
63
+ }
64
+ if (executionContext) {
65
+ const graph = queryBuilderState.graphManagerState.graph;
66
+ queryBuilderState.querySetupState._class = graph.getClass(
67
+ executionContext._class,
68
+ );
69
+ queryBuilderState.querySetupState.mapping = graph.getMapping(
70
+ executionContext.mapping,
71
+ );
72
+ if (executionContext.runtime) {
73
+ queryBuilderState.querySetupState.runtimeValue = graph.getRuntime(
74
+ executionContext.runtime,
75
+ );
76
+ }
77
+ }
78
+ if (rawMappingModelCoverageAnalysisResult) {
79
+ jest
80
+ .spyOn(
81
+ queryBuilderState.graphManagerState.graphManager,
82
+ 'analyzeMappingModelCoverage',
83
+ )
84
+ .mockResolvedValue(
85
+ queryBuilderState.graphManagerState.graphManager.buildMappingModelCoverageAnalysisResult(
86
+ rawMappingModelCoverageAnalysisResult,
87
+ ),
88
+ );
89
+
90
+ await queryBuilderState.explorerState.analyzeMappingModelCoverage();
91
+ }
92
+ return queryBuilderState;
93
+ };
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Copyright (c) 2020-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ import {
18
+ type AbstractPropertyExpression,
19
+ type ExecutionResult,
20
+ type ValueSpecification,
21
+ PrimitiveInstanceValue,
22
+ PRIMITIVE_TYPE,
23
+ TdsExecutionResult,
24
+ } from '@finos/legend-graph';
25
+ import { guaranteeType, isNonNullable, isString } from '@finos/legend-shared';
26
+ import { QueryBuilderPostFilterOperator_StartWith } from './postFilterOperators/QueryBuilderPostFilterOperator_StartWith.js';
27
+ import type { QueryBuilderAggregateColumnState } from './QueryBuilderAggregationState.js';
28
+ import {
29
+ PostFilterConditionState,
30
+ QueryBuilderPostFilterTreeConditionNodeData,
31
+ } from './QueryBuilderPostFilterState.js';
32
+ import {
33
+ QueryBuilderProjectionColumnState,
34
+ QueryBuilderSimpleProjectionColumnState,
35
+ } from './QueryBuilderProjectionState.js';
36
+ import type { QueryBuilderState } from './QueryBuilderState.js';
37
+
38
+ const TYPEAHEAD_TAKE_LIMIT = 10;
39
+ const START_LENGTH = 3;
40
+
41
+ const createAndSetupQueryBuilderStateForTypeAhead = (
42
+ queryBuilderState: QueryBuilderState,
43
+ ): QueryBuilderState => {
44
+ // builderState to build dummy query
45
+ const builderState = queryBuilderState.createBareBuilderState();
46
+ // setup
47
+ builderState.querySetupState = queryBuilderState.querySetupState;
48
+ // result modifiers
49
+ builderState.resultSetModifierState.distinct = true;
50
+ builderState.resultSetModifierState.limit = TYPEAHEAD_TAKE_LIMIT;
51
+ return builderState;
52
+ };
53
+
54
+ const buildColumnTypeAheadQuery = (
55
+ builderState: QueryBuilderState,
56
+ columnState:
57
+ | QueryBuilderProjectionColumnState
58
+ | QueryBuilderAggregateColumnState,
59
+ value: ValueSpecification | undefined,
60
+ ): QueryBuilderState => {
61
+ // projection column
62
+ let projectionState;
63
+ if (columnState instanceof QueryBuilderProjectionColumnState) {
64
+ projectionState = columnState;
65
+ } else {
66
+ projectionState = columnState.projectionColumnState;
67
+ const aggregationState =
68
+ builderState.fetchStructureState.projectionState.aggregationState;
69
+ aggregationState.columns = [columnState];
70
+ }
71
+ builderState.fetchStructureState.projectionState.columns = [projectionState];
72
+ // post filter
73
+ const postConditionState = new PostFilterConditionState(
74
+ builderState.postFilterState,
75
+ columnState,
76
+ value,
77
+ new QueryBuilderPostFilterOperator_StartWith(),
78
+ );
79
+ const postFilterNode = new QueryBuilderPostFilterTreeConditionNodeData(
80
+ undefined,
81
+ postConditionState,
82
+ );
83
+ builderState.postFilterState.addNodeFromNode(postFilterNode, undefined);
84
+ return builderState;
85
+ };
86
+
87
+ export const buildPropertyTypeAheadQuery = (
88
+ queryBuilderState: QueryBuilderState,
89
+ propertyExpression: AbstractPropertyExpression,
90
+ value: ValueSpecification | undefined,
91
+ ): QueryBuilderState => {
92
+ // builderState to build dummy query
93
+ const builderState =
94
+ createAndSetupQueryBuilderStateForTypeAhead(queryBuilderState);
95
+ const projectionState = new QueryBuilderSimpleProjectionColumnState(
96
+ builderState.fetchStructureState.projectionState,
97
+ propertyExpression,
98
+ false,
99
+ );
100
+ return buildColumnTypeAheadQuery(builderState, projectionState, value);
101
+ };
102
+
103
+ export const buildProjectionColumnTypeAheadQuery = (
104
+ queryBuilderState: QueryBuilderState,
105
+ columnState:
106
+ | QueryBuilderProjectionColumnState
107
+ | QueryBuilderAggregateColumnState,
108
+ value: ValueSpecification | undefined,
109
+ ): QueryBuilderState => {
110
+ // builderState to build dummy query
111
+ const builderState =
112
+ createAndSetupQueryBuilderStateForTypeAhead(queryBuilderState);
113
+ return buildColumnTypeAheadQuery(builderState, columnState, value);
114
+ };
115
+
116
+ export const buildTypeAheadOptions = (result: ExecutionResult): string[] => {
117
+ const tdsResult = guaranteeType(
118
+ result,
119
+ TdsExecutionResult,
120
+ 'Type ahead search is only supported for tds result sets',
121
+ );
122
+ const options: string[] = [];
123
+ tdsResult.result.rows
124
+ .map((r) => r.values[0])
125
+ .filter(isNonNullable)
126
+ .forEach((r) => {
127
+ if (isString(r)) {
128
+ options.push(r);
129
+ }
130
+ });
131
+ return options;
132
+ };
133
+
134
+ export const performTypeAhead = (
135
+ val: ValueSpecification | undefined,
136
+ ): boolean => {
137
+ if (val instanceof PrimitiveInstanceValue) {
138
+ const _type = val.genericType.value.rawType;
139
+ switch (_type.path) {
140
+ case PRIMITIVE_TYPE.STRING: {
141
+ const value = val.values[0] as string;
142
+ return value.length >= START_LENGTH;
143
+ }
144
+ default:
145
+ return false;
146
+ }
147
+ }
148
+ return false;
149
+ };
package/tsconfig.json CHANGED
@@ -61,6 +61,7 @@
61
61
  "./src/stores/QueryBuilderGraphFetchTreeUtil.ts",
62
62
  "./src/stores/QueryBuilderLambdaBuilder.ts",
63
63
  "./src/stores/QueryBuilderLambdaProcessor.ts",
64
+ "./src/stores/QueryBuilderOperatorLoader.ts",
64
65
  "./src/stores/QueryBuilderOperatorsHelper.ts",
65
66
  "./src/stores/QueryBuilderPostFilterOperator.ts",
66
67
  "./src/stores/QueryBuilderPostFilterProcessor.ts",
@@ -72,6 +73,8 @@
72
73
  "./src/stores/QueryBuilderResultState.ts",
73
74
  "./src/stores/QueryBuilderSetupState.ts",
74
75
  "./src/stores/QueryBuilderState.ts",
76
+ "./src/stores/QueryBuilderTestUtils.ts",
77
+ "./src/stores/QueryBuilderTypeaheadHelper.ts",
75
78
  "./src/stores/QueryBuilderUnsupportedState.ts",
76
79
  "./src/stores/QueryBuilderValueSpecificationBuilderHelper.ts",
77
80
  "./src/stores/QueryEditorStore.ts",