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 6a6af33652a NO-ISSUE: New Test Scenario Editor can't assign "value" 
property after assigning Instance column (#2997)
6a6af33652a is described below

commit 6a6af33652ad67ec33672401e3dca788a09bf9f2
Author: Luiz João Motta <[email protected]>
AuthorDate: Thu Mar 13 11:36:05 2025 -0300

    NO-ISSUE: New Test Scenario Editor can't assign "value" property after 
assigning Instance column (#2997)
---
 .../drawer/TestScenarioDrawerDataSelectorPanel.tsx | 110 ++++++++++++---------
 1 file changed, 66 insertions(+), 44 deletions(-)

diff --git 
a/packages/scesim-editor/src/drawer/TestScenarioDrawerDataSelectorPanel.tsx 
b/packages/scesim-editor/src/drawer/TestScenarioDrawerDataSelectorPanel.tsx
index 46785184a04..f22f41ed9c1 100644
--- a/packages/scesim-editor/src/drawer/TestScenarioDrawerDataSelectorPanel.tsx
+++ b/packages/scesim-editor/src/drawer/TestScenarioDrawerDataSelectorPanel.tsx
@@ -85,6 +85,9 @@ function filterOutDataObjectChildrenByExpressionElements(
     });
   }
 
+  if (dataObject.children === undefined && dataObject.name === "value") {
+    return !allExpressionElements.includes(dataObject.id);
+  }
   return 
!allExpressionElements.includes(dataObject.expressionElements.join("."));
 }
 
@@ -151,6 +154,14 @@ function findTestScenarioDataObjectById(
   return undefined;
 }
 
+interface TestScenarioTreeViewDataItem extends TreeViewDataItem {
+  id: string;
+  expressionElements: string[];
+  className?: string;
+  collectionGenericType?: string[];
+  children?: TestScenarioTreeViewDataItem[];
+}
+
 function TestScenarioDataSelectorPanel() {
   const { i18n } = useTestScenarioEditorI18n();
   const { externalModelsByNamespace } = useExternalModels();
@@ -173,7 +184,7 @@ function TestScenarioDataSelectorPanel() {
   const [dataSelectorStatus, setDataSelectorStatus] = 
useState(TestScenarioDataSelectorState.DISABLED);
   const [filteredItems, setFilteredItems] = useState(dataObjects);
   const [treeViewStatus, setTreeViewStatus] = useState({
-    activeItems: [] as TreeViewDataItem[],
+    activeItems: [] as TestScenarioTreeViewDataItem[],
     searchKey: "",
     isExpanded: false,
   });
@@ -184,43 +195,54 @@ function TestScenarioDataSelectorPanel() {
       const testScenarioDescriptor = isBackground
         ? scesimModel.ScenarioSimulationModel.background.scesimModelDescriptor
         : scesimModel.ScenarioSimulationModel.simulation.scesimModelDescriptor;
-      const assignedExpressionElements = 
testScenarioDescriptor.factMappings.FactMapping!.map(
-        (factMapping) => factMapping.expressionElements!
+      const assignedExpressionElements = 
(testScenarioDescriptor.factMappings.FactMapping ?? []).reduce(
+        (acc: SceSim__expressionElementsType[], factMapping) =>
+          factMapping.expressionElements ? [...acc, 
factMapping.expressionElements] : acc,
+        []
       );
 
-      const assignedIds = testScenarioDescriptor.factMappings
-        .FactMapping!.filter(
-          (factMapping) => factMapping.expressionElements && 
factMapping.expressionElements.ExpressionElement
-        )
-        .map((factMapping) =>
-          factMapping
-            .expressionElements!.ExpressionElement!.map((expressionElement) => 
expressionElement.step.__$$text)
-            .join(".")
-        )
-        .filter((ee) => ee);
-
-      let filteredDataObjects: TestScenarioDataObject[] = [];
+      const assignedIds = (testScenarioDescriptor.factMappings.FactMapping ?? 
[])
+        .filter((factMapping) => factMapping.expressionElements && 
factMapping.expressionElements.ExpressionElement)
+        .reduce((assignedIds, factMapping) => {
+          const assignedId = 
(factMapping.expressionElements?.ExpressionElement ?? [])
+            .map((expressionElement) => {
+              if (factMapping.expressionAlias?.__$$text === "value") {
+                return `${expressionElement.step.__$$text}.value`;
+              }
+              return expressionElement.step.__$$text;
+            })
+            .join(".");
+
+          // parent
+          if (factMapping.factIdentifier.name?.__$$text) {
+            assignedIds.add(factMapping.factIdentifier.name.__$$text);
+          }
+          assignedIds.add(assignedId);
+          return assignedIds;
+        }, new Set<string>());
 
       // An Empty column has been selected. Filtering out all assigined 
Instances
       if (
         !selectedColumnExpressionElement?.ExpressionElement ||
         selectedColumnExpressionElement?.ExpressionElement?.length === 0
       ) {
-        filteredDataObjects = dataObjects
+        return dataObjects
           .map((object) => cloneDeep(object)) // Deep copy: the Objects may 
mutate due to children filtering
           .filter((dataObject) => isRootDataObjectAssignable(dataObject, 
assignedExpressionElements));
-      } else {
-        // In case of not empty column, it keeps the selected root Fact 
Mapping (Instance) and then filtering out the already
-        // assigned children Data Objects.
-        filteredDataObjects = dataObjects
-          .map((object) => cloneDeep(object)) // Deep copy: the Objects may 
mutate due to children filtering
-          .filter((dataObject) => !isRootDataObjectAssignable(dataObject, 
[selectedColumnExpressionElement]));
-        filteredDataObjects.filter((dataObject) =>
-          filterOutDataObjectChildrenByExpressionElements(dataObject, 
assignedIds)
-        );
       }
 
-      return filteredDataObjects;
+      // In case of not empty column, it keeps the selected root Fact Mapping 
(Instance) and then filtering out the already
+      // assigned children Data Objects.
+      return dataObjects
+        .map((object) => cloneDeep(object)) // Deep copy: the Objects may 
mutate due to children filtering
+        .filter((dataObject) => !isRootDataObjectAssignable(dataObject, 
[selectedColumnExpressionElement]))
+        .reduce((acc, dataObject) => {
+          filterOutDataObjectChildrenByExpressionElements(dataObject, 
[...assignedIds]);
+          if (dataObject.children?.length === 0 && 
assignedIds.has(dataObject.id)) {
+            return acc;
+          }
+          return [...acc, dataObject];
+        }, []);
     },
     [dataObjects, scesimModel.ScenarioSimulationModel]
   );
@@ -362,25 +384,25 @@ function TestScenarioDataSelectorPanel() {
       };
     }
 
-    const oneActiveTreeViewItem = treeViewStatus.activeItems.length === 1;
     if (!treeViewStatus.activeItems === undefined || 
treeViewStatus.activeItems.length !== 1) {
-      return { message: 
i18n.drawer.dataSelector.insertDataObjectTooltipDataObjectSelectionMessage, 
enabled: false };
+      return {
+        message: 
i18n.drawer.dataSelector.insertDataObjectTooltipDataObjectSelectionMessage,
+        enabled: false,
+      };
     }
-    const activeItem = treeViewStatus.activeItems[0] as TestScenarioDataObject;
-    const expressionElement = 
selectedColumnMetadata.factMapping.expressionElements!;
-    const assegnedDataObjects: TestScenarioDataObject[] = 
filterOutAlreadyAssignedDataObjectsAndChildren(
-      expressionElement,
+    const activeItem = treeViewStatus.activeItems[0];
+    const unassignedDataObjects = 
filterOutAlreadyAssignedDataObjectsAndChildren(
+      selectedColumnMetadata.factMapping.expressionElements,
       selectedColumnMetadata.isBackground
     );
 
-    const isActiveItemMiddleDataObject: boolean =
-      activeItem?.children != null && activeItem.children.length > 0 && 
activeItem.expressionElements.length > 1;
-
-    const isAssignabile =
-      !isActiveItemMiddleDataObject &&
-      findTestScenarioDataObjectById(assegnedDataObjects, activeItem.id!) !== 
undefined;
+    const isAssignable =
+      (activeItem.children !== undefined &&
+        activeItem.children.length > 0 &&
+        activeItem.expressionElements.length > 1) === false &&
+      findTestScenarioDataObjectById(unassignedDataObjects, activeItem.id) !== 
undefined;
 
-    if (oneActiveTreeViewItem && !isAssignabile) {
+    if (treeViewStatus.activeItems.length === 1 && isAssignable === false) {
       return {
         message: 
i18n.drawer.dataSelector.insertDataObjectTooltipDataObjectAlreadyAssignedMessage,
         enabled: false,
@@ -395,16 +417,16 @@ function TestScenarioDataSelectorPanel() {
   }, []);
 
   const onInsertDataObjectClick = useCallback(() => {
-    const userSelectedTestScenarioObject = treeViewStatus.activeItems[0] as 
TestScenarioDataObject;
+    const userSelectedTestScenarioObject = treeViewStatus.activeItems[0];
 
-    if (!userSelectedTestScenarioObject) {
-      console.warn("No Data Object selected in the item view.");
+    if (userSelectedTestScenarioObject === undefined) {
+      console.error("No Data Object selected in the item view.");
       return;
     }
 
     const rootSelectedTestScenarioDataObject = findDataObjectRootParent(
       dataObjects,
-      treeViewStatus.activeItems[0].id!.toString()
+      treeViewStatus.activeItems[0].id.toString()
     );
     const isBackground = selectedColumnMetadata!.isBackground;
     const isRootType = rootSelectedTestScenarioDataObject.id === 
userSelectedTestScenarioObject.id;
@@ -466,7 +488,7 @@ function TestScenarioDataSelectorPanel() {
     []
   );
 
-  const onSelectTreeViewItem = useCallback((_event, treeViewItem: 
TreeViewDataItem) => {
+  const onSelectTreeViewItem = useCallback((_event, treeViewItem: 
TestScenarioTreeViewDataItem) => {
     setTreeViewStatus((prev) => {
       return {
         ...prev,


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

Reply via email to