@finos/legend-query-builder 4.14.40 → 4.14.41
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/components/QueryBuilderParametersPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParametersPanel.js +20 -2
- package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
- package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
- package/lib/components/QueryBuilderSideBar.js +5 -14
- package/lib/components/QueryBuilderSideBar.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +12 -4
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js +6 -2
- package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/result/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/result/QueryBuilderResultPanel.js +2 -1
- package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/shared/BasicValueSpecificationEditor.d.ts +11 -9
- package/lib/components/shared/BasicValueSpecificationEditor.d.ts.map +1 -1
- package/lib/components/shared/BasicValueSpecificationEditor.js +158 -143
- package/lib/components/shared/BasicValueSpecificationEditor.js.map +1 -1
- package/lib/components/shared/QueryBuilderVariableSelector.d.ts.map +1 -1
- package/lib/components/shared/QueryBuilderVariableSelector.js +8 -1
- package/lib/components/shared/QueryBuilderVariableSelector.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryBuilderPropertyEditorState.d.ts +1 -0
- package/lib/stores/QueryBuilderPropertyEditorState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPropertyEditorState.js +2 -1
- package/lib/stores/QueryBuilderPropertyEditorState.js.map +1 -1
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +12 -0
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.js +2 -2
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.d.ts +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.d.ts.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.js +4 -3
- package/lib/stores/filter/QueryBuilderFilterState.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningHelper.d.ts +1 -0
- package/lib/stores/milestoning/QueryBuilderMilestoningHelper.d.ts.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningHelper.js +16 -0
- package/lib/stores/milestoning/QueryBuilderMilestoningHelper.js.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts +3 -0
- package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js +40 -0
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
- package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts +1 -0
- package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts.map +1 -1
- package/lib/stores/shared/ValueSpecificationEditorHelper.js +48 -0
- package/lib/stores/shared/ValueSpecificationEditorHelper.js.map +1 -1
- package/package.json +8 -8
- package/src/components/QueryBuilderParametersPanel.tsx +55 -0
- package/src/components/QueryBuilderSideBar.tsx +0 -35
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +22 -6
- package/src/components/filter/QueryBuilderFilterPanel.tsx +13 -5
- package/src/components/result/QueryBuilderResultPanel.tsx +9 -1
- package/src/components/shared/BasicValueSpecificationEditor.tsx +288 -285
- package/src/components/shared/QueryBuilderVariableSelector.tsx +22 -0
- package/src/stores/QueryBuilderPropertyEditorState.ts +2 -1
- package/src/stores/QueryBuilderState.ts +14 -0
- package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.ts +2 -2
- package/src/stores/filter/QueryBuilderFilterState.ts +6 -3
- package/src/stores/filter/operators/QueryBuilderFilterOperator_In.ts +2 -2
- package/src/stores/milestoning/QueryBuilderMilestoningHelper.ts +24 -0
- package/src/stores/milestoning/QueryBuilderMilestoningState.ts +54 -0
- package/src/stores/shared/ValueSpecificationEditorHelper.ts +63 -0
@@ -149,6 +149,18 @@ export const VariableViewer = observer(
|
|
149
149
|
const variableTypeName =
|
150
150
|
variable.genericType?.value.rawType.name ??
|
151
151
|
(isConstant ? CALCULATED : undefined);
|
152
|
+
const isMilestoningParameter =
|
153
|
+
queryBuilderState.milestoningState.isMilestoningParameter(variable);
|
154
|
+
const milestoningParameterValue =
|
155
|
+
queryBuilderState.milestoningState.getMilestoningParameterValue(variable);
|
156
|
+
const milestoningParameterValueString = isMilestoningParameter
|
157
|
+
? milestoningParameterValue
|
158
|
+
? getNameOfValueSpecification(
|
159
|
+
milestoningParameterValue,
|
160
|
+
queryBuilderState,
|
161
|
+
)
|
162
|
+
: undefined
|
163
|
+
: undefined;
|
152
164
|
const deleteDisabled = isReadOnly || isVariableUsed;
|
153
165
|
const deleteTitle = isVariableUsed ? 'Used in query' : 'Remove';
|
154
166
|
const editVariable = (): void => {
|
@@ -227,6 +239,16 @@ export const VariableViewer = observer(
|
|
227
239
|
<div className="query-builder__variables__variable__type__label">
|
228
240
|
{variableTypeName ?? 'unknown'}
|
229
241
|
</div>
|
242
|
+
{isMilestoningParameter && (
|
243
|
+
<>
|
244
|
+
<div className="query-builder__variables__variable__type__label query-builder__variables__variable__type__label--milestoning">
|
245
|
+
milestoning
|
246
|
+
</div>
|
247
|
+
<div className="query-builder__constants__value">
|
248
|
+
{milestoningParameterValueString}
|
249
|
+
</div>
|
250
|
+
</>
|
251
|
+
)}
|
230
252
|
</div>
|
231
253
|
)}
|
232
254
|
</div>
|
@@ -161,7 +161,8 @@ export const generateValueSpecificationForParameter = (
|
|
161
161
|
return createNullishValue(graph);
|
162
162
|
};
|
163
163
|
|
164
|
-
|
164
|
+
//here
|
165
|
+
export const fillDerivedPropertyParameterValues = (
|
165
166
|
derivedPropertyExpressionState: QueryBuilderDerivedPropertyExpressionState,
|
166
167
|
): void => {
|
167
168
|
const parameterValues: ValueSpecification[] =
|
@@ -110,6 +110,8 @@ import type { QueryBuilderConfig } from '../graph-manager/QueryBuilderConfig.js'
|
|
110
110
|
import { QUERY_BUILDER_EVENT } from '../__lib__/QueryBuilderEvent.js';
|
111
111
|
import { QueryBuilderChangeHistoryState } from './QueryBuilderChangeHistoryState.js';
|
112
112
|
import { type QueryBuilderWorkflowState } from './query-workflow/QueryBuilderWorkFlowState.js';
|
113
|
+
import { initializeMilestoningStateFromDerivedProperty } from './milestoning/QueryBuilderMilestoningHelper.js';
|
114
|
+
import { QueryBuilderSimpleProjectionColumnState } from './fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js';
|
113
115
|
|
114
116
|
export interface QuerySDLC {}
|
115
117
|
|
@@ -697,6 +699,18 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
697
699
|
);
|
698
700
|
}
|
699
701
|
if (this.parametersState.parameterStates.length > 0) {
|
702
|
+
const fetchStructureStateImp = this.fetchStructureState.implementation;
|
703
|
+
if (fetchStructureStateImp instanceof QueryBuilderTDSState) {
|
704
|
+
fetchStructureStateImp.projectionColumns.forEach((colState) => {
|
705
|
+
if (colState instanceof QueryBuilderSimpleProjectionColumnState) {
|
706
|
+
colState.propertyExpressionState.derivedPropertyExpressionStates.forEach(
|
707
|
+
(state) => {
|
708
|
+
initializeMilestoningStateFromDerivedProperty(state);
|
709
|
+
},
|
710
|
+
);
|
711
|
+
}
|
712
|
+
});
|
713
|
+
}
|
700
714
|
this.setShowParametersPanel(true);
|
701
715
|
}
|
702
716
|
this.fetchStructureState.initializeWithQuery();
|
package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.ts
CHANGED
@@ -53,7 +53,7 @@ export class QueryBuilderPostFilterOperator_In
|
|
53
53
|
implements Hashable
|
54
54
|
{
|
55
55
|
getLabel(): string {
|
56
|
-
return 'is in';
|
56
|
+
return 'is in list of';
|
57
57
|
}
|
58
58
|
|
59
59
|
isCompatibleWithType(type: Type): boolean {
|
@@ -168,7 +168,7 @@ export class QueryBuilderPostFilterOperator_In
|
|
168
168
|
|
169
169
|
export class QueryBuilderPostFilterOperator_NotIn extends QueryBuilderPostFilterOperator_In {
|
170
170
|
override getLabel(): string {
|
171
|
-
return `is not in`;
|
171
|
+
return `is not in list of`;
|
172
172
|
}
|
173
173
|
|
174
174
|
override buildPostFilterConditionExpression(
|
@@ -128,17 +128,20 @@ export class FilterConditionState implements Hashable {
|
|
128
128
|
);
|
129
129
|
}
|
130
130
|
|
131
|
-
*handleTypeaheadSearch(
|
131
|
+
*handleTypeaheadSearch(
|
132
|
+
searchValue?: ValueSpecification | undefined,
|
133
|
+
): GeneratorFn<void> {
|
134
|
+
const value = searchValue ?? this.value;
|
132
135
|
try {
|
133
136
|
this.typeaheadSearchState.inProgress();
|
134
137
|
this.typeaheadSearchResults = undefined;
|
135
|
-
if (performTypeahead(
|
138
|
+
if (performTypeahead(value)) {
|
136
139
|
const result =
|
137
140
|
(yield this.filterState.queryBuilderState.graphManagerState.graphManager.runQuery(
|
138
141
|
buildPropertyTypeaheadQuery(
|
139
142
|
this.filterState.queryBuilderState,
|
140
143
|
this.propertyExpressionState.propertyExpression,
|
141
|
-
|
144
|
+
value,
|
142
145
|
),
|
143
146
|
guaranteeNonNullable(
|
144
147
|
this.filterState.queryBuilderState.executionContextState.mapping,
|
@@ -48,7 +48,7 @@ export class QueryBuilderFilterOperator_In
|
|
48
48
|
implements Hashable
|
49
49
|
{
|
50
50
|
getLabel(filterConditionState: FilterConditionState): string {
|
51
|
-
return 'is in';
|
51
|
+
return 'is in list of';
|
52
52
|
}
|
53
53
|
|
54
54
|
isCompatibleWithFilterConditionProperty(
|
@@ -172,7 +172,7 @@ export class QueryBuilderFilterOperator_In
|
|
172
172
|
|
173
173
|
export class QueryBuilderFilterOperator_NotIn extends QueryBuilderFilterOperator_In {
|
174
174
|
override getLabel(filterConditionState: FilterConditionState): string {
|
175
|
-
return `is not in`;
|
175
|
+
return `is not in list of`;
|
176
176
|
}
|
177
177
|
|
178
178
|
override buildFilterConditionExpression(
|
@@ -290,6 +290,30 @@ export const generateMilestonedPropertyParameterValue = (
|
|
290
290
|
);
|
291
291
|
};
|
292
292
|
|
293
|
+
export const initializeMilestoningStateFromDerivedProperty = (
|
294
|
+
derivedPropertyExpressionState: QueryBuilderDerivedPropertyExpressionState,
|
295
|
+
): void => {
|
296
|
+
const milestoningState =
|
297
|
+
derivedPropertyExpressionState.queryBuilderState.milestoningState;
|
298
|
+
const temporalTarget =
|
299
|
+
derivedPropertyExpressionState.propertyExpression.func.value.genericType
|
300
|
+
.value.rawType instanceof Class &&
|
301
|
+
derivedPropertyExpressionState.propertyExpression.func.value._OWNER
|
302
|
+
._generatedMilestonedProperties.length !== 0
|
303
|
+
? getMilestoneTemporalStereotype(
|
304
|
+
derivedPropertyExpressionState.propertyExpression.func.value
|
305
|
+
.genericType.value.rawType,
|
306
|
+
derivedPropertyExpressionState.queryBuilderState.graphManagerState
|
307
|
+
.graph,
|
308
|
+
)
|
309
|
+
: undefined;
|
310
|
+
if (temporalTarget) {
|
311
|
+
milestoningState
|
312
|
+
.getMilestoningImplementation(temporalTarget)
|
313
|
+
.initializeMilestoningParameters();
|
314
|
+
}
|
315
|
+
};
|
316
|
+
|
293
317
|
export const validateMilestoningPropertyExpressionChain = (
|
294
318
|
sourceStereotype: MILESTONING_STEREOTYPE | undefined,
|
295
319
|
targetStereotype: MILESTONING_STEREOTYPE,
|
@@ -451,6 +451,33 @@ export class QueryBuilderMilestoningState implements Hashable {
|
|
451
451
|
return milestoningParameter;
|
452
452
|
}
|
453
453
|
|
454
|
+
updateMilestoningParameterValue(
|
455
|
+
parameter: VariableExpression,
|
456
|
+
value: ValueSpecification | undefined,
|
457
|
+
): void {
|
458
|
+
const variableState =
|
459
|
+
this.queryBuilderState.parametersState.parameterStates.find(
|
460
|
+
(param) => param.parameter.name === parameter.name,
|
461
|
+
);
|
462
|
+
if (variableState) {
|
463
|
+
variableState.setValue(value);
|
464
|
+
}
|
465
|
+
}
|
466
|
+
|
467
|
+
getMilestoningParameterValue(
|
468
|
+
milestoningParameter: ValueSpecification,
|
469
|
+
): ValueSpecification | undefined {
|
470
|
+
let value: ValueSpecification | undefined = milestoningParameter;
|
471
|
+
if (milestoningParameter instanceof VariableExpression) {
|
472
|
+
const paramState =
|
473
|
+
this.queryBuilderState.parametersState.parameterStates.find(
|
474
|
+
(param) => param.parameter.name === milestoningParameter.name,
|
475
|
+
);
|
476
|
+
value = paramState?.value;
|
477
|
+
}
|
478
|
+
return value;
|
479
|
+
}
|
480
|
+
|
454
481
|
isVariableUsed(variable: VariableExpression): boolean {
|
455
482
|
const usedInBusiness = this.businessDate
|
456
483
|
? isValueExpressionReferencedInValue(variable, this.businessDate)
|
@@ -461,6 +488,33 @@ export class QueryBuilderMilestoningState implements Hashable {
|
|
461
488
|
return usedInBusiness || usedInProcessingDate;
|
462
489
|
}
|
463
490
|
|
491
|
+
isMilestoningParameter(parameter: VariableExpression): boolean {
|
492
|
+
let isMilestoningParameter = false;
|
493
|
+
if (this.businessDate instanceof VariableExpression) {
|
494
|
+
isMilestoningParameter =
|
495
|
+
parameter.name ===
|
496
|
+
guaranteeType(this.businessDate, VariableExpression).name;
|
497
|
+
}
|
498
|
+
if (this.processingDate instanceof VariableExpression) {
|
499
|
+
isMilestoningParameter =
|
500
|
+
isMilestoningParameter ||
|
501
|
+
parameter.name ===
|
502
|
+
guaranteeType(this.processingDate, VariableExpression).name;
|
503
|
+
}
|
504
|
+
if (this.startDate instanceof VariableExpression) {
|
505
|
+
isMilestoningParameter =
|
506
|
+
isMilestoningParameter ||
|
507
|
+
parameter.name ===
|
508
|
+
guaranteeType(this.startDate, VariableExpression).name;
|
509
|
+
}
|
510
|
+
if (this.endDate instanceof VariableExpression) {
|
511
|
+
isMilestoningParameter =
|
512
|
+
isMilestoningParameter ||
|
513
|
+
parameter.name === guaranteeType(this.endDate, VariableExpression).name;
|
514
|
+
}
|
515
|
+
return isMilestoningParameter;
|
516
|
+
}
|
517
|
+
|
464
518
|
get hashCode(): string {
|
465
519
|
return hashArray([
|
466
520
|
QUERY_BUILDER_STATE_HASH_STRUCTURE.MILESTONING_STATE,
|
@@ -321,3 +321,66 @@ export const valueSpecReturnTDS = (
|
|
321
321
|
retunType && tdsType && (retunType === tdsType || retunType === tdsRowType),
|
322
322
|
);
|
323
323
|
};
|
324
|
+
|
325
|
+
export const convertTextToPrimitiveInstanceValue = (
|
326
|
+
expectedType: Type,
|
327
|
+
value: string,
|
328
|
+
obseverContext: ObserverContext,
|
329
|
+
): PrimitiveInstanceValue | null => {
|
330
|
+
let result = null;
|
331
|
+
if (expectedType instanceof PrimitiveType) {
|
332
|
+
switch (expectedType.path) {
|
333
|
+
case PRIMITIVE_TYPE.STRING: {
|
334
|
+
result = new PrimitiveInstanceValue(
|
335
|
+
GenericTypeExplicitReference.create(new GenericType(expectedType)),
|
336
|
+
);
|
337
|
+
instanceValue_setValues(result, [value.toString()], obseverContext);
|
338
|
+
break;
|
339
|
+
}
|
340
|
+
case PRIMITIVE_TYPE.NUMBER:
|
341
|
+
case PRIMITIVE_TYPE.FLOAT:
|
342
|
+
case PRIMITIVE_TYPE.DECIMAL:
|
343
|
+
case PRIMITIVE_TYPE.INTEGER: {
|
344
|
+
if (isNaN(Number(value))) {
|
345
|
+
return null;
|
346
|
+
}
|
347
|
+
result = new PrimitiveInstanceValue(
|
348
|
+
GenericTypeExplicitReference.create(new GenericType(expectedType)),
|
349
|
+
);
|
350
|
+
instanceValue_setValues(result, [Number(value)], obseverContext);
|
351
|
+
break;
|
352
|
+
}
|
353
|
+
case PRIMITIVE_TYPE.DATE:
|
354
|
+
case PRIMITIVE_TYPE.STRICTDATE: {
|
355
|
+
if (isNaN(Date.parse(value))) {
|
356
|
+
return null;
|
357
|
+
}
|
358
|
+
result = new PrimitiveInstanceValue(
|
359
|
+
GenericTypeExplicitReference.create(new GenericType(expectedType)),
|
360
|
+
);
|
361
|
+
instanceValue_setValues(result, [value], obseverContext);
|
362
|
+
break;
|
363
|
+
}
|
364
|
+
case PRIMITIVE_TYPE.DATETIME: {
|
365
|
+
if (
|
366
|
+
isNaN(Date.parse(value)) ||
|
367
|
+
!new Date(value).getTime() ||
|
368
|
+
(value.includes('%') &&
|
369
|
+
(isNaN(Date.parse(value.slice(1))) ||
|
370
|
+
!new Date(value.slice(1)).getTime()))
|
371
|
+
) {
|
372
|
+
return null;
|
373
|
+
}
|
374
|
+
result = new PrimitiveInstanceValue(
|
375
|
+
GenericTypeExplicitReference.create(new GenericType(expectedType)),
|
376
|
+
);
|
377
|
+
instanceValue_setValues(result, [value], obseverContext);
|
378
|
+
break;
|
379
|
+
}
|
380
|
+
default:
|
381
|
+
// unsupported expected type, just escape
|
382
|
+
return null;
|
383
|
+
}
|
384
|
+
}
|
385
|
+
return result;
|
386
|
+
};
|