@finos/legend-query-builder 4.14.63 → 4.14.65

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.d.ts +3 -0
  2. package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.d.ts.map +1 -1
  3. package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.js +12 -1
  4. package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.js.map +1 -1
  5. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
  6. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js +20 -19
  7. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
  8. package/lib/components/filter/QueryBuilderFilterPanel.d.ts +7 -1
  9. package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
  10. package/lib/components/filter/QueryBuilderFilterPanel.js +137 -54
  11. package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
  12. package/lib/components/shared/QueryBuilderFilterHelper.d.ts +19 -0
  13. package/lib/components/shared/QueryBuilderFilterHelper.d.ts.map +1 -0
  14. package/lib/components/shared/QueryBuilderFilterHelper.js +34 -0
  15. package/lib/components/shared/QueryBuilderFilterHelper.js.map +1 -0
  16. package/lib/components/shared/QueryBuilderPropertyInfoTooltip.js +1 -1
  17. package/lib/components/shared/QueryBuilderPropertyInfoTooltip.js.map +1 -1
  18. package/lib/index.css +17 -1
  19. package/lib/index.css.map +1 -1
  20. package/lib/package.json +3 -3
  21. package/lib/stores/QueryBuilderStateHashUtils.d.ts +2 -0
  22. package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
  23. package/lib/stores/QueryBuilderStateHashUtils.js +2 -0
  24. package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
  25. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.js +1 -1
  26. package/lib/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.js.map +1 -1
  27. package/lib/stores/filter/QueryBuilderFilterState.d.ts +35 -5
  28. package/lib/stores/filter/QueryBuilderFilterState.d.ts.map +1 -1
  29. package/lib/stores/filter/QueryBuilderFilterState.js +181 -52
  30. package/lib/stores/filter/QueryBuilderFilterState.js.map +1 -1
  31. package/lib/stores/filter/QueryBuilderFilterStateBuilder.js +2 -2
  32. package/lib/stores/filter/QueryBuilderFilterStateBuilder.js.map +1 -1
  33. package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts.map +1 -1
  34. package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js +21 -6
  35. package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js.map +1 -1
  36. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts.map +1 -1
  37. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js +4 -3
  38. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js.map +1 -1
  39. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts.map +1 -1
  40. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js +4 -3
  41. package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js.map +1 -1
  42. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
  43. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js +5 -4
  44. package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js.map +1 -1
  45. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
  46. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js +5 -4
  47. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
  48. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
  49. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js +5 -4
  50. package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
  51. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts +1 -1
  52. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts.map +1 -1
  53. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js +33 -28
  54. package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js.map +1 -1
  55. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js +1 -1
  56. package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js.map +1 -1
  57. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
  58. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js +5 -4
  59. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
  60. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
  61. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js +5 -4
  62. package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
  63. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts.map +1 -1
  64. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js +4 -3
  65. package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js.map +1 -1
  66. package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts +2 -1
  67. package/lib/stores/shared/ValueSpecificationEditorHelper.d.ts.map +1 -1
  68. package/lib/stores/shared/ValueSpecificationEditorHelper.js +9 -3
  69. package/lib/stores/shared/ValueSpecificationEditorHelper.js.map +1 -1
  70. package/package.json +11 -11
  71. package/src/components/__test-utils__/QueryBuilderComponentTestUtils.tsx +25 -0
  72. package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +29 -26
  73. package/src/components/filter/QueryBuilderFilterPanel.tsx +335 -106
  74. package/src/components/shared/QueryBuilderFilterHelper.ts +51 -0
  75. package/src/components/shared/QueryBuilderPropertyInfoTooltip.tsx +1 -1
  76. package/src/stores/QueryBuilderStateHashUtils.ts +2 -0
  77. package/src/stores/fetch-structure/tds/post-filter/operators/QueryBuilderPostFilterOperator_In.ts +1 -1
  78. package/src/stores/filter/QueryBuilderFilterState.ts +284 -74
  79. package/src/stores/filter/QueryBuilderFilterStateBuilder.ts +2 -2
  80. package/src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts +48 -9
  81. package/src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts +5 -4
  82. package/src/stores/filter/operators/QueryBuilderFilterOperator_EndWith.ts +5 -4
  83. package/src/stores/filter/operators/QueryBuilderFilterOperator_Equal.ts +4 -4
  84. package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.ts +5 -7
  85. package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.ts +5 -7
  86. package/src/stores/filter/operators/QueryBuilderFilterOperator_In.ts +52 -47
  87. package/src/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.ts +1 -1
  88. package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThan.ts +5 -7
  89. package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.ts +5 -7
  90. package/src/stores/filter/operators/QueryBuilderFilterOperator_StartWith.ts +5 -4
  91. package/src/stores/shared/ValueSpecificationEditorHelper.ts +28 -0
  92. package/tsconfig.json +1 -0
@@ -34,7 +34,6 @@ import {
34
34
  import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graph/QueryBuilderMetaModelConst.js';
35
35
  import {
36
36
  buildNotExpression,
37
- getNonCollectionValueSpecificationType,
38
37
  isTypeCompatibleForAssignment,
39
38
  unwrapNotExpression,
40
39
  } from '../../QueryBuilderValueSpecificationHelper.js';
@@ -78,8 +77,9 @@ export class QueryBuilderFilterOperator_Equal
78
77
  filterConditionState: FilterConditionState,
79
78
  ): boolean {
80
79
  return isTypeCompatibleForAssignment(
81
- filterConditionState.value
82
- ? getNonCollectionValueSpecificationType(filterConditionState.value)
80
+ filterConditionState.rightConditionValue &&
81
+ !filterConditionState.rightConditionValue.isCollection
82
+ ? filterConditionState.rightConditionValue.type
83
83
  : undefined,
84
84
  filterConditionState.propertyExpressionState.propertyExpression.func.value
85
85
  .genericType.value.rawType,
@@ -110,7 +110,7 @@ export class QueryBuilderFilterOperator_Equal
110
110
  filterConditionState,
111
111
  filterConditionState.propertyExpressionState.propertyExpression.func.value
112
112
  .genericType.value.rawType.path === PRIMITIVE_TYPE.DATETIME &&
113
- filterConditionState.value?.genericType?.value.rawType.path !==
113
+ filterConditionState.rightConditionValue?.type?.path !==
114
114
  PRIMITIVE_TYPE.DATETIME
115
115
  ? QUERY_BUILDER_SUPPORTED_FUNCTIONS.IS_ON_DAY
116
116
  : QUERY_BUILDER_SUPPORTED_FUNCTIONS.EQUAL,
@@ -35,10 +35,7 @@ import {
35
35
  buildFilterConditionExpression,
36
36
  } from './QueryBuilderFilterOperatorValueSpecificationBuilder.js';
37
37
  import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graph/QueryBuilderMetaModelConst.js';
38
- import {
39
- getNonCollectionValueSpecificationType,
40
- isTypeCompatibleForAssignment,
41
- } from '../../QueryBuilderValueSpecificationHelper.js';
38
+ import { isTypeCompatibleForAssignment } from '../../QueryBuilderValueSpecificationHelper.js';
42
39
  import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../QueryBuilderStateHashUtils.js';
43
40
  import { buildDefaultInstanceValue } from '../../shared/ValueSpecificationEditorHelper.js';
44
41
 
@@ -73,8 +70,9 @@ export class QueryBuilderFilterOperator_GreaterThan
73
70
  filterConditionState: FilterConditionState,
74
71
  ): boolean {
75
72
  return isTypeCompatibleForAssignment(
76
- filterConditionState.value
77
- ? getNonCollectionValueSpecificationType(filterConditionState.value)
73
+ filterConditionState.rightConditionValue &&
74
+ !filterConditionState.rightConditionValue.isCollection
75
+ ? filterConditionState.rightConditionValue.type
78
76
  : undefined,
79
77
  filterConditionState.propertyExpressionState.propertyExpression.func.value
80
78
  .genericType.value.rawType,
@@ -121,7 +119,7 @@ export class QueryBuilderFilterOperator_GreaterThan
121
119
  filterConditionState,
122
120
  filterConditionState.propertyExpressionState.propertyExpression.func.value
123
121
  .genericType.value.rawType.path === PRIMITIVE_TYPE.DATETIME &&
124
- filterConditionState.value?.genericType?.value.rawType.path !==
122
+ filterConditionState.rightConditionValue?.type?.path !==
125
123
  PRIMITIVE_TYPE.DATETIME
126
124
  ? QUERY_BUILDER_SUPPORTED_FUNCTIONS.IS_AFTER_DAY
127
125
  : QUERY_BUILDER_SUPPORTED_FUNCTIONS.GREATER_THAN,
@@ -35,10 +35,7 @@ import {
35
35
  buildFilterConditionExpression,
36
36
  } from './QueryBuilderFilterOperatorValueSpecificationBuilder.js';
37
37
  import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graph/QueryBuilderMetaModelConst.js';
38
- import {
39
- getNonCollectionValueSpecificationType,
40
- isTypeCompatibleForAssignment,
41
- } from '../../QueryBuilderValueSpecificationHelper.js';
38
+ import { isTypeCompatibleForAssignment } from '../../QueryBuilderValueSpecificationHelper.js';
42
39
  import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../QueryBuilderStateHashUtils.js';
43
40
  import { buildDefaultInstanceValue } from '../../shared/ValueSpecificationEditorHelper.js';
44
41
 
@@ -73,8 +70,9 @@ export class QueryBuilderFilterOperator_GreaterThanEqual
73
70
  filterConditionState: FilterConditionState,
74
71
  ): boolean {
75
72
  return isTypeCompatibleForAssignment(
76
- filterConditionState.value
77
- ? getNonCollectionValueSpecificationType(filterConditionState.value)
73
+ filterConditionState.rightConditionValue &&
74
+ !filterConditionState.rightConditionValue.isCollection
75
+ ? filterConditionState.rightConditionValue.type
78
76
  : undefined,
79
77
  filterConditionState.propertyExpressionState.propertyExpression.func.value
80
78
  .genericType.value.rawType,
@@ -121,7 +119,7 @@ export class QueryBuilderFilterOperator_GreaterThanEqual
121
119
  filterConditionState,
122
120
  filterConditionState.propertyExpressionState.propertyExpression.func.value
123
121
  .genericType.value.rawType.path === PRIMITIVE_TYPE.DATETIME &&
124
- filterConditionState.value?.genericType?.value.rawType.path !==
122
+ filterConditionState.rightConditionValue?.type?.path !==
125
123
  PRIMITIVE_TYPE.DATETIME
126
124
  ? QUERY_BUILDER_SUPPORTED_FUNCTIONS.IS_ON_OR_AFTER_DAY
127
125
  : QUERY_BUILDER_SUPPORTED_FUNCTIONS.GREATER_THAN_EQUAL,
@@ -14,9 +14,10 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- import type {
18
- QueryBuilderFilterState,
19
- FilterConditionState,
17
+ import {
18
+ type QueryBuilderFilterState,
19
+ type FilterConditionState,
20
+ FilterValueSpecConditionValueState,
20
21
  } from '../QueryBuilderFilterState.js';
21
22
  import { QueryBuilderFilterOperator } from '../QueryBuilderFilterOperator.js';
22
23
  import {
@@ -81,51 +82,55 @@ export class QueryBuilderFilterOperator_In
81
82
  const propertyType =
82
83
  filterConditionState.propertyExpressionState.propertyExpression.func.value
83
84
  .genericType.value.rawType;
84
- const valueSpec = filterConditionState.value;
85
- if (valueSpec instanceof CollectionInstanceValue) {
86
- if (valueSpec.values.length === 0) {
87
- return true;
88
- }
89
- const collectionType = getCollectionValueSpecificationType(
90
- filterConditionState.filterState.queryBuilderState.graphManagerState
91
- .graph,
92
- valueSpec.values,
93
- );
94
- if (!collectionType) {
95
- return false;
96
- }
97
- if (
98
- (
99
- [
100
- PRIMITIVE_TYPE.NUMBER,
101
- PRIMITIVE_TYPE.INTEGER,
102
- PRIMITIVE_TYPE.DECIMAL,
103
- PRIMITIVE_TYPE.FLOAT,
104
- PRIMITIVE_TYPE.DATE,
105
- PRIMITIVE_TYPE.STRICTDATE,
106
- PRIMITIVE_TYPE.DATETIME,
107
- ] as string[]
108
- ).includes(propertyType.path)
109
- ) {
110
- return (
111
- [
112
- PRIMITIVE_TYPE.NUMBER,
113
- PRIMITIVE_TYPE.INTEGER,
114
- PRIMITIVE_TYPE.DECIMAL,
115
- PRIMITIVE_TYPE.FLOAT,
116
- PRIMITIVE_TYPE.DATE,
117
- PRIMITIVE_TYPE.STRICTDATE,
118
- PRIMITIVE_TYPE.DATETIME,
119
- ] as string[]
120
- ).includes(collectionType.path);
121
- }
122
- return collectionType === propertyType;
123
- } else if (valueSpec instanceof VariableExpression) {
124
- // check if not a single value
125
- if (valueSpec.multiplicity.upperBound === 1) {
126
- return false;
85
+ const rightSide = filterConditionState.rightConditionValue;
86
+ // `in`/`not in` does not support right hand value being column state as the multipliticy for columns are [0..1]
87
+ if (rightSide instanceof FilterValueSpecConditionValueState) {
88
+ const valueSpec = rightSide.value;
89
+ if (valueSpec instanceof CollectionInstanceValue) {
90
+ if (valueSpec.values.length === 0) {
91
+ return true;
92
+ }
93
+ const collectionType = getCollectionValueSpecificationType(
94
+ filterConditionState.filterState.queryBuilderState.graphManagerState
95
+ .graph,
96
+ valueSpec.values,
97
+ );
98
+ if (!collectionType) {
99
+ return false;
100
+ }
101
+ if (
102
+ (
103
+ [
104
+ PRIMITIVE_TYPE.NUMBER,
105
+ PRIMITIVE_TYPE.INTEGER,
106
+ PRIMITIVE_TYPE.DECIMAL,
107
+ PRIMITIVE_TYPE.FLOAT,
108
+ PRIMITIVE_TYPE.DATE,
109
+ PRIMITIVE_TYPE.STRICTDATE,
110
+ PRIMITIVE_TYPE.DATETIME,
111
+ ] as string[]
112
+ ).includes(propertyType.path)
113
+ ) {
114
+ return (
115
+ [
116
+ PRIMITIVE_TYPE.NUMBER,
117
+ PRIMITIVE_TYPE.INTEGER,
118
+ PRIMITIVE_TYPE.DECIMAL,
119
+ PRIMITIVE_TYPE.FLOAT,
120
+ PRIMITIVE_TYPE.DATE,
121
+ PRIMITIVE_TYPE.STRICTDATE,
122
+ PRIMITIVE_TYPE.DATETIME,
123
+ ] as string[]
124
+ ).includes(collectionType.path);
125
+ }
126
+ return collectionType === propertyType;
127
+ } else if (valueSpec instanceof VariableExpression) {
128
+ // check if not a single value
129
+ if (valueSpec.multiplicity.upperBound === 1) {
130
+ return false;
131
+ }
132
+ return propertyType === valueSpec.genericType?.value.rawType;
127
133
  }
128
- return propertyType === valueSpec.genericType?.value.rawType;
129
134
  }
130
135
  return false;
131
136
  }
@@ -69,7 +69,7 @@ export class QueryBuilderFilterOperator_IsEmpty
69
69
  isCompatibleWithFilterConditionValue(
70
70
  filterConditionState: FilterConditionState,
71
71
  ): boolean {
72
- return filterConditionState.value === undefined;
72
+ return filterConditionState.rightConditionValue === undefined;
73
73
  }
74
74
 
75
75
  getDefaultFilterConditionValue(
@@ -35,10 +35,7 @@ import {
35
35
  buildFilterConditionExpression,
36
36
  } from './QueryBuilderFilterOperatorValueSpecificationBuilder.js';
37
37
  import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graph/QueryBuilderMetaModelConst.js';
38
- import {
39
- getNonCollectionValueSpecificationType,
40
- isTypeCompatibleForAssignment,
41
- } from '../../QueryBuilderValueSpecificationHelper.js';
38
+ import { isTypeCompatibleForAssignment } from '../../QueryBuilderValueSpecificationHelper.js';
42
39
  import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../QueryBuilderStateHashUtils.js';
43
40
  import { buildDefaultInstanceValue } from '../../shared/ValueSpecificationEditorHelper.js';
44
41
 
@@ -73,8 +70,9 @@ export class QueryBuilderFilterOperator_LessThan
73
70
  filterConditionState: FilterConditionState,
74
71
  ): boolean {
75
72
  return isTypeCompatibleForAssignment(
76
- filterConditionState.value
77
- ? getNonCollectionValueSpecificationType(filterConditionState.value)
73
+ filterConditionState.rightConditionValue &&
74
+ !filterConditionState.rightConditionValue.isCollection
75
+ ? filterConditionState.rightConditionValue.type
78
76
  : undefined,
79
77
  filterConditionState.propertyExpressionState.propertyExpression.func.value
80
78
  .genericType.value.rawType,
@@ -121,7 +119,7 @@ export class QueryBuilderFilterOperator_LessThan
121
119
  filterConditionState,
122
120
  filterConditionState.propertyExpressionState.propertyExpression.func.value
123
121
  .genericType.value.rawType.path === PRIMITIVE_TYPE.DATETIME &&
124
- filterConditionState.value?.genericType?.value.rawType.path !==
122
+ filterConditionState.rightConditionValue?.type?.path !==
125
123
  PRIMITIVE_TYPE.DATETIME
126
124
  ? QUERY_BUILDER_SUPPORTED_FUNCTIONS.IS_BEFORE_DAY
127
125
  : QUERY_BUILDER_SUPPORTED_FUNCTIONS.LESS_THAN,
@@ -35,10 +35,7 @@ import {
35
35
  buildFilterConditionExpression,
36
36
  } from './QueryBuilderFilterOperatorValueSpecificationBuilder.js';
37
37
  import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graph/QueryBuilderMetaModelConst.js';
38
- import {
39
- getNonCollectionValueSpecificationType,
40
- isTypeCompatibleForAssignment,
41
- } from '../../QueryBuilderValueSpecificationHelper.js';
38
+ import { isTypeCompatibleForAssignment } from '../../QueryBuilderValueSpecificationHelper.js';
42
39
  import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../QueryBuilderStateHashUtils.js';
43
40
  import { buildDefaultInstanceValue } from '../../shared/ValueSpecificationEditorHelper.js';
44
41
 
@@ -73,8 +70,9 @@ export class QueryBuilderFilterOperator_LessThanEqual
73
70
  filterConditionState: FilterConditionState,
74
71
  ): boolean {
75
72
  return isTypeCompatibleForAssignment(
76
- filterConditionState.value
77
- ? getNonCollectionValueSpecificationType(filterConditionState.value)
73
+ filterConditionState.rightConditionValue &&
74
+ !filterConditionState.rightConditionValue.isCollection
75
+ ? filterConditionState.rightConditionValue.type
78
76
  : undefined,
79
77
  filterConditionState.propertyExpressionState.propertyExpression.func.value
80
78
  .genericType.value.rawType,
@@ -121,7 +119,7 @@ export class QueryBuilderFilterOperator_LessThanEqual
121
119
  filterConditionState,
122
120
  filterConditionState.propertyExpressionState.propertyExpression.func.value
123
121
  .genericType.value.rawType.path === PRIMITIVE_TYPE.DATETIME &&
124
- filterConditionState.value?.genericType?.value.rawType.path !==
122
+ filterConditionState.rightConditionValue?.type?.path !==
125
123
  PRIMITIVE_TYPE.DATETIME
126
124
  ? QUERY_BUILDER_SUPPORTED_FUNCTIONS.IS_ON_OR_BEFORE_DAY
127
125
  : QUERY_BUILDER_SUPPORTED_FUNCTIONS.LESS_THAN_EQUAL,
@@ -37,7 +37,6 @@ import {
37
37
  import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graph/QueryBuilderMetaModelConst.js';
38
38
  import {
39
39
  buildNotExpression,
40
- getNonCollectionValueSpecificationType,
41
40
  unwrapNotExpression,
42
41
  } from '../../QueryBuilderValueSpecificationHelper.js';
43
42
  import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../QueryBuilderStateHashUtils.js';
@@ -64,9 +63,11 @@ export class QueryBuilderFilterOperator_StartWith
64
63
  isCompatibleWithFilterConditionValue(
65
64
  filterConditionState: FilterConditionState,
66
65
  ): boolean {
67
- const type = filterConditionState.value
68
- ? getNonCollectionValueSpecificationType(filterConditionState.value)
69
- : undefined;
66
+ const type =
67
+ filterConditionState.rightConditionValue &&
68
+ !filterConditionState.rightConditionValue.isCollection
69
+ ? filterConditionState.rightConditionValue.type
70
+ : undefined;
70
71
  return PrimitiveType.STRING === type;
71
72
  }
72
73
 
@@ -43,16 +43,21 @@ import {
43
43
  buildRawLambdaFromLambdaFunction,
44
44
  getValueSpecificationReturnType,
45
45
  isSubType,
46
+ AbstractPropertyExpression,
47
+ PropertyExplicitReference,
46
48
  } from '@finos/legend-graph';
47
49
  import {
48
50
  Randomizer,
49
51
  UnsupportedOperationError,
50
52
  deepClone,
53
+ guaranteeNonNullable,
51
54
  returnUndefOnError,
52
55
  } from '@finos/legend-shared';
53
56
  import { generateDefaultValueForPrimitiveType } from '../QueryBuilderValueSpecificationHelper.js';
54
57
  import {
58
+ functionExpression_setParametersValues,
55
59
  instanceValue_setValues,
60
+ propertyExpression_setFunc,
56
61
  valueSpecification_setGenericType,
57
62
  } from './ValueSpecificationModifierHelper.js';
58
63
  import {
@@ -103,6 +108,29 @@ export const cloneValueSpecification = (
103
108
  return copy;
104
109
  };
105
110
 
111
+ export const cloneAbstractPropertyExpression = (
112
+ propertyExpression: AbstractPropertyExpression,
113
+ observerContext: ObserverContext,
114
+ ): AbstractPropertyExpression => {
115
+ const clonedPropertyExpression = new AbstractPropertyExpression(
116
+ propertyExpression.functionName,
117
+ );
118
+ propertyExpression_setFunc(
119
+ clonedPropertyExpression,
120
+ PropertyExplicitReference.create(
121
+ guaranteeNonNullable(propertyExpression.func.value),
122
+ ),
123
+ );
124
+ functionExpression_setParametersValues(
125
+ clonedPropertyExpression,
126
+ propertyExpression.parametersValues.map((param) =>
127
+ cloneValueSpecification(param, observerContext),
128
+ ),
129
+ observerContext,
130
+ );
131
+ return clonedPropertyExpression;
132
+ };
133
+
106
134
  export const createMockPrimitiveValueSpecification = (
107
135
  primitiveType: PrimitiveType,
108
136
  graph: PureModel,
package/tsconfig.json CHANGED
@@ -59,6 +59,7 @@
59
59
  "./src/components/QueryBuilderComponentElement.ts",
60
60
  "./src/components/QueryBuilder_LegendApplicationPlugin.ts",
61
61
  "./src/components/QuerySetupUtils.ts",
62
+ "./src/components/shared/QueryBuilderFilterHelper.ts",
62
63
  "./src/graph/QueryBuilderMetaModelConst.ts",
63
64
  "./src/graph-manager/QueryBuilderConfig.ts",
64
65
  "./src/graph-manager/QueryBuilderConst.ts",