@finos/legend-query-builder 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/components/QueryBuilderConstantExpressionPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderConstantExpressionPanel.js +3 -3
- package/lib/components/QueryBuilderConstantExpressionPanel.js.map +1 -1
- package/lib/components/QueryBuilderParametersPanel.js +2 -2
- package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.js +5 -6
- package/lib/components/QueryBuilderPropertyExpressionEditor.js.map +1 -1
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.js +7 -12
- package/lib/components/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderExplorerPanel.js +6 -6
- package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.js +3 -5
- package/lib/components/explorer/QueryBuilderMilestoningEditor.js.map +1 -1
- package/lib/components/explorer/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderPropertySearchPanel.js +5 -6
- package/lib/components/explorer/QueryBuilderPropertySearchPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/shared/BasicValueSpecificationEditor.d.ts.map +1 -1
- package/lib/components/shared/BasicValueSpecificationEditor.js +87 -76
- package/lib/components/shared/BasicValueSpecificationEditor.js.map +1 -1
- package/lib/components/shared/CustomDatePicker.d.ts.map +1 -1
- package/lib/components/shared/CustomDatePicker.js +13 -14
- package/lib/components/shared/CustomDatePicker.js.map +1 -1
- package/lib/components/watermark/QueryBuilderWatermark.d.ts.map +1 -1
- package/lib/components/watermark/QueryBuilderWatermark.js +1 -1
- package/lib/components/watermark/QueryBuilderWatermark.js.map +1 -1
- package/lib/graphManager/QueryBuilderSupportedFunctions.d.ts +1 -0
- package/lib/graphManager/QueryBuilderSupportedFunctions.d.ts.map +1 -1
- package/lib/graphManager/QueryBuilderSupportedFunctions.js +1 -0
- package/lib/graphManager/QueryBuilderSupportedFunctions.js.map +1 -1
- package/lib/graphManager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js.map +1 -1
- package/lib/graphManager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts +8 -8
- package/lib/graphManager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts.map +1 -1
- package/lib/graphManager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js +17 -26
- package/lib/graphManager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +11 -10
- package/lib/stores/QueryBuilderChangeDetectionState.d.ts +4 -4
- package/lib/stores/QueryBuilderChangeDetectionState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderChangeDetectionState.js +9 -9
- package/lib/stores/QueryBuilderChangeDetectionState.js.map +1 -1
- package/lib/stores/QueryBuilderConstantsState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderConstantsState.js +4 -4
- package/lib/stores/QueryBuilderConstantsState.js.map +1 -1
- package/lib/stores/QueryBuilderPropertyEditorState.d.ts +2 -3
- package/lib/stores/QueryBuilderPropertyEditorState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPropertyEditorState.js +9 -12
- package/lib/stores/QueryBuilderPropertyEditorState.js.map +1 -1
- package/lib/stores/QueryBuilderState.d.ts +4 -2
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +7 -7
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.d.ts +2 -2
- package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.js +10 -12
- package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilderHelper.js.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationHelper.d.ts +9 -1
- package/lib/stores/QueryBuilderValueSpecificationHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationHelper.js +22 -1
- package/lib/stores/QueryBuilderValueSpecificationHelper.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js +2 -2
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.js +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterStateBuilder.d.ts +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterStateBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterStateBuilder.js +22 -15
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.js +2 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.js +2 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.js +6 -3
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.js +4 -2
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.js +4 -2
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.js +2 -1
- package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.js +2 -2
- package/lib/stores/filter/QueryBuilderFilterState.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterStateBuilder.d.ts.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterStateBuilder.js +1 -14
- package/lib/stores/filter/QueryBuilderFilterStateBuilder.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js +9 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js +4 -3
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js +3 -3
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
- package/lib/stores/shared/LambdaParameterState.d.ts +2 -2
- package/lib/stores/shared/LambdaParameterState.d.ts.map +1 -1
- package/lib/stores/shared/LambdaParameterState.js +5 -5
- package/lib/stores/shared/LambdaParameterState.js.map +1 -1
- package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts +4 -4
- package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts.map +1 -1
- package/lib/stores/shared/ValueSpecificationEditorHelper.js +11 -15
- package/lib/stores/shared/ValueSpecificationEditorHelper.js.map +1 -1
- package/lib/stores/shared/ValueSpecificationModifierHelper.d.ts +8 -8
- package/lib/stores/shared/ValueSpecificationModifierHelper.d.ts.map +1 -1
- package/lib/stores/shared/ValueSpecificationModifierHelper.js +20 -17
- package/lib/stores/shared/ValueSpecificationModifierHelper.js.map +1 -1
- package/lib/stores/watermark/QueryBuilderWatermarkState.d.ts.map +1 -1
- package/lib/stores/watermark/QueryBuilderWatermarkState.js +1 -1
- package/lib/stores/watermark/QueryBuilderWatermarkState.js.map +1 -1
- package/package.json +18 -17
- package/src/components/QueryBuilderConstantExpressionPanel.tsx +3 -1
- package/src/components/QueryBuilderParametersPanel.tsx +2 -2
- package/src/components/QueryBuilderPropertyExpressionEditor.tsx +6 -6
- package/src/components/QueryBuilderResultPanel.tsx +18 -14
- package/src/components/explorer/QueryBuilderExplorerPanel.tsx +10 -11
- package/src/components/explorer/QueryBuilderMilestoningEditor.tsx +7 -5
- package/src/components/explorer/QueryBuilderPropertySearchPanel.tsx +9 -6
- package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +1 -1
- package/src/components/filter/QueryBuilderFilterPanel.tsx +1 -1
- package/src/components/shared/BasicValueSpecificationEditor.tsx +180 -106
- package/src/components/shared/CustomDatePicker.tsx +54 -26
- package/src/components/watermark/QueryBuilderWatermark.tsx +1 -3
- package/src/graphManager/QueryBuilderSupportedFunctions.ts +4 -0
- package/src/graphManager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.ts +1 -1
- package/src/graphManager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts +67 -68
- package/src/stores/QueryBuilderChangeDetectionState.ts +13 -11
- package/src/stores/QueryBuilderConstantsState.ts +4 -3
- package/src/stores/QueryBuilderPropertyEditorState.ts +17 -13
- package/src/stores/QueryBuilderState.ts +7 -9
- package/src/stores/QueryBuilderStateBuilder.ts +10 -12
- package/src/stores/QueryBuilderValueSpecificationBuilderHelper.ts +1 -1
- package/src/stores/QueryBuilderValueSpecificationHelper.ts +36 -0
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeUtil.ts +10 -2
- package/src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.ts +1 -1
- package/src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterStateBuilder.ts +26 -20
- package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Contain.ts +2 -0
- package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_EndWith.ts +2 -0
- package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_Equal.ts +14 -3
- package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_GreaterThan.ts +4 -0
- package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_LessThan.ts +4 -0
- package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_StartWith.ts +2 -0
- package/src/stores/filter/QueryBuilderFilterState.ts +2 -2
- package/src/stores/filter/QueryBuilderFilterStateBuilder.ts +0 -20
- package/src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts +17 -4
- package/src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts +1 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_EndWith.ts +1 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_Equal.ts +12 -3
- package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThan.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_StartWith.ts +1 -0
- package/src/stores/milestoning/QueryBuilderMilestoningState.ts +3 -9
- package/src/stores/shared/LambdaParameterState.ts +9 -5
- package/src/stores/shared/ValueSpecificationEditorHelper.ts +24 -9
- package/src/stores/shared/ValueSpecificationModifierHelper.ts +42 -20
- package/src/stores/watermark/QueryBuilderWatermarkState.ts +1 -4
@@ -32,6 +32,7 @@ import {
|
|
32
32
|
FilledWindowMaximizeIcon,
|
33
33
|
BasePopover,
|
34
34
|
PanelFormSection,
|
35
|
+
CalculateIcon,
|
35
36
|
} from '@finos/legend-art';
|
36
37
|
import {
|
37
38
|
type Enum,
|
@@ -53,6 +54,8 @@ import {
|
|
53
54
|
getEnumValue,
|
54
55
|
getMultiplicityDescription,
|
55
56
|
type ObserverContext,
|
57
|
+
matchFunctionName,
|
58
|
+
isSubType,
|
56
59
|
} from '@finos/legend-graph';
|
57
60
|
import {
|
58
61
|
type DebouncedFunc,
|
@@ -62,6 +65,7 @@ import {
|
|
62
65
|
returnUndefOnError,
|
63
66
|
uniq,
|
64
67
|
parseCSVString,
|
68
|
+
guaranteeIsNumber,
|
65
69
|
} from '@finos/legend-shared';
|
66
70
|
import { flowResult } from 'mobx';
|
67
71
|
import { observer } from 'mobx-react-lite';
|
@@ -72,6 +76,9 @@ import {
|
|
72
76
|
instanceValue_setValues,
|
73
77
|
} from '../../stores/shared/ValueSpecificationModifierHelper.js';
|
74
78
|
import { CustomDatePicker } from './CustomDatePicker.js';
|
79
|
+
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../graphManager/QueryBuilderSupportedFunctions.js';
|
80
|
+
import { simplifyValueExpression } from '../../stores/QueryBuilderValueSpecificationHelper.js';
|
81
|
+
import { evaluate } from 'mathjs';
|
75
82
|
|
76
83
|
type TypeCheckOption = {
|
77
84
|
expectedType: Type;
|
@@ -210,6 +217,7 @@ const StringPrimitiveInstanceValueEditor = observer(
|
|
210
217
|
cleanUpReloadValues?: () => void;
|
211
218
|
}
|
212
219
|
| undefined;
|
220
|
+
obseverContext: ObserverContext;
|
213
221
|
}) => {
|
214
222
|
const {
|
215
223
|
valueSpecification,
|
@@ -217,12 +225,13 @@ const StringPrimitiveInstanceValueEditor = observer(
|
|
217
225
|
resetValue,
|
218
226
|
setValueSpecification,
|
219
227
|
selectorConfig,
|
228
|
+
obseverContext,
|
220
229
|
} = props;
|
221
230
|
const useSelector = Boolean(selectorConfig);
|
222
231
|
const applicationStore = useApplicationStore();
|
223
232
|
const value = valueSpecification.values[0] as string;
|
224
233
|
const updateValueSpec = (val: string): void => {
|
225
|
-
instanceValue_setValue(valueSpecification, val, 0);
|
234
|
+
instanceValue_setValue(valueSpecification, val, 0, obseverContext);
|
226
235
|
setValueSpecification(valueSpecification);
|
227
236
|
};
|
228
237
|
const changeInputValue: React.ChangeEventHandler<HTMLInputElement> = (
|
@@ -316,12 +325,18 @@ const BooleanPrimitiveInstanceValueEditor = observer(
|
|
316
325
|
className?: string | undefined;
|
317
326
|
resetValue: () => void;
|
318
327
|
setValueSpecification: (val: ValueSpecification) => void;
|
328
|
+
obseverContext: ObserverContext;
|
319
329
|
}) => {
|
320
|
-
const {
|
321
|
-
|
330
|
+
const {
|
331
|
+
valueSpecification,
|
332
|
+
className,
|
333
|
+
resetValue,
|
334
|
+
setValueSpecification,
|
335
|
+
obseverContext,
|
336
|
+
} = props;
|
322
337
|
const value = valueSpecification.values[0] as boolean;
|
323
338
|
const toggleValue = (): void => {
|
324
|
-
instanceValue_setValue(valueSpecification, !value, 0);
|
339
|
+
instanceValue_setValue(valueSpecification, !value, 0, obseverContext);
|
325
340
|
setValueSpecification(valueSpecification);
|
326
341
|
};
|
327
342
|
|
@@ -354,6 +369,7 @@ const NumberPrimitiveInstanceValueEditor = observer(
|
|
354
369
|
className?: string | undefined;
|
355
370
|
resetValue: () => void;
|
356
371
|
setValueSpecification: (val: ValueSpecification) => void;
|
372
|
+
obseverContext: ObserverContext;
|
357
373
|
}) => {
|
358
374
|
const {
|
359
375
|
valueSpecification,
|
@@ -361,96 +377,95 @@ const NumberPrimitiveInstanceValueEditor = observer(
|
|
361
377
|
className,
|
362
378
|
resetValue,
|
363
379
|
setValueSpecification,
|
380
|
+
obseverContext,
|
364
381
|
} = props;
|
382
|
+
const [value, setValue] = useState(
|
383
|
+
(valueSpecification.values[0] as number).toString(),
|
384
|
+
);
|
385
|
+
const inputRef = useRef<HTMLInputElement>(null);
|
386
|
+
const numericValue = isInteger
|
387
|
+
? Number.parseInt(Number(value).toString(), 10)
|
388
|
+
: Number(value);
|
365
389
|
|
366
|
-
const
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
//
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
parseInt(
|
386
|
-
numberInputValue.substring(0, numberInputValue.length - 1),
|
387
|
-
10,
|
388
|
-
),
|
389
|
-
0,
|
390
|
-
);
|
390
|
+
const changeValue: React.ChangeEventHandler<HTMLInputElement> = (event) => {
|
391
|
+
setValue(event.target.value);
|
392
|
+
};
|
393
|
+
|
394
|
+
// Support expression evaluation
|
395
|
+
const calculateExpression = (): void => {
|
396
|
+
if (isNaN(numericValue)) {
|
397
|
+
try {
|
398
|
+
const calculatedValue = guaranteeIsNumber(evaluate(value));
|
399
|
+
setValue(
|
400
|
+
isInteger
|
401
|
+
? Number.parseInt(calculatedValue.toString(), 10).toString()
|
402
|
+
: Number(calculatedValue).toString(),
|
403
|
+
);
|
404
|
+
} catch {
|
405
|
+
setValue((valueSpecification.values[0] as number).toString());
|
406
|
+
}
|
407
|
+
} else {
|
408
|
+
setValue(numericValue.toString());
|
391
409
|
}
|
392
|
-
const val = isInteger
|
393
|
-
? parseInt(numberInputValue, 10)
|
394
|
-
: parseFloat(numberInputValue);
|
395
|
-
instanceValue_setValue(valueSpecification, val, 0);
|
396
|
-
setValueSpecification(valueSpecification);
|
397
410
|
};
|
398
411
|
|
399
|
-
const
|
400
|
-
|
401
|
-
|
402
|
-
(
|
412
|
+
const onKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {
|
413
|
+
if (event.code === 'Enter') {
|
414
|
+
calculateExpression();
|
415
|
+
inputRef.current?.focus();
|
416
|
+
} else if (event.code === 'Escape') {
|
417
|
+
inputRef.current?.select();
|
418
|
+
}
|
419
|
+
};
|
403
420
|
|
404
|
-
|
405
|
-
|
421
|
+
useEffect(() => {
|
422
|
+
setValue((valueSpecification.values[0] as number).toString());
|
423
|
+
}, [valueSpecification]);
|
406
424
|
|
425
|
+
useEffect(() => {
|
407
426
|
if (
|
408
|
-
!
|
409
|
-
|
410
|
-
value.toString().length > 0 &&
|
411
|
-
!value.toString().includes(DECIMAL_POINT)
|
412
|
-
) {
|
413
|
-
instanceValue_setValue(
|
414
|
-
valueSpecification,
|
415
|
-
valueSpecification.values[0] + DECIMAL_POINT,
|
416
|
-
0,
|
417
|
-
);
|
418
|
-
return;
|
419
|
-
}
|
420
|
-
if (
|
421
|
-
value.toString().includes(DECIMAL_POINT) &&
|
422
|
-
(event.nativeEvent as InputEvent).data === '0'
|
427
|
+
!isNaN(numericValue) &&
|
428
|
+
numericValue !== valueSpecification.values[0]
|
423
429
|
) {
|
424
430
|
instanceValue_setValue(
|
425
431
|
valueSpecification,
|
426
|
-
|
432
|
+
numericValue,
|
427
433
|
0,
|
434
|
+
obseverContext,
|
428
435
|
);
|
429
436
|
setValueSpecification(valueSpecification);
|
430
|
-
return;
|
431
437
|
}
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
valueIsNegativeSymbol
|
439
|
-
? instanceValue_setValue(valueSpecification, NEGATIVE_SIGN, 0)
|
440
|
-
: instanceValue_setValue(valueSpecification, inputVal, 0);
|
441
|
-
setValueSpecification(valueSpecification);
|
442
|
-
};
|
438
|
+
}, [
|
439
|
+
numericValue,
|
440
|
+
valueSpecification,
|
441
|
+
setValueSpecification,
|
442
|
+
obseverContext,
|
443
|
+
]);
|
443
444
|
|
444
445
|
return (
|
445
446
|
<div className={clsx('value-spec-editor', className)}>
|
446
|
-
<
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
447
|
+
<div className="value-spec-editor__number__input-container">
|
448
|
+
<input
|
449
|
+
ref={inputRef}
|
450
|
+
className="panel__content__form__section__input value-spec-editor__input value-spec-editor__number__input"
|
451
|
+
spellCheck={false}
|
452
|
+
type="text" // NOTE: we leave this as text so that we can support expression evaluation
|
453
|
+
inputMode="numeric"
|
454
|
+
value={value}
|
455
|
+
onChange={changeValue}
|
456
|
+
onBlur={calculateExpression}
|
457
|
+
onKeyDown={onKeyDown}
|
458
|
+
/>
|
459
|
+
<div className="value-spec-editor__number__actions">
|
460
|
+
<button
|
461
|
+
className="value-spec-editor__number__action"
|
462
|
+
title="Evaluate Expression (Enter)"
|
463
|
+
onClick={calculateExpression}
|
464
|
+
>
|
465
|
+
<CalculateIcon />
|
466
|
+
</button>
|
467
|
+
</div>
|
468
|
+
</div>
|
454
469
|
<button
|
455
470
|
className="value-spec-editor__reset-btn"
|
456
471
|
title="Reset"
|
@@ -469,9 +484,15 @@ const EnumValueInstanceValueEditor = observer(
|
|
469
484
|
className?: string | undefined;
|
470
485
|
setValueSpecification: (val: ValueSpecification) => void;
|
471
486
|
resetValue: () => void;
|
487
|
+
obseverContext: ObserverContext;
|
472
488
|
}) => {
|
473
|
-
const {
|
474
|
-
|
489
|
+
const {
|
490
|
+
valueSpecification,
|
491
|
+
className,
|
492
|
+
resetValue,
|
493
|
+
setValueSpecification,
|
494
|
+
obseverContext,
|
495
|
+
} = props;
|
475
496
|
const enumValueRef = guaranteeNonNullable(valueSpecification.values[0]);
|
476
497
|
const enumValue = enumValueRef.value;
|
477
498
|
const options = enumValue._OWNER.values.map((value) => ({
|
@@ -483,6 +504,7 @@ const EnumValueInstanceValueEditor = observer(
|
|
483
504
|
valueSpecification,
|
484
505
|
EnumValueExplicitReference.create(val.value),
|
485
506
|
0,
|
507
|
+
obseverContext,
|
486
508
|
);
|
487
509
|
setValueSpecification(valueSpecification);
|
488
510
|
};
|
@@ -536,9 +558,10 @@ const setCollectionValue = (
|
|
536
558
|
valueSpecification: CollectionInstanceValue,
|
537
559
|
expectedType: Type,
|
538
560
|
value: string,
|
561
|
+
obseverContext: ObserverContext,
|
539
562
|
): void => {
|
540
563
|
if (value.trim().length === 0) {
|
541
|
-
instanceValue_setValues(valueSpecification, []);
|
564
|
+
instanceValue_setValues(valueSpecification, [], obseverContext);
|
542
565
|
return;
|
543
566
|
}
|
544
567
|
let result: unknown[] = [];
|
@@ -559,7 +582,11 @@ const setCollectionValue = (
|
|
559
582
|
new GenericType(expectedType),
|
560
583
|
),
|
561
584
|
);
|
562
|
-
instanceValue_setValues(
|
585
|
+
instanceValue_setValues(
|
586
|
+
primitiveInstanceValue,
|
587
|
+
[item.toString()],
|
588
|
+
obseverContext,
|
589
|
+
);
|
563
590
|
return primitiveInstanceValue;
|
564
591
|
})
|
565
592
|
.filter(isNonNullable);
|
@@ -580,7 +607,11 @@ const setCollectionValue = (
|
|
580
607
|
new GenericType(expectedType),
|
581
608
|
),
|
582
609
|
);
|
583
|
-
instanceValue_setValues(
|
610
|
+
instanceValue_setValues(
|
611
|
+
primitiveInstanceValue,
|
612
|
+
[item],
|
613
|
+
obseverContext,
|
614
|
+
);
|
584
615
|
return primitiveInstanceValue;
|
585
616
|
})
|
586
617
|
.filter(isNonNullable);
|
@@ -602,14 +633,16 @@ const setCollectionValue = (
|
|
602
633
|
const enumValueInstanceValue = new EnumValueInstanceValue(
|
603
634
|
GenericTypeExplicitReference.create(new GenericType(expectedType)),
|
604
635
|
);
|
605
|
-
instanceValue_setValues(
|
606
|
-
|
607
|
-
|
636
|
+
instanceValue_setValues(
|
637
|
+
enumValueInstanceValue,
|
638
|
+
[EnumValueExplicitReference.create(_enum)],
|
639
|
+
obseverContext,
|
640
|
+
);
|
608
641
|
return enumValueInstanceValue;
|
609
642
|
})
|
610
643
|
.filter(isNonNullable);
|
611
644
|
}
|
612
|
-
instanceValue_setValues(valueSpecification, result);
|
645
|
+
instanceValue_setValues(valueSpecification, result, obseverContext);
|
613
646
|
};
|
614
647
|
|
615
648
|
const COLLECTION_PREVIEW_CHAR_LIMIT = 50;
|
@@ -622,6 +655,7 @@ const CollectionValueInstanceValueEditor = observer(
|
|
622
655
|
className?: string | undefined;
|
623
656
|
resetValue: () => void;
|
624
657
|
setValueSpecification: (val: ValueSpecification) => void;
|
658
|
+
obseverContext: ObserverContext;
|
625
659
|
}) => {
|
626
660
|
const {
|
627
661
|
valueSpecification,
|
@@ -629,6 +663,7 @@ const CollectionValueInstanceValueEditor = observer(
|
|
629
663
|
className,
|
630
664
|
resetValue,
|
631
665
|
setValueSpecification,
|
666
|
+
obseverContext,
|
632
667
|
} = props;
|
633
668
|
const inputRef = useRef<HTMLInputElement>(null);
|
634
669
|
const [text, setText] = useState(stringifyValue(valueSpecification.values));
|
@@ -653,7 +688,12 @@ const CollectionValueInstanceValueEditor = observer(
|
|
653
688
|
const saveEdit = (): void => {
|
654
689
|
setEditable(false);
|
655
690
|
setShowAdvancedEditorPopover(false);
|
656
|
-
setCollectionValue(
|
691
|
+
setCollectionValue(
|
692
|
+
valueSpecification,
|
693
|
+
expectedType,
|
694
|
+
text,
|
695
|
+
obseverContext,
|
696
|
+
);
|
657
697
|
setText(stringifyValue(valueSpecification.values));
|
658
698
|
setValueSpecification(valueSpecification);
|
659
699
|
};
|
@@ -849,6 +889,7 @@ export const BasicValueSpecificationEditor: React.FC<{
|
|
849
889
|
className={className}
|
850
890
|
resetValue={resetValue}
|
851
891
|
selectorConfig={selectorConfig}
|
892
|
+
obseverContext={obseverContext}
|
852
893
|
/>
|
853
894
|
);
|
854
895
|
case PRIMITIVE_TYPE.BOOLEAN:
|
@@ -858,6 +899,7 @@ export const BasicValueSpecificationEditor: React.FC<{
|
|
858
899
|
setValueSpecification={setValueSpecification}
|
859
900
|
className={className}
|
860
901
|
resetValue={resetValue}
|
902
|
+
obseverContext={obseverContext}
|
861
903
|
/>
|
862
904
|
);
|
863
905
|
case PRIMITIVE_TYPE.NUMBER:
|
@@ -872,6 +914,7 @@ export const BasicValueSpecificationEditor: React.FC<{
|
|
872
914
|
setValueSpecification={setValueSpecification}
|
873
915
|
className={className}
|
874
916
|
resetValue={resetValue}
|
917
|
+
obseverContext={obseverContext}
|
875
918
|
/>
|
876
919
|
);
|
877
920
|
case PRIMITIVE_TYPE.DATE:
|
@@ -899,6 +942,7 @@ export const BasicValueSpecificationEditor: React.FC<{
|
|
899
942
|
className={className}
|
900
943
|
resetValue={resetValue}
|
901
944
|
setValueSpecification={setValueSpecification}
|
945
|
+
obseverContext={obseverContext}
|
902
946
|
/>
|
903
947
|
);
|
904
948
|
} else if (
|
@@ -916,6 +960,7 @@ export const BasicValueSpecificationEditor: React.FC<{
|
|
916
960
|
className={className}
|
917
961
|
resetValue={resetValue}
|
918
962
|
setValueSpecification={setValueSpecification}
|
963
|
+
obseverContext={obseverContext}
|
919
964
|
/>
|
920
965
|
);
|
921
966
|
}
|
@@ -940,26 +985,55 @@ export const BasicValueSpecificationEditor: React.FC<{
|
|
940
985
|
resetValue={resetValue}
|
941
986
|
/>
|
942
987
|
);
|
943
|
-
} else if (
|
944
|
-
|
945
|
-
|
946
|
-
|
947
|
-
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
959
|
-
|
960
|
-
|
961
|
-
|
962
|
-
|
988
|
+
} else if (valueSpecification instanceof SimpleFunctionExpression) {
|
989
|
+
if (isSubType(typeCheckOption.expectedType, PrimitiveType.DATE)) {
|
990
|
+
return (
|
991
|
+
<DateInstanceValueEditor
|
992
|
+
valueSpecification={valueSpecification}
|
993
|
+
graph={graph}
|
994
|
+
obseverContext={obseverContext}
|
995
|
+
typeCheckOption={typeCheckOption}
|
996
|
+
className={className}
|
997
|
+
setValueSpecification={setValueSpecification}
|
998
|
+
resetValue={resetValue}
|
999
|
+
/>
|
1000
|
+
);
|
1001
|
+
} else if (
|
1002
|
+
// TODO: think of other ways we could make use of this code path where we can simplify
|
1003
|
+
// an expression value to simple value, not just handling minus() function only
|
1004
|
+
isSubType(typeCheckOption.expectedType, PrimitiveType.NUMBER) &&
|
1005
|
+
matchFunctionName(
|
1006
|
+
valueSpecification.functionName,
|
1007
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.MINUS,
|
1008
|
+
)
|
1009
|
+
) {
|
1010
|
+
const simplifiedValue = simplifyValueExpression(
|
1011
|
+
valueSpecification,
|
1012
|
+
obseverContext,
|
1013
|
+
);
|
1014
|
+
if (
|
1015
|
+
simplifiedValue instanceof PrimitiveInstanceValue &&
|
1016
|
+
isSubType(
|
1017
|
+
simplifiedValue.genericType.value.rawType,
|
1018
|
+
PrimitiveType.NUMBER,
|
1019
|
+
)
|
1020
|
+
) {
|
1021
|
+
return (
|
1022
|
+
<NumberPrimitiveInstanceValueEditor
|
1023
|
+
valueSpecification={simplifiedValue}
|
1024
|
+
isInteger={
|
1025
|
+
simplifiedValue.genericType.value.rawType ===
|
1026
|
+
PrimitiveType.INTEGER
|
1027
|
+
}
|
1028
|
+
setValueSpecification={setValueSpecification}
|
1029
|
+
className={className}
|
1030
|
+
resetValue={resetValue}
|
1031
|
+
obseverContext={obseverContext}
|
1032
|
+
/>
|
1033
|
+
);
|
1034
|
+
}
|
1035
|
+
}
|
963
1036
|
}
|
1037
|
+
|
964
1038
|
return <UnsupportedValueSpecificationEditor />;
|
965
1039
|
};
|
@@ -258,16 +258,20 @@ const buildPureDateFunctionExpression = (
|
|
258
258
|
new GenericType(graph.getType(DAY_OF_WEEK)),
|
259
259
|
),
|
260
260
|
);
|
261
|
-
instanceValue_setValues(
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
261
|
+
instanceValue_setValues(
|
262
|
+
dayOfWeekEnumIntanceValue,
|
263
|
+
[
|
264
|
+
...dayOfWeekEnumIntanceValue.values,
|
265
|
+
EnumValueExplicitReference.create(
|
266
|
+
guaranteeNonNullable(
|
267
|
+
graph
|
268
|
+
.getEnumeration(DAY_OF_WEEK)
|
269
|
+
.values.filter((e) => e.name === datePickerOption.day)[0],
|
270
|
+
),
|
268
271
|
),
|
269
|
-
|
270
|
-
|
272
|
+
],
|
273
|
+
observerContext,
|
274
|
+
);
|
271
275
|
functionExpression_addParameterValue(
|
272
276
|
previousFridaySFE,
|
273
277
|
dayOfWeekEnumIntanceValue,
|
@@ -454,6 +458,7 @@ const buildPureAdjustDateFunction = (
|
|
454
458
|
graph,
|
455
459
|
PRIMITIVE_TYPE.INTEGER,
|
456
460
|
customDateOption.duration,
|
461
|
+
observerContext,
|
457
462
|
),
|
458
463
|
observerContext,
|
459
464
|
);
|
@@ -463,14 +468,14 @@ const buildPureAdjustDateFunction = (
|
|
463
468
|
observerContext,
|
464
469
|
);
|
465
470
|
} else {
|
466
|
-
const adjustmentInstanceValue = buildPrimitiveInstanceValue(
|
467
|
-
graph,
|
468
|
-
PRIMITIVE_TYPE.INTEGER,
|
469
|
-
customDateOption.duration,
|
470
|
-
);
|
471
471
|
functionExpression_addParameterValue(
|
472
472
|
dateAdjustSimpleFunctionExpression,
|
473
|
-
|
473
|
+
buildPrimitiveInstanceValue(
|
474
|
+
graph,
|
475
|
+
PRIMITIVE_TYPE.INTEGER,
|
476
|
+
customDateOption.duration,
|
477
|
+
observerContext,
|
478
|
+
),
|
474
479
|
observerContext,
|
475
480
|
);
|
476
481
|
}
|
@@ -479,17 +484,21 @@ const buildPureAdjustDateFunction = (
|
|
479
484
|
new GenericType(graph.getType(DURATION_UNIT)),
|
480
485
|
),
|
481
486
|
);
|
482
|
-
instanceValue_setValues(
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
487
|
+
instanceValue_setValues(
|
488
|
+
durationUnitEnumIntanceValue,
|
489
|
+
[
|
490
|
+
...durationUnitEnumIntanceValue.values,
|
491
|
+
EnumValueExplicitReference.create(
|
492
|
+
guaranteeNonNullable(
|
493
|
+
buildPureDurationEnumValue(
|
494
|
+
guaranteeNonNullable(customDateOption.unit),
|
495
|
+
graph,
|
496
|
+
),
|
489
497
|
),
|
490
498
|
),
|
491
|
-
|
492
|
-
|
499
|
+
],
|
500
|
+
observerContext,
|
501
|
+
);
|
493
502
|
functionExpression_addParameterValue(
|
494
503
|
dateAdjustSimpleFunctionExpression,
|
495
504
|
durationUnitEnumIntanceValue,
|
@@ -699,12 +708,14 @@ const AbsoluteDateValueSpecificationEditor: React.FC<{
|
|
699
708
|
graph: PureModel;
|
700
709
|
setValueSpecification: (val: ValueSpecification) => void;
|
701
710
|
setDatePickerOption: (datePickerOption: DatePickerOption) => void;
|
711
|
+
observerContext: ObserverContext;
|
702
712
|
}> = (props) => {
|
703
713
|
const {
|
704
714
|
valueSpecification,
|
705
715
|
graph,
|
706
716
|
setValueSpecification,
|
707
717
|
setDatePickerOption,
|
718
|
+
observerContext,
|
708
719
|
} = props;
|
709
720
|
const inputRef = useRef<HTMLInputElement>(null);
|
710
721
|
const absoluteDateValue =
|
@@ -720,10 +731,16 @@ const AbsoluteDateValueSpecificationEditor: React.FC<{
|
|
720
731
|
graph,
|
721
732
|
PRIMITIVE_TYPE.STRICTDATE,
|
722
733
|
event.target.value,
|
734
|
+
observerContext,
|
723
735
|
),
|
724
736
|
);
|
725
737
|
} else if (valueSpecification instanceof InstanceValue) {
|
726
|
-
instanceValue_setValue(
|
738
|
+
instanceValue_setValue(
|
739
|
+
valueSpecification,
|
740
|
+
event.target.value,
|
741
|
+
0,
|
742
|
+
observerContext,
|
743
|
+
);
|
727
744
|
if (
|
728
745
|
valueSpecification.genericType.value.rawType.path !==
|
729
746
|
PRIMITIVE_TYPE.STRICTDATE
|
@@ -768,12 +785,14 @@ const AbsoluteTimeValueSpecificationEditor: React.FC<{
|
|
768
785
|
graph: PureModel;
|
769
786
|
setValueSpecification: (val: ValueSpecification) => void;
|
770
787
|
setDatePickerOption: (datePickerOption: DatePickerOption) => void;
|
788
|
+
observerContext: ObserverContext;
|
771
789
|
}> = (props) => {
|
772
790
|
const {
|
773
791
|
valueSpecification,
|
774
792
|
graph,
|
775
793
|
setValueSpecification,
|
776
794
|
setDatePickerOption,
|
795
|
+
observerContext,
|
777
796
|
} = props;
|
778
797
|
const inputRef = useRef<HTMLInputElement>(null);
|
779
798
|
const absoluteTimeValue =
|
@@ -789,10 +808,16 @@ const AbsoluteTimeValueSpecificationEditor: React.FC<{
|
|
789
808
|
graph,
|
790
809
|
PRIMITIVE_TYPE.DATETIME,
|
791
810
|
event.target.value,
|
811
|
+
observerContext,
|
792
812
|
),
|
793
813
|
);
|
794
814
|
} else {
|
795
|
-
instanceValue_setValue(
|
815
|
+
instanceValue_setValue(
|
816
|
+
valueSpecification,
|
817
|
+
event.target.value,
|
818
|
+
0,
|
819
|
+
observerContext,
|
820
|
+
);
|
796
821
|
if (
|
797
822
|
valueSpecification.genericType.value.rawType.path !==
|
798
823
|
PRIMITIVE_TYPE.DATETIME
|
@@ -1213,6 +1238,7 @@ export const CustomDatePicker: React.FC<{
|
|
1213
1238
|
graph,
|
1214
1239
|
PRIMITIVE_TYPE.LATESTDATE,
|
1215
1240
|
event.target.value,
|
1241
|
+
observerContext,
|
1216
1242
|
),
|
1217
1243
|
);
|
1218
1244
|
} else if (
|
@@ -1255,6 +1281,7 @@ export const CustomDatePicker: React.FC<{
|
|
1255
1281
|
valueSpecification={valueSpecification}
|
1256
1282
|
setValueSpecification={setValueSpecification}
|
1257
1283
|
setDatePickerOption={setDatePickerOption}
|
1284
|
+
observerContext={observerContext}
|
1258
1285
|
/>
|
1259
1286
|
);
|
1260
1287
|
case CUSTOM_DATE_PICKER_OPTION.ABSOLUTE_TIME:
|
@@ -1264,6 +1291,7 @@ export const CustomDatePicker: React.FC<{
|
|
1264
1291
|
valueSpecification={valueSpecification}
|
1265
1292
|
setValueSpecification={setValueSpecification}
|
1266
1293
|
setDatePickerOption={setDatePickerOption}
|
1294
|
+
observerContext={observerContext}
|
1267
1295
|
/>
|
1268
1296
|
);
|
1269
1297
|
case CUSTOM_DATE_PICKER_OPTION.CUSTOM_DATE:
|
@@ -106,9 +106,7 @@ const WatermarkValueEditor = observer(
|
|
106
106
|
watermarkState.setValue(val);
|
107
107
|
}}
|
108
108
|
graph={graph}
|
109
|
-
obseverContext={
|
110
|
-
watermarkState.queryBuilderState.observableContext
|
111
|
-
}
|
109
|
+
obseverContext={watermarkState.queryBuilderState.observerContext}
|
112
110
|
typeCheckOption={{
|
113
111
|
expectedType: PrimitiveType.STRING,
|
114
112
|
}}
|