This is an automated email from the ASF dual-hosted git repository.

tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new 04d5728ea68 kie-issues#1020: Adds missing features from previous #2244 
 (#2253)
04d5728ea68 is described below

commit 04d5728ea68eaf2bd8d62fbbaffc4dea27fadc8f
Author: Luiz João Motta <[email protected]>
AuthorDate: Mon Apr 22 10:45:34 2024 -0300

    kie-issues#1020: Adds missing features from previous #2244  (#2253)
---
 packages/dmn-editor/src/dataTypes/Constraints.tsx  | 60 +++++++++++-----------
 .../dmn-editor/src/dataTypes/DataTypePanel.tsx     |  5 +-
 packages/dmn-editor/src/dataTypes/DataTypeSpec.ts  |  9 +++-
 3 files changed, 39 insertions(+), 35 deletions(-)

diff --git a/packages/dmn-editor/src/dataTypes/Constraints.tsx 
b/packages/dmn-editor/src/dataTypes/Constraints.tsx
index 32f96a75c37..8f3579b6d4f 100644
--- a/packages/dmn-editor/src/dataTypes/Constraints.tsx
+++ b/packages/dmn-editor/src/dataTypes/Constraints.tsx
@@ -30,7 +30,7 @@ import { ConstraintsRange, isRange } from 
"./ConstraintsRange";
 import { KIE__tConstraintType } from 
"@kie-tools/dmn-marshaller/dist/schemas/kie-1_0/ts-gen/types";
 import { EditItemDefinition } from "./DataTypes";
 import { ToggleGroup, ToggleGroupItem } from 
"@patternfly/react-core/dist/js/components/ToggleGroup";
-import { canHaveConstraints, constrainableBuiltInFeelTypes } from 
"./DataTypeSpec";
+import { constrainableBuiltInFeelTypes } from "./DataTypeSpec";
 import moment from "moment";
 import { TextInput } from 
"@patternfly/react-core/dist/js/components/TextInput";
 import { ConstraintDate } from "./ConstraintComponents/ConstraintDate";
@@ -252,17 +252,16 @@ export const constraintTypeHelper = (typeRef: 
DmnBuiltInDataType): TypeHelper =>
 export function useConstraint({
   constraint,
   itemDefinition,
-  isEnumDisabled,
-  isRangeDisabled,
+  isCollectionConstraintEnable,
 }: {
   constraint: DMN15__tUnaryTests | undefined;
   itemDefinition: DMN15__tItemDefinition;
-  isEnumDisabled: boolean;
-  isRangeDisabled: boolean;
+  isCollectionConstraintEnable: boolean;
 }) {
   const constraintValue = useMemo(() => constraint?.text.__$$text, 
[constraint?.text.__$$text]);
-
   const kieConstraintType = useMemo(() => 
constraint?.["@_kie:constraintType"], [constraint]);
+  const isCollection = useMemo(() => itemDefinition["@_isCollection"] ?? 
false, [itemDefinition]);
+  const itemDefinitionId = useMemo(() => itemDefinition["@_id"], 
[itemDefinition]);
 
   const typeRef: DmnBuiltInDataType = useMemo(
     () => (itemDefinition?.typeRef?.__$$text as DmnBuiltInDataType) ?? 
DmnBuiltInDataType.Undefined,
@@ -270,17 +269,21 @@ export function useConstraint({
   );
 
   const isConstraintEnum = useMemo(
-    () => (isEnumDisabled ? undefined : isEnum(constraintValue, 
constraintTypeHelper(typeRef).check)),
-    [constraintValue, isEnumDisabled, typeRef]
+    () =>
+      isCollection === true && isCollectionConstraintEnable === true // 
collection doesn't support enumeration constraint
+        ? undefined
+        : isEnum(constraintValue, constraintTypeHelper(typeRef).check),
+    [constraintValue, isCollectionConstraintEnable, isCollection, typeRef]
   );
 
   const isConstraintRange = useMemo(
-    () => (isRangeDisabled ? undefined : isRange(constraintValue, 
constraintTypeHelper(typeRef).check)),
-    [constraintValue, isRangeDisabled, typeRef]
+    () =>
+      isCollection === true && isCollectionConstraintEnable === true // 
collection doesn't support range constraint
+        ? undefined
+        : isRange(constraintValue, constraintTypeHelper(typeRef).check),
+    [constraintValue, isCollectionConstraintEnable, isCollection, typeRef]
   );
 
-  const itemDefinitionId = useMemo(() => itemDefinition["@_id"], 
[itemDefinition]);
-
   const enumToKieConstraintType: (selection: ConstraintsType) => 
KIE__tConstraintType | undefined = useCallback(
     (selection) => {
       switch (selection) {
@@ -302,11 +305,16 @@ export function useConstraint({
     const enabledConstraints = constrainableBuiltInFeelTypes.get(typeRef);
     return {
       enumeration:
-        !isEnumDisabled && (enabledConstraints ?? 
[]).includes(enumToKieConstraintType(ConstraintsType.ENUMERATION)!),
-      range: !isRangeDisabled && (enabledConstraints ?? 
[]).includes(enumToKieConstraintType(ConstraintsType.RANGE)!),
-      expression: (enabledConstraints ?? 
[]).includes(enumToKieConstraintType(ConstraintsType.EXPRESSION)!),
+        !(isCollection === true && isCollectionConstraintEnable === true) &&
+        (enabledConstraints ?? 
[]).includes(enumToKieConstraintType(ConstraintsType.ENUMERATION)!),
+      range:
+        !(isCollection === true && isCollectionConstraintEnable === true) &&
+        (enabledConstraints ?? 
[]).includes(enumToKieConstraintType(ConstraintsType.RANGE)!),
+      expression:
+        (isCollection === true && isCollectionConstraintEnable === true) ||
+        (enabledConstraints ?? 
[]).includes(enumToKieConstraintType(ConstraintsType.EXPRESSION)!),
     };
-  }, [enumToKieConstraintType, isEnumDisabled, isRangeDisabled, typeRef]);
+  }, [typeRef, isCollection, isCollectionConstraintEnable, 
enumToKieConstraintType]);
 
   const selectedConstraint = useMemo<ConstraintsType>(() => {
     if (isConstraintEnabled.enumeration && kieConstraintType === 
"enumeration") {
@@ -365,8 +373,6 @@ export function ConstraintsFromAllowedValuesAttribute({
   isReadonly,
   itemDefinition,
   editItemDefinition,
-  isEnumDisabled,
-  isRangeDisabled,
 }: {
   isReadonly: boolean;
   itemDefinition: DMN15__tItemDefinition;
@@ -388,8 +394,7 @@ export function ConstraintsFromAllowedValuesAttribute({
   } = useConstraint({
     constraint: allowedValues,
     itemDefinition,
-    isEnumDisabled: isEnumDisabled ?? false,
-    isRangeDisabled: isRangeDisabled ?? false,
+    isCollectionConstraintEnable: false, // allowedValues doesn't support 
constraint to the collection itself
   });
 
   const onConstraintChange = useCallback(
@@ -480,15 +485,11 @@ export function ConstraintsFromTypeConstraintAttribute({
   itemDefinition,
   editItemDefinition,
   defaultsToAllowedValues,
-  isEnumDisabled,
-  isRangeDisabled,
 }: {
   isReadonly: boolean;
   itemDefinition: DMN15__tItemDefinition;
   editItemDefinition: EditItemDefinition;
   defaultsToAllowedValues: boolean;
-  isEnumDisabled?: boolean;
-  isRangeDisabled?: boolean;
 }) {
   const typeConstraint = useMemo(
     () =>
@@ -510,8 +511,7 @@ export function ConstraintsFromTypeConstraintAttribute({
   } = useConstraint({
     constraint: typeConstraint,
     itemDefinition,
-    isEnumDisabled: isEnumDisabled ?? false,
-    isRangeDisabled: isRangeDisabled ?? false,
+    isCollectionConstraintEnable: true, // typeConstraint enables to add a 
constraint to the collection itself
   });
 
   const onConstraintChange = useCallback(
@@ -627,7 +627,9 @@ export function Constraints({
 }) {
   return (
     <>
-      {!canHaveConstraints(itemDefinition) ? (
+      {isConstraintEnabled.expression === false &&
+      isConstraintEnabled.enumeration === false &&
+      isConstraintEnabled.range === false ? (
         <p
           style={{
             padding: "10px",
@@ -654,7 +656,7 @@ export function Constraints({
                 buttonId={ConstraintsType.EXPRESSION}
                 isSelected={selectedConstraint === ConstraintsType.EXPRESSION}
                 onChange={onToggleGroupChange}
-                isDisabled={isReadonly}
+                isDisabled={isReadonly || !isConstraintEnabled.expression}
               />
               <ToggleGroupItem
                 text={ConstraintsType.ENUMERATION}
@@ -703,7 +705,7 @@ export function Constraints({
                 value={constraintValue}
                 savedValue={constraintValue}
                 onSave={onConstraintChange}
-                isDisabled={false}
+                isDisabled={!isConstraintEnabled.expression}
               />
             )}
             {selectedConstraint === ConstraintsType.NONE && (
diff --git a/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx 
b/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx
index fbaf41153f4..9279932c753 100644
--- a/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx
+++ b/packages/dmn-editor/src/dataTypes/DataTypePanel.tsx
@@ -109,6 +109,7 @@ export function DataTypePanel({
                 ...itemDefinition.allowedValues,
               }
             : undefined;
+          itemDefinition.allowedValues = undefined;
         }
       });
     },
@@ -357,10 +358,8 @@ export function DataTypePanel({
               typeRef={resolvedTypeRef}
               onChange={changeTypeRef}
             />
-
             <br />
             <br />
-
             {dataType.itemDefinition["@_isCollection"] === true ? (
               <>
                 <Title size={"md"} headingLevel="h4">
@@ -371,8 +370,6 @@ export function DataTypePanel({
                   itemDefinition={dataType.itemDefinition}
                   editItemDefinition={editItemDefinition}
                   defaultsToAllowedValues={false}
-                  isEnumDisabled={true}
-                  isRangeDisabled={true}
                 />
                 <br />
                 <br />
diff --git a/packages/dmn-editor/src/dataTypes/DataTypeSpec.ts 
b/packages/dmn-editor/src/dataTypes/DataTypeSpec.ts
index 46f53a92178..1525d4ccec3 100644
--- a/packages/dmn-editor/src/dataTypes/DataTypeSpec.ts
+++ b/packages/dmn-editor/src/dataTypes/DataTypeSpec.ts
@@ -75,6 +75,10 @@ export function getNewItemDefinition(partial?: 
Partial<DMN15__tItemDefinition>)
   };
 }
 
+export function isCollection(itemDefinition: DMN15__tItemDefinition) {
+  return itemDefinition["@_isCollection"] ?? false;
+}
+
 export function isStruct(itemDefinition: DMN15__tItemDefinition) {
   return !itemDefinition.typeRef && !!itemDefinition.itemComponent;
 }
@@ -94,8 +98,9 @@ export const constrainableBuiltInFeelTypes = new 
Map<DmnBuiltInDataType, KIE__tC
 
 export function canHaveConstraints(itemDefinition: DMN15__tItemDefinition) {
   return (
-    !isStruct(itemDefinition) &&
-    (constrainableBuiltInFeelTypes.get(itemDefinition.typeRef?.__$$text as 
DmnBuiltInDataType)?.length ?? 0) > 0
+    isCollection(itemDefinition) ||
+    (!isStruct(itemDefinition) &&
+      (constrainableBuiltInFeelTypes.get(itemDefinition.typeRef?.__$$text as 
DmnBuiltInDataType)?.length ?? 0) > 0)
   );
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to