@finos/legend-application-query 5.0.1 → 5.2.1
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/lib/application/LegendQueryApplicationConfig.d.ts +17 -1
- package/lib/application/LegendQueryApplicationConfig.d.ts.map +1 -1
- package/lib/application/LegendQueryApplicationConfig.js +23 -1
- package/lib/application/LegendQueryApplicationConfig.js.map +1 -1
- package/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +3 -1
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/QueryBuilderExplorerPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderExplorerPanel.js +10 -35
- package/lib/components/QueryBuilderExplorerPanel.js.map +1 -1
- package/lib/components/QueryBuilderFetchStructurePanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFetchStructurePanel.js +78 -35
- package/lib/components/QueryBuilderFetchStructurePanel.js.map +1 -1
- package/lib/components/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFilterPanel.js +80 -66
- package/lib/components/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFunctionsExplorerPanel.js +9 -39
- package/lib/components/QueryBuilderFunctionsExplorerPanel.js.map +1 -1
- package/lib/components/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderGraphFetchTreePanel.js +5 -5
- package/lib/components/QueryBuilderGraphFetchTreePanel.js.map +1 -1
- package/lib/components/QueryBuilderLambdaEditor.d.ts +1 -0
- package/lib/components/QueryBuilderLambdaEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderLambdaEditor.js +2 -2
- package/lib/components/QueryBuilderLambdaEditor.js.map +1 -1
- package/lib/components/QueryBuilderMilestoneEditor.js +5 -5
- package/lib/components/QueryBuilderMilestoneEditor.js.map +1 -1
- package/lib/components/QueryBuilderPanelIssueCountBadge.d.ts +20 -0
- package/lib/components/QueryBuilderPanelIssueCountBadge.d.ts.map +1 -0
- package/lib/components/QueryBuilderPanelIssueCountBadge.js +28 -0
- package/lib/components/QueryBuilderPanelIssueCountBadge.js.map +1 -0
- package/lib/components/QueryBuilderParameterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParameterPanel.js +13 -33
- package/lib/components/QueryBuilderParameterPanel.js.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.js +59 -62
- package/lib/components/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.js +47 -63
- package/lib/components/QueryBuilderProjectionPanel.js.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.js +11 -11
- package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
- package/lib/components/QueryBuilderPropertySearchPanel.js +5 -7
- package/lib/components/QueryBuilderPropertySearchPanel.js.map +1 -1
- package/lib/components/QueryBuilderResultModifierPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultModifierPanel.js +3 -1
- package/lib/components/QueryBuilderResultModifierPanel.js.map +1 -1
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.js +37 -23
- package/lib/components/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.js +10 -9
- package/lib/components/QueryBuilderSetupPanel.js.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.js +4 -2
- package/lib/components/QueryBuilderUnsupportedQueryEditor.js.map +1 -1
- package/lib/components/QueryEditor.d.ts.map +1 -1
- package/lib/components/QueryEditor.js +16 -4
- package/lib/components/QueryEditor.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +10 -9
- package/lib/stores/QueryBuilderExplorerState.d.ts +1 -1
- package/lib/stores/QueryBuilderExplorerState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderExplorerState.js +18 -3
- package/lib/stores/QueryBuilderExplorerState.js.map +1 -1
- package/lib/stores/QueryBuilderFetchStructureState.d.ts +8 -1
- package/lib/stores/QueryBuilderFetchStructureState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFetchStructureState.js +10 -2
- package/lib/stores/QueryBuilderFetchStructureState.js.map +1 -1
- package/lib/stores/QueryBuilderFilterState.d.ts +10 -5
- package/lib/stores/QueryBuilderFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFilterState.js +34 -8
- package/lib/stores/QueryBuilderFilterState.js.map +1 -1
- package/lib/stores/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderGraphFetchTreeState.js +6 -3
- package/lib/stores/QueryBuilderGraphFetchTreeState.js.map +1 -1
- package/lib/stores/QueryBuilderLambdaProcessor.d.ts.map +1 -1
- package/lib/stores/QueryBuilderLambdaProcessor.js +2 -0
- package/lib/stores/QueryBuilderLambdaProcessor.js.map +1 -1
- package/lib/stores/QueryBuilderOperatorLoader.d.ts +47 -0
- package/lib/stores/QueryBuilderOperatorLoader.d.ts.map +1 -0
- package/lib/stores/QueryBuilderOperatorLoader.js +94 -0
- package/lib/stores/QueryBuilderOperatorLoader.js.map +1 -0
- package/lib/stores/QueryBuilderOperatorsHelper.d.ts +1 -0
- package/lib/stores/QueryBuilderOperatorsHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderOperatorsHelper.js +28 -1
- package/lib/stores/QueryBuilderOperatorsHelper.js.map +1 -1
- package/lib/stores/QueryBuilderPostFilterState.d.ts +9 -6
- package/lib/stores/QueryBuilderPostFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPostFilterState.js +31 -7
- package/lib/stores/QueryBuilderPostFilterState.js.map +1 -1
- package/lib/stores/QueryBuilderPreviewDataHelper.d.ts +4 -3
- package/lib/stores/QueryBuilderPreviewDataHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPreviewDataHelper.js +77 -97
- package/lib/stores/QueryBuilderPreviewDataHelper.js.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.d.ts +4 -7
- package/lib/stores/QueryBuilderProjectionState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.js +23 -39
- package/lib/stores/QueryBuilderProjectionState.js.map +1 -1
- package/lib/stores/QueryBuilderPropertySearchPanelState.js +1 -1
- package/lib/stores/QueryBuilderPropertySearchPanelState.js.map +1 -1
- package/lib/stores/QueryBuilderResultState.d.ts +5 -2
- package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderResultState.js +19 -7
- package/lib/stores/QueryBuilderResultState.js.map +1 -1
- package/lib/stores/QueryBuilderSetupState.js +1 -1
- package/lib/stores/QueryBuilderSetupState.js.map +1 -1
- package/lib/stores/QueryBuilderState.d.ts +7 -0
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +18 -58
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderTestUtils.d.ts +24 -0
- package/lib/stores/QueryBuilderTestUtils.d.ts.map +1 -0
- package/lib/stores/QueryBuilderTestUtils.js +49 -0
- package/lib/stores/QueryBuilderTestUtils.js.map +1 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.d.ts +24 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.d.ts.map +1 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.js +89 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -0
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js +7 -7
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js.map +1 -1
- package/lib/stores/QueryEditorStore.d.ts.map +1 -1
- package/lib/stores/QueryEditorStore.js +14 -3
- package/lib/stores/QueryEditorStore.js.map +1 -1
- package/lib/stores/QueryFunctionsExplorerState.d.ts +2 -6
- package/lib/stores/QueryFunctionsExplorerState.d.ts.map +1 -1
- package/lib/stores/QueryFunctionsExplorerState.js +2 -11
- package/lib/stores/QueryFunctionsExplorerState.js.map +1 -1
- package/lib/stores/QueryParametersState.d.ts +1 -3
- package/lib/stores/QueryParametersState.d.ts.map +1 -1
- package/lib/stores/QueryParametersState.js +1 -4
- package/lib/stores/QueryParametersState.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js +9 -32
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js +9 -32
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js +9 -32
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js +9 -33
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js +9 -32
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js +7 -30
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js +8 -31
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js +8 -31
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -1
- package/package.json +17 -16
- package/src/application/LegendQueryApplicationConfig.ts +35 -1
- package/src/components/QueryBuilder.tsx +13 -2
- package/src/components/QueryBuilderExplorerPanel.tsx +20 -57
- package/src/components/QueryBuilderFetchStructurePanel.tsx +94 -41
- package/src/components/QueryBuilderFilterPanel.tsx +271 -232
- package/src/components/QueryBuilderFunctionsExplorerPanel.tsx +24 -68
- package/src/components/QueryBuilderGraphFetchTreePanel.tsx +34 -25
- package/src/components/QueryBuilderLambdaEditor.tsx +3 -0
- package/src/components/QueryBuilderMilestoneEditor.tsx +34 -34
- package/src/components/QueryBuilderPanelIssueCountBadge.tsx +38 -0
- package/src/components/QueryBuilderParameterPanel.tsx +23 -55
- package/src/components/QueryBuilderPostFilterPanel.tsx +245 -233
- package/src/components/QueryBuilderProjectionPanel.tsx +127 -154
- package/src/components/QueryBuilderPropertyExpressionEditor.tsx +61 -57
- package/src/components/QueryBuilderPropertySearchPanel.tsx +9 -9
- package/src/components/QueryBuilderResultModifierPanel.tsx +4 -2
- package/src/components/QueryBuilderResultPanel.tsx +139 -91
- package/src/components/QueryBuilderSetupPanel.tsx +13 -12
- package/src/components/QueryBuilderUnsupportedQueryEditor.tsx +4 -2
- package/src/components/QueryEditor.tsx +39 -1
- package/src/stores/QueryBuilderExplorerState.ts +22 -3
- package/src/stores/QueryBuilderFetchStructureState.ts +18 -2
- package/src/stores/QueryBuilderFilterState.ts +52 -7
- package/src/stores/QueryBuilderGraphFetchTreeState.ts +14 -8
- package/src/stores/QueryBuilderLambdaProcessor.ts +8 -0
- package/src/stores/QueryBuilderOperatorLoader.ts +133 -0
- package/src/stores/QueryBuilderOperatorsHelper.ts +35 -0
- package/src/stores/QueryBuilderPostFilterState.ts +47 -8
- package/src/stores/QueryBuilderPreviewDataHelper.ts +122 -217
- package/src/stores/QueryBuilderProjectionState.ts +40 -53
- package/src/stores/QueryBuilderPropertySearchPanelState.ts +1 -1
- package/src/stores/QueryBuilderResultState.ts +27 -9
- package/src/stores/QueryBuilderSetupState.ts +1 -1
- package/src/stores/QueryBuilderState.ts +35 -94
- package/src/stores/QueryBuilderTestUtils.ts +93 -0
- package/src/stores/QueryBuilderTypeaheadHelper.ts +149 -0
- package/src/stores/QueryBuilderValueSpecificationBuilderHelper.ts +9 -7
- package/src/stores/QueryEditorStore.ts +19 -3
- package/src/stores/QueryFunctionsExplorerState.ts +1 -11
- package/src/stores/QueryParametersState.ts +1 -3
- package/src/stores/filterOperators/QueryBuilderFilterOperator_Equal.ts +14 -36
- package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.ts +17 -36
- package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.ts +17 -36
- package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThan.ts +17 -37
- package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.ts +17 -36
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.ts +14 -34
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.ts +19 -37
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.ts +19 -37
- package/tsconfig.json +4 -0
@@ -18,6 +18,7 @@ import { action, makeAutoObservable } from 'mobx';
|
|
18
18
|
import type { QueryBuilderState } from './QueryBuilderState.js';
|
19
19
|
import { QueryBuilderGraphFetchTreeState } from './QueryBuilderGraphFetchTreeState.js';
|
20
20
|
import { QueryBuilderProjectionState } from './QueryBuilderProjectionState.js';
|
21
|
+
import type { QueryBuilderAggregateOperator } from './QueryBuilderAggregationState.js';
|
21
22
|
|
22
23
|
export enum FETCH_STRUCTURE_MODE {
|
23
24
|
PROJECTION = 'PROJECTION',
|
@@ -26,11 +27,19 @@ export enum FETCH_STRUCTURE_MODE {
|
|
26
27
|
|
27
28
|
export class QueryBuilderFetchStructureState {
|
28
29
|
queryBuilderState: QueryBuilderState;
|
30
|
+
/**
|
31
|
+
* TODO?: perhaps it would eventually make sense to default to
|
32
|
+
* graph-fetch since `getAll()` naturally works for graph-fetch case
|
33
|
+
* and graph-fetch allows somewhat an empty tree
|
34
|
+
*/
|
29
35
|
fetchStructureMode = FETCH_STRUCTURE_MODE.PROJECTION;
|
30
36
|
projectionState: QueryBuilderProjectionState;
|
31
37
|
graphFetchTreeState: QueryBuilderGraphFetchTreeState;
|
32
38
|
|
33
|
-
constructor(
|
39
|
+
constructor(
|
40
|
+
queryBuilderState: QueryBuilderState,
|
41
|
+
operators: QueryBuilderAggregateOperator[],
|
42
|
+
) {
|
34
43
|
makeAutoObservable(this, {
|
35
44
|
queryBuilderState: false,
|
36
45
|
setFetchStructureMode: action,
|
@@ -39,7 +48,10 @@ export class QueryBuilderFetchStructureState {
|
|
39
48
|
this.queryBuilderState = queryBuilderState;
|
40
49
|
// TODO: we probably should modularize this a bit better
|
41
50
|
// See https://github.com/finos/legend-studio/issues/731
|
42
|
-
this.projectionState = new QueryBuilderProjectionState(
|
51
|
+
this.projectionState = new QueryBuilderProjectionState(
|
52
|
+
queryBuilderState,
|
53
|
+
operators,
|
54
|
+
);
|
43
55
|
this.graphFetchTreeState = new QueryBuilderGraphFetchTreeState(
|
44
56
|
queryBuilderState,
|
45
57
|
);
|
@@ -56,4 +68,8 @@ export class QueryBuilderFetchStructureState {
|
|
56
68
|
isProjectionMode(): boolean {
|
57
69
|
return this.fetchStructureMode === FETCH_STRUCTURE_MODE.PROJECTION;
|
58
70
|
}
|
71
|
+
|
72
|
+
get validationIssues(): string[] | undefined {
|
73
|
+
return this.projectionState.validationIssues;
|
74
|
+
}
|
59
75
|
}
|
@@ -20,9 +20,11 @@ import {
|
|
20
20
|
makeAutoObservable,
|
21
21
|
makeObservable,
|
22
22
|
observable,
|
23
|
+
flow,
|
23
24
|
} from 'mobx';
|
24
25
|
import type { TreeNodeData, TreeData } from '@finos/legend-art';
|
25
26
|
import {
|
27
|
+
type GeneratorFn,
|
26
28
|
assertTrue,
|
27
29
|
getNullableFirstElement,
|
28
30
|
guaranteeNonNullable,
|
@@ -34,11 +36,13 @@ import {
|
|
34
36
|
deleteEntry,
|
35
37
|
assertErrorThrown,
|
36
38
|
filterByType,
|
39
|
+
ActionState,
|
37
40
|
} from '@finos/legend-shared';
|
38
41
|
import type { QueryBuilderExplorerTreeDragSource } from './QueryBuilderExplorerState.js';
|
39
42
|
import { QueryBuilderPropertyExpressionState } from './QueryBuilderPropertyEditorState.js';
|
40
43
|
import type { QueryBuilderState } from './QueryBuilderState.js';
|
41
44
|
import {
|
45
|
+
type ExecutionResult,
|
42
46
|
type AbstractPropertyExpression,
|
43
47
|
type ValueSpecification,
|
44
48
|
extractElementNameFromPath,
|
@@ -55,6 +59,12 @@ import {
|
|
55
59
|
fromGroupOperation,
|
56
60
|
QUERY_BUILDER_GROUP_OPERATION,
|
57
61
|
} from './QueryBuilderOperatorsHelper.js';
|
62
|
+
import type { QueryBuilderProjectionColumnDragSource } from './QueryBuilderProjectionState.js';
|
63
|
+
import {
|
64
|
+
buildPropertyTypeAheadQuery,
|
65
|
+
buildTypeAheadOptions,
|
66
|
+
performTypeAhead,
|
67
|
+
} from './QueryBuilderTypeaheadHelper.js';
|
58
68
|
|
59
69
|
export abstract class QueryBuilderFilterOperator {
|
60
70
|
readonly uuid = uuid();
|
@@ -95,6 +105,7 @@ export interface QueryBuilderFilterConditionDragSource {
|
|
95
105
|
|
96
106
|
export type QueryBuilderFilterDropTarget =
|
97
107
|
| QueryBuilderExplorerTreeDragSource
|
108
|
+
| QueryBuilderProjectionColumnDragSource
|
98
109
|
| QueryBuilderFilterConditionDragSource;
|
99
110
|
export type QueryBuilderFilterConditionRearrangeDropTarget =
|
100
111
|
QueryBuilderFilterConditionDragSource;
|
@@ -105,6 +116,8 @@ export class FilterConditionState {
|
|
105
116
|
operator!: QueryBuilderFilterOperator;
|
106
117
|
value?: ValueSpecification | undefined;
|
107
118
|
existsLambdaParamNames: string[] = [];
|
119
|
+
typeaheadSearchResults: string[] | undefined;
|
120
|
+
typeaheadSearchState = ActionState.create();
|
108
121
|
|
109
122
|
constructor(
|
110
123
|
filterState: QueryBuilderFilterState,
|
@@ -117,7 +130,10 @@ export class FilterConditionState {
|
|
117
130
|
changeOperator: action,
|
118
131
|
setOperator: action,
|
119
132
|
setValue: action,
|
133
|
+
typeaheadSearchResults: observable,
|
134
|
+
typeaheadSearchState: observable,
|
120
135
|
addExistsLambdaParamNames: action,
|
136
|
+
handleTypeaheadSearch: flow,
|
121
137
|
});
|
122
138
|
|
123
139
|
this.filterState = filterState;
|
@@ -141,6 +157,35 @@ export class FilterConditionState {
|
|
141
157
|
);
|
142
158
|
}
|
143
159
|
|
160
|
+
*handleTypeaheadSearch(): GeneratorFn<void> {
|
161
|
+
try {
|
162
|
+
this.typeaheadSearchState.inProgress();
|
163
|
+
this.typeaheadSearchResults = undefined;
|
164
|
+
if (performTypeAhead(this.value)) {
|
165
|
+
const builderState = buildPropertyTypeAheadQuery(
|
166
|
+
this.filterState.queryBuilderState,
|
167
|
+
this.propertyExpressionState.propertyExpression,
|
168
|
+
this.value,
|
169
|
+
);
|
170
|
+
const result =
|
171
|
+
(yield builderState.graphManagerState.graphManager.executeMapping(
|
172
|
+
builderState.resultState.buildExecutionRawLambda(),
|
173
|
+
guaranteeNonNullable(builderState.querySetupState.mapping),
|
174
|
+
guaranteeNonNullable(builderState.querySetupState.runtimeValue),
|
175
|
+
builderState.graphManagerState.graph,
|
176
|
+
)) as ExecutionResult;
|
177
|
+
this.typeaheadSearchResults = buildTypeAheadOptions(result);
|
178
|
+
}
|
179
|
+
this.typeaheadSearchState.pass();
|
180
|
+
} catch (error) {
|
181
|
+
assertErrorThrown(error);
|
182
|
+
this.typeaheadSearchResults = [];
|
183
|
+
this.typeaheadSearchState.fail();
|
184
|
+
} finally {
|
185
|
+
this.typeaheadSearchState.complete();
|
186
|
+
}
|
187
|
+
}
|
188
|
+
|
144
189
|
changeProperty(propertyExpression: AbstractPropertyExpression): void {
|
145
190
|
try {
|
146
191
|
// first, check if the new property is supported
|
@@ -219,7 +264,7 @@ export abstract class QueryBuilderFilterTreeNodeData implements TreeNodeData {
|
|
219
264
|
});
|
220
265
|
}
|
221
266
|
|
222
|
-
abstract get
|
267
|
+
abstract get dragPreviewLabel(): string;
|
223
268
|
setIsOpen(val: boolean): void {
|
224
269
|
this.isOpen = val;
|
225
270
|
}
|
@@ -244,14 +289,14 @@ export class QueryBuilderFilterTreeGroupNodeData extends QueryBuilderFilterTreeN
|
|
244
289
|
setGroupOperation: action,
|
245
290
|
addChildNode: action,
|
246
291
|
removeChildNode: action,
|
247
|
-
|
292
|
+
dragPreviewLabel: computed,
|
248
293
|
});
|
249
294
|
|
250
295
|
this.groupOperation = groupOperation;
|
251
296
|
this.isOpen = true;
|
252
297
|
}
|
253
298
|
|
254
|
-
get
|
299
|
+
get dragPreviewLabel(): string {
|
255
300
|
return `${this.groupOperation.toUpperCase()} group`;
|
256
301
|
}
|
257
302
|
|
@@ -283,13 +328,13 @@ export class QueryBuilderFilterTreeConditionNodeData extends QueryBuilderFilterT
|
|
283
328
|
|
284
329
|
makeObservable(this, {
|
285
330
|
condition: observable,
|
286
|
-
|
331
|
+
dragPreviewLabel: computed,
|
287
332
|
});
|
288
333
|
|
289
334
|
this.condition = condition;
|
290
335
|
}
|
291
336
|
|
292
|
-
get
|
337
|
+
get dragPreviewLabel(): string {
|
293
338
|
return this.condition.propertyExpressionState.title;
|
294
339
|
}
|
295
340
|
}
|
@@ -299,11 +344,11 @@ export class QueryBuilderFilterTreeBlankConditionNodeData extends QueryBuilderFi
|
|
299
344
|
super(parentId);
|
300
345
|
|
301
346
|
makeObservable(this, {
|
302
|
-
|
347
|
+
dragPreviewLabel: computed,
|
303
348
|
});
|
304
349
|
}
|
305
350
|
|
306
|
-
get
|
351
|
+
get dragPreviewLabel(): string {
|
307
352
|
return '<blank>';
|
308
353
|
}
|
309
354
|
}
|
@@ -26,6 +26,7 @@ import {
|
|
26
26
|
buildGraphFetchTreeData,
|
27
27
|
} from './QueryBuilderGraphFetchTreeUtil.js';
|
28
28
|
import type { QueryBuilderExplorerTreePropertyNodeData } from './QueryBuilderExplorerState.js';
|
29
|
+
import { assertNonNullable } from '@finos/legend-shared';
|
29
30
|
|
30
31
|
export class QueryBuilderGraphFetchTreeState {
|
31
32
|
queryBuilderState: QueryBuilderState;
|
@@ -77,14 +78,19 @@ export class QueryBuilderGraphFetchTreeState {
|
|
77
78
|
}
|
78
79
|
|
79
80
|
addProperty(node: QueryBuilderExplorerTreePropertyNodeData): void {
|
80
|
-
if (this.treeData) {
|
81
|
-
|
82
|
-
this.treeData,
|
83
|
-
this.queryBuilderState.explorerState.nonNullableTreeData,
|
84
|
-
node,
|
85
|
-
this.queryBuilderState,
|
86
|
-
);
|
87
|
-
this.setGraphFetchTree({ ...this.treeData });
|
81
|
+
if (!this.treeData) {
|
82
|
+
this.initialize();
|
88
83
|
}
|
84
|
+
assertNonNullable(
|
85
|
+
this.treeData,
|
86
|
+
`Graph-fetch tree has not been properly initialized`,
|
87
|
+
);
|
88
|
+
addQueryBuilderPropertyNode(
|
89
|
+
this.treeData,
|
90
|
+
this.queryBuilderState.explorerState.nonNullableTreeData,
|
91
|
+
node,
|
92
|
+
this.queryBuilderState,
|
93
|
+
);
|
94
|
+
this.setGraphFetchTree({ ...this.treeData });
|
89
95
|
}
|
90
96
|
}
|
@@ -693,6 +693,10 @@ export class QueryBuilderLambdaProcessor
|
|
693
693
|
(e, idx) => e.setColumnName(aliases[idx] as string),
|
694
694
|
);
|
695
695
|
|
696
|
+
this.queryBuilderState.fetchStructureState.setFetchStructureMode(
|
697
|
+
FETCH_STRUCTURE_MODE.PROJECTION,
|
698
|
+
);
|
699
|
+
|
696
700
|
return;
|
697
701
|
} else if (
|
698
702
|
matchFunctionName(
|
@@ -943,6 +947,10 @@ export class QueryBuilderLambdaProcessor
|
|
943
947
|
(e, idx) => e.setColumnName(aliases[idx] as string),
|
944
948
|
);
|
945
949
|
|
950
|
+
this.queryBuilderState.fetchStructureState.setFetchStructureMode(
|
951
|
+
FETCH_STRUCTURE_MODE.PROJECTION,
|
952
|
+
);
|
953
|
+
|
946
954
|
return;
|
947
955
|
} else if (
|
948
956
|
matchFunctionName(functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_AGG)
|
@@ -0,0 +1,133 @@
|
|
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 { QueryBuilderAggregateOperator_Count } from './aggregateOperators/QueryBuilderAggregateOperator_Count.js';
|
18
|
+
import { QueryBuilderAggregateOperator_Distinct } from './aggregateOperators/QueryBuilderAggregateOperator_Distinct.js';
|
19
|
+
import { QueryBuilderAggregateOperator_Sum } from './aggregateOperators/QueryBuilderAggregateOperator_Sum.js';
|
20
|
+
import { QueryBuilderAggregateOperator_Average } from './aggregateOperators/QueryBuilderAggregateOperator_Average.js';
|
21
|
+
import { QueryBuilderAggregateOperator_StdDev_Population } from './aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.js';
|
22
|
+
import { QueryBuilderAggregateOperator_StdDev_Sample } from './aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.js';
|
23
|
+
import { QueryBuilderAggregateOperator_DistinctCount } from './aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.js';
|
24
|
+
import { QueryBuilderAggregateOperator_Min } from './aggregateOperators/QueryBuilderAggregateOperator_Min.js';
|
25
|
+
import { QueryBuilderAggregateOperator_Max } from './aggregateOperators/QueryBuilderAggregateOperator_Max.js';
|
26
|
+
import { QueryBuilderAggregateOperator_JoinString } from './aggregateOperators/QueryBuilderAggregateOperator_JoinString.js';
|
27
|
+
import {
|
28
|
+
QueryBuilderFilterOperator_Equal,
|
29
|
+
QueryBuilderFilterOperator_NotEqual,
|
30
|
+
} from './filterOperators/QueryBuilderFilterOperator_Equal.js';
|
31
|
+
import { QueryBuilderFilterOperator_GreaterThan } from './filterOperators/QueryBuilderFilterOperator_GreaterThan.js';
|
32
|
+
import {
|
33
|
+
QueryBuilderFilterOperator_NotStartWith,
|
34
|
+
QueryBuilderFilterOperator_StartWith,
|
35
|
+
} from './filterOperators/QueryBuilderFilterOperator_StartWith.js';
|
36
|
+
import { QueryBuilderFilterOperator_GreaterThanEqual } from './filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js';
|
37
|
+
import { QueryBuilderFilterOperator_LessThanEqual } from './filterOperators/QueryBuilderFilterOperator_LessThanEqual.js';
|
38
|
+
import { QueryBuilderFilterOperator_LessThan } from './filterOperators/QueryBuilderFilterOperator_LessThan.js';
|
39
|
+
import {
|
40
|
+
QueryBuilderFilterOperator_EndWith,
|
41
|
+
QueryBuilderFilterOperator_NotEndWith,
|
42
|
+
} from './filterOperators/QueryBuilderFilterOperator_EndWith.js';
|
43
|
+
import {
|
44
|
+
QueryBuilderFilterOperator_Contain,
|
45
|
+
QueryBuilderFilterOperator_NotContain,
|
46
|
+
} from './filterOperators/QueryBuilderFilterOperator_Contain.js';
|
47
|
+
import {
|
48
|
+
QueryBuilderFilterOperator_IsEmpty,
|
49
|
+
QueryBuilderFilterOperator_IsNotEmpty,
|
50
|
+
} from './filterOperators/QueryBuilderFilterOperator_IsEmpty.js';
|
51
|
+
import {
|
52
|
+
QueryBuilderFilterOperator_In,
|
53
|
+
QueryBuilderFilterOperator_NotIn,
|
54
|
+
} from './filterOperators/QueryBuilderFilterOperator_In.js';
|
55
|
+
import {
|
56
|
+
QueryBuilderPostFilterOperator_In,
|
57
|
+
QueryBuilderPostFilterOperator_NotIn,
|
58
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_In.js';
|
59
|
+
import {
|
60
|
+
QueryBuilderPostFilterOperator_IsEmpty,
|
61
|
+
QueryBuilderPostFilterOperator_IsNotEmpty,
|
62
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.js';
|
63
|
+
import {
|
64
|
+
QueryBuilderPostFilterOperator_Equal,
|
65
|
+
QueryBuilderPostFilterOperator_NotEqual,
|
66
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_Equal.js';
|
67
|
+
import { QueryBuilderPostFilterOperator_LessThan } from './postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js';
|
68
|
+
import { QueryBuilderPostFilterOperator_LessThanEqual } from './postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.js';
|
69
|
+
import { QueryBuilderPostFilterOperator_GreaterThan } from './postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js';
|
70
|
+
import { QueryBuilderPostFilterOperator_GreaterThanEqual } from './postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.js';
|
71
|
+
import {
|
72
|
+
QueryBuilderPostFilterOperator_NotStartWith,
|
73
|
+
QueryBuilderPostFilterOperator_StartWith,
|
74
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_StartWith.js';
|
75
|
+
import {
|
76
|
+
QueryBuilderPostFilterOperator_Contain,
|
77
|
+
QueryBuilderPostFilterOperator_NotContain,
|
78
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_Contain.js';
|
79
|
+
import {
|
80
|
+
QueryBuilderPostFilterOperator_EndWith,
|
81
|
+
QueryBuilderPostFilterOperator_NotEndWith,
|
82
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_EndWith.js';
|
83
|
+
|
84
|
+
export const AGGREGATION_OPERATORS = [
|
85
|
+
new QueryBuilderAggregateOperator_Count(),
|
86
|
+
new QueryBuilderAggregateOperator_DistinctCount(),
|
87
|
+
new QueryBuilderAggregateOperator_Distinct(),
|
88
|
+
new QueryBuilderAggregateOperator_Sum(),
|
89
|
+
new QueryBuilderAggregateOperator_Average(),
|
90
|
+
new QueryBuilderAggregateOperator_Min(),
|
91
|
+
new QueryBuilderAggregateOperator_Max(),
|
92
|
+
new QueryBuilderAggregateOperator_StdDev_Population(),
|
93
|
+
new QueryBuilderAggregateOperator_StdDev_Sample(),
|
94
|
+
new QueryBuilderAggregateOperator_JoinString(),
|
95
|
+
];
|
96
|
+
|
97
|
+
export const FILTER_OPERATORS = [
|
98
|
+
new QueryBuilderFilterOperator_Equal(),
|
99
|
+
new QueryBuilderFilterOperator_NotEqual(),
|
100
|
+
new QueryBuilderFilterOperator_LessThan(),
|
101
|
+
new QueryBuilderFilterOperator_LessThanEqual(),
|
102
|
+
new QueryBuilderFilterOperator_GreaterThan(),
|
103
|
+
new QueryBuilderFilterOperator_GreaterThanEqual(),
|
104
|
+
new QueryBuilderFilterOperator_StartWith(),
|
105
|
+
new QueryBuilderFilterOperator_NotStartWith(),
|
106
|
+
new QueryBuilderFilterOperator_Contain(),
|
107
|
+
new QueryBuilderFilterOperator_NotContain(),
|
108
|
+
new QueryBuilderFilterOperator_EndWith(),
|
109
|
+
new QueryBuilderFilterOperator_NotEndWith(),
|
110
|
+
new QueryBuilderFilterOperator_In(),
|
111
|
+
new QueryBuilderFilterOperator_NotIn(),
|
112
|
+
new QueryBuilderFilterOperator_IsEmpty(),
|
113
|
+
new QueryBuilderFilterOperator_IsNotEmpty(),
|
114
|
+
];
|
115
|
+
|
116
|
+
export const POST_FILTER_OPERATORS = [
|
117
|
+
new QueryBuilderPostFilterOperator_Equal(),
|
118
|
+
new QueryBuilderPostFilterOperator_NotEqual(),
|
119
|
+
new QueryBuilderPostFilterOperator_LessThan(),
|
120
|
+
new QueryBuilderPostFilterOperator_LessThanEqual(),
|
121
|
+
new QueryBuilderPostFilterOperator_GreaterThan(),
|
122
|
+
new QueryBuilderPostFilterOperator_GreaterThanEqual(),
|
123
|
+
new QueryBuilderPostFilterOperator_StartWith(),
|
124
|
+
new QueryBuilderPostFilterOperator_NotStartWith(),
|
125
|
+
new QueryBuilderPostFilterOperator_Contain(),
|
126
|
+
new QueryBuilderPostFilterOperator_NotContain(),
|
127
|
+
new QueryBuilderPostFilterOperator_EndWith(),
|
128
|
+
new QueryBuilderPostFilterOperator_NotEndWith(),
|
129
|
+
new QueryBuilderPostFilterOperator_In(),
|
130
|
+
new QueryBuilderPostFilterOperator_NotIn(),
|
131
|
+
new QueryBuilderPostFilterOperator_IsEmpty(),
|
132
|
+
new QueryBuilderPostFilterOperator_IsNotEmpty(),
|
133
|
+
];
|
@@ -29,6 +29,7 @@ import {
|
|
29
29
|
EnumValueInstanceValue,
|
30
30
|
VariableExpression,
|
31
31
|
AbstractPropertyExpression,
|
32
|
+
isSuperType,
|
32
33
|
} from '@finos/legend-graph';
|
33
34
|
import {
|
34
35
|
addUniqueEntry,
|
@@ -189,3 +190,37 @@ export const isPropertyExpressionChainOptional = (
|
|
189
190
|
}
|
190
191
|
return isOptional;
|
191
192
|
};
|
193
|
+
|
194
|
+
export const isTypeCompatibleWithConditionValueType = (
|
195
|
+
type: Type | undefined,
|
196
|
+
conditionValueType: Type,
|
197
|
+
): boolean => {
|
198
|
+
const NUMERIC_PRIMITIVE_TYPES = [
|
199
|
+
PRIMITIVE_TYPE.NUMBER,
|
200
|
+
PRIMITIVE_TYPE.INTEGER,
|
201
|
+
PRIMITIVE_TYPE.DECIMAL,
|
202
|
+
PRIMITIVE_TYPE.FLOAT,
|
203
|
+
] as string[];
|
204
|
+
const DATE_PRIMITIVE_TYPES = [
|
205
|
+
PRIMITIVE_TYPE.DATE,
|
206
|
+
PRIMITIVE_TYPE.DATETIME,
|
207
|
+
PRIMITIVE_TYPE.STRICTDATE,
|
208
|
+
PRIMITIVE_TYPE.LATESTDATE,
|
209
|
+
] as string[];
|
210
|
+
|
211
|
+
// When changing the return type for LHS, the RHS value should be adjusted accordingly.
|
212
|
+
return (
|
213
|
+
type !== undefined &&
|
214
|
+
// Numeric value is handled loosely because of autoboxing
|
215
|
+
// e.g. LHS (integer) = RHS (float) is acceptable
|
216
|
+
((NUMERIC_PRIMITIVE_TYPES.includes(type.path) &&
|
217
|
+
NUMERIC_PRIMITIVE_TYPES.includes(conditionValueType.path)) ||
|
218
|
+
// Date value is handled loosely as well if the LHS is of type DateTime
|
219
|
+
// This is because we would simulate auto-boxing for date by altering the
|
220
|
+
// Pure function used for the operation
|
221
|
+
// e.g. LHS(DateTime) = RHS(Date) -> we use isOnDay() instead of is()
|
222
|
+
DATE_PRIMITIVE_TYPES.includes(type.path) ||
|
223
|
+
type === conditionValueType ||
|
224
|
+
isSuperType(conditionValueType, type))
|
225
|
+
);
|
226
|
+
};
|
@@ -19,6 +19,7 @@ import {
|
|
19
19
|
type PureModel,
|
20
20
|
type Type,
|
21
21
|
type ValueSpecification,
|
22
|
+
type ExecutionResult,
|
22
23
|
Enumeration,
|
23
24
|
PRIMITIVE_TYPE,
|
24
25
|
observe_ValueSpecification,
|
@@ -36,6 +37,7 @@ import {
|
|
36
37
|
UnsupportedOperationError,
|
37
38
|
uuid,
|
38
39
|
filterByType,
|
40
|
+
ActionState,
|
39
41
|
} from '@finos/legend-shared';
|
40
42
|
import {
|
41
43
|
action,
|
@@ -51,11 +53,16 @@ import type { QueryBuilderAggregateColumnState } from './QueryBuilderAggregation
|
|
51
53
|
import { QUERY_BUILDER_GROUP_OPERATION } from './QueryBuilderOperatorsHelper.js';
|
52
54
|
import type { QueryBuilderPostFilterOperator } from './QueryBuilderPostFilterOperator.js';
|
53
55
|
import {
|
54
|
-
type QueryBuilderProjectionColumnDragSource,
|
55
56
|
type QueryBuilderProjectionColumnState,
|
57
|
+
type QueryBuilderProjectionColumnDragSource,
|
56
58
|
QueryBuilderDerivationProjectionColumnState,
|
57
59
|
} from './QueryBuilderProjectionState.js';
|
58
60
|
import type { QueryBuilderState } from './QueryBuilderState.js';
|
61
|
+
import {
|
62
|
+
buildProjectionColumnTypeAheadQuery,
|
63
|
+
buildTypeAheadOptions,
|
64
|
+
performTypeAhead,
|
65
|
+
} from './QueryBuilderTypeaheadHelper.js';
|
59
66
|
|
60
67
|
export enum QUERY_BUILDER_POST_FILTER_DND_TYPE {
|
61
68
|
GROUP_CONDITION = 'GROUP_CONDITION',
|
@@ -158,7 +165,7 @@ export abstract class QueryBuilderPostFilterTreeNodeData
|
|
158
165
|
});
|
159
166
|
}
|
160
167
|
|
161
|
-
abstract get
|
168
|
+
abstract get dragPreviewLabel(): string;
|
162
169
|
setIsOpen(val: boolean): void {
|
163
170
|
this.isOpen = val;
|
164
171
|
}
|
@@ -190,13 +197,13 @@ export class QueryBuilderPostFilterTreeGroupNodeData extends QueryBuilderPostFil
|
|
190
197
|
setGroupOperation: action,
|
191
198
|
addChildNode: action,
|
192
199
|
removeChildNode: action,
|
193
|
-
|
200
|
+
dragPreviewLabel: computed,
|
194
201
|
});
|
195
202
|
this.groupOperation = groupOperation;
|
196
203
|
this.isOpen = true;
|
197
204
|
}
|
198
205
|
|
199
|
-
get
|
206
|
+
get dragPreviewLabel(): string {
|
200
207
|
return `${this.groupOperation.toUpperCase()} group`;
|
201
208
|
}
|
202
209
|
|
@@ -231,13 +238,13 @@ export class QueryBuilderPostFilterTreeConditionNodeData extends QueryBuilderPos
|
|
231
238
|
|
232
239
|
makeObservable(this, {
|
233
240
|
condition: observable,
|
234
|
-
|
241
|
+
dragPreviewLabel: computed,
|
235
242
|
});
|
236
243
|
|
237
244
|
this.condition = condition;
|
238
245
|
}
|
239
246
|
|
240
|
-
get
|
247
|
+
get dragPreviewLabel(): string {
|
241
248
|
return this.condition.columnName;
|
242
249
|
}
|
243
250
|
}
|
@@ -247,11 +254,11 @@ export class QueryBuilderPostFilterTreeBlankConditionNodeData extends QueryBuild
|
|
247
254
|
super(parentId);
|
248
255
|
|
249
256
|
makeObservable(this, {
|
250
|
-
|
257
|
+
dragPreviewLabel: computed,
|
251
258
|
});
|
252
259
|
}
|
253
260
|
|
254
|
-
get
|
261
|
+
get dragPreviewLabel(): string {
|
255
262
|
return '<blank>';
|
256
263
|
}
|
257
264
|
}
|
@@ -262,6 +269,8 @@ export class PostFilterConditionState {
|
|
262
269
|
| QueryBuilderAggregateColumnState;
|
263
270
|
value?: ValueSpecification | undefined;
|
264
271
|
operator: QueryBuilderPostFilterOperator;
|
272
|
+
typeaheadSearchResults: string[] | undefined;
|
273
|
+
typeaheadSearchState = ActionState.create();
|
265
274
|
|
266
275
|
constructor(
|
267
276
|
postFilterState: QueryBuilderPostFilterState,
|
@@ -273,11 +282,13 @@ export class PostFilterConditionState {
|
|
273
282
|
) {
|
274
283
|
makeAutoObservable(this, {
|
275
284
|
columnState: observable,
|
285
|
+
typeaheadSearchResults: observable,
|
276
286
|
changeOperator: action,
|
277
287
|
setColumnState: action,
|
278
288
|
setValue: action,
|
279
289
|
setOperator: action,
|
280
290
|
changeColumn: flow,
|
291
|
+
handleTypeaheadSearch: flow,
|
281
292
|
});
|
282
293
|
|
283
294
|
this.postFilterState = postFilterState;
|
@@ -304,6 +315,34 @@ export class PostFilterConditionState {
|
|
304
315
|
);
|
305
316
|
}
|
306
317
|
|
318
|
+
*handleTypeaheadSearch(): GeneratorFn<void> {
|
319
|
+
try {
|
320
|
+
this.typeaheadSearchState.inProgress();
|
321
|
+
this.typeaheadSearchResults = undefined;
|
322
|
+
if (performTypeAhead(this.value)) {
|
323
|
+
const builderState = buildProjectionColumnTypeAheadQuery(
|
324
|
+
this.postFilterState.queryBuilderState,
|
325
|
+
this.columnState,
|
326
|
+
this.value,
|
327
|
+
);
|
328
|
+
const result =
|
329
|
+
(yield builderState.graphManagerState.graphManager.executeMapping(
|
330
|
+
builderState.resultState.buildExecutionRawLambda(),
|
331
|
+
guaranteeNonNullable(builderState.querySetupState.mapping),
|
332
|
+
guaranteeNonNullable(builderState.querySetupState.runtimeValue),
|
333
|
+
builderState.graphManagerState.graph,
|
334
|
+
)) as ExecutionResult;
|
335
|
+
this.typeaheadSearchResults = buildTypeAheadOptions(result);
|
336
|
+
}
|
337
|
+
this.typeaheadSearchState.pass();
|
338
|
+
} catch (error) {
|
339
|
+
assertErrorThrown(error);
|
340
|
+
this.typeaheadSearchState.fail();
|
341
|
+
} finally {
|
342
|
+
this.typeaheadSearchState.complete();
|
343
|
+
}
|
344
|
+
}
|
345
|
+
|
307
346
|
changeOperator(val: QueryBuilderPostFilterOperator): void {
|
308
347
|
this.setOperator(val);
|
309
348
|
if (!this.operator.isCompatibleWithConditionValue(this)) {
|