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 b51faa88b3e kie-issues#1864: Renaming a Decision node using the Boxed 
Expression Editor makes DMN model invalid by breaking Decision Table (#2972)
b51faa88b3e is described below

commit b51faa88b3e529cacfd5bb1aa54ddddc05c9c845
Author: Daniel José dos Santos <[email protected]>
AuthorDate: Fri Mar 7 18:49:06 2025 -0300

    kie-issues#1864: Renaming a Decision node using the Boxed Expression Editor 
makes DMN model invalid by breaking Decision Table (#2972)
---
 .../src/contextMenu/PopoverMenu/PopoverMenu.tsx              | 11 ++++++++---
 .../src/expressionVariable/ExpressionVariableMenu.tsx        | 12 +++++-------
 packages/dmn-feel-antlr4-parser/src/parser/Expression.ts     |  4 +++-
 3 files changed, 16 insertions(+), 11 deletions(-)

diff --git 
a/packages/boxed-expression-component/src/contextMenu/PopoverMenu/PopoverMenu.tsx
 
b/packages/boxed-expression-component/src/contextMenu/PopoverMenu/PopoverMenu.tsx
index c6688736850..b0e813aa98a 100644
--- 
a/packages/boxed-expression-component/src/contextMenu/PopoverMenu/PopoverMenu.tsx
+++ 
b/packages/boxed-expression-component/src/contextMenu/PopoverMenu/PopoverMenu.tsx
@@ -119,10 +119,15 @@ export const PopoverMenu = React.forwardRef(
 
     const onHideCallback: PopoverProps["onHide"] = useCallback(
       (tip): void => {
-        onHide();
-        setCurrentlyOpenContextMenu(undefined);
+        // This validation is to prevent this code of being called twice, 
because if the user clicks outside the
+        // Boxed Expression component the onHide() is called again by the 
Popover which is listen to clicks
+        // on the document to close all opened popups.
+        if (currentlyOpenContextMenu) {
+          onHide();
+          setCurrentlyOpenContextMenu(undefined);
+        }
       },
-      [onHide, setCurrentlyOpenContextMenu]
+      [currentlyOpenContextMenu, onHide, setCurrentlyOpenContextMenu]
     );
 
     useImperativeHandle(
diff --git 
a/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx
 
b/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx
index 0664da443cf..0a726e2f176 100644
--- 
a/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx
+++ 
b/packages/boxed-expression-component/src/expressionVariable/ExpressionVariableMenu.tsx
@@ -153,12 +153,7 @@ export function ExpressionVariableMenu({
     }
     saveExpression();
     popoverMenuRef?.current?.setIsVisible(false);
-    // We reset the expression name to its default because the name change 
could be canceled outside.
-    // If we don't reset it, we will keep it an outdated name.
-    // If the change is confirmed, then the selectExpressionName will be 
updated to the new one in the next
-    // render of this component.
-    setExpressionName(selectedExpressionName);
-  }, [saveExpression, selectedExpressionName]);
+  }, [saveExpression]);
 
   const onCancel = useCallback(() => {
     cancelEdit.current = true;
@@ -167,8 +162,11 @@ export function ExpressionVariableMenu({
   }, [resetFormData]);
 
   const onShown = useCallback(() => {
+    // We need to refresh the expression name from the selectedExpressionName,
+    // otherwise it will show the older name set in expressionName.
+    setExpressionName(selectedExpressionName);
     expressionNameRef.current?.focus();
-  }, []);
+  }, [selectedExpressionName]);
 
   const onKeyDown = useCallback(
     (e: React.KeyboardEvent) => {
diff --git a/packages/dmn-feel-antlr4-parser/src/parser/Expression.ts 
b/packages/dmn-feel-antlr4-parser/src/parser/Expression.ts
index edce40687b5..de2369e30d1 100644
--- a/packages/dmn-feel-antlr4-parser/src/parser/Expression.ts
+++ b/packages/dmn-feel-antlr4-parser/src/parser/Expression.ts
@@ -35,7 +35,9 @@ export class Expression {
   }
 
   public applyChangesToExpressionSource() {
-    this.source.text = { __$$text: this._fullExpression };
+    if (this.source.text) {
+      this.source.text = { __$$text: this._fullExpression };
+    }
   }
 
   public renameIdentifier(identifier: Identifier, newName: String) {


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

Reply via email to