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 66a789ec3e5 kie-issues#889: DMN Editor: Moving or resizing a Decision
contained by a Decision Service (#3157)
66a789ec3e5 is described below
commit 66a789ec3e534ad633b78d47119361e22f9169cb
Author: Aswathi <[email protected]>
AuthorDate: Thu May 29 19:28:25 2025 +0530
kie-issues#889: DMN Editor: Moving or resizing a Decision contained by a
Decision Service (#3157)
Co-authored-by: Aswathi T V <[email protected]>
---
packages/dmn-editor/src/diagram/Diagram.tsx | 52 +++++++++++++
packages/dmn-editor/src/diagram/nodes/Nodes.tsx | 3 +-
.../Google-Chrome/drds/repositioned-decision.png | Bin 0 -> 30344 bytes
.../Google-Chrome/drds/resized-decision.png | Bin 0 -> 30341 bytes
.../chromium/drds/repositioned-decision.png | Bin 0 -> 30865 bytes
.../chromium/drds/resized-decision.png | Bin 0 -> 30920 bytes
.../webkit/drds/repositioned-decision.png | Bin 0 -> 32242 bytes
.../webkit/drds/resized-decision.png | Bin 0 -> 32184 bytes
.../drds/modelDecisionServicesInDrds.spec.ts | 86 +++++++++++++++++++++
9 files changed, 140 insertions(+), 1 deletion(-)
diff --git a/packages/dmn-editor/src/diagram/Diagram.tsx
b/packages/dmn-editor/src/diagram/Diagram.tsx
index 8724cf519e9..b815a229bf3 100644
--- a/packages/dmn-editor/src/diagram/Diagram.tsx
+++ b/packages/dmn-editor/src/diagram/Diagram.tsx
@@ -131,6 +131,7 @@ import { useSettings } from
"../settings/DmnEditorSettingsContext";
import { EvaluationHighlightsBadge } from
"../evaluationHighlights/EvaluationHighlightsBadge";
import { Flex } from "@patternfly/react-core/dist/js/layouts/Flex";
import { Text } from "@patternfly/react-core/dist/js/components/Text";
+import { computeIndexedDrd } from "../store/computed/computeIndexes";
const isFirefox = typeof (window as any).InstallTrigger !== "undefined"; //
See
https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browsers
@@ -787,6 +788,31 @@ export const Diagram = React.forwardRef<DiagramRef, {
container: React.RefObject
},
},
});
+ if (node.type === NODE_TYPES.decision &&
node.data.parentRfNode) {
+ const dsContainingDecision = node.data.parentRfNode;
+ const drds =
state.dmn.model.definitions["dmndi:DMNDI"]?.["dmndi:DMNDiagram"] ?? [];
+ for (let i = 0; i < drds.length; i++) {
+ if (i === state.computed(state).getDrdIndex()) {
+ continue;
+ }
+ const _indexedDrd = computeIndexedDrd(
+ state.dmn.model.definitions["@_namespace"],
+ state.dmn.model.definitions,
+ i
+ );
+ const dsShapeContainingDecision =
_indexedDrd.dmnShapesByHref.get(dsContainingDecision.id);
+ const dsShape =
_indexedDrd.dmnShapesByHref.get(node.id);
+ if (
+ dsShapeContainingDecision &&
+ dsShape &&
+ dsShape["dc:Bounds"] &&
+ !dsShapeContainingDecision["@_isCollapsed"]
+ ) {
+ dsShape["dc:Bounds"]["@_width"] =
change.dimensions?.width ?? 0;
+ dsShape["dc:Bounds"]["@_height"] =
change.dimensions?.height ?? 0;
+ }
+ }
+ }
}
}
break;
@@ -867,6 +893,32 @@ export const Diagram = React.forwardRef<DiagramRef, {
container: React.RefObject
});
}
}
+ if (node.type === NODE_TYPES.decision &&
node.data.parentRfNode) {
+ const parentDecisionService = node.data.parentRfNode;
+ const drds =
state.dmn.model.definitions["dmndi:DMNDI"]?.["dmndi:DMNDiagram"] ?? [];
+ for (let i = 0; i < drds.length; i++) {
+ if (i === state.computed(state).getDrdIndex()) {
+ continue;
+ }
+ const _indexedDrd = computeIndexedDrd(
+ state.dmn.model.definitions["@_namespace"],
+ state.dmn.model.definitions,
+ i
+ );
+ const parentShape =
_indexedDrd.dmnShapesByHref.get(parentDecisionService.id);
+ const dsShape = _indexedDrd.dmnShapesByHref.get(node.id);
+ const relativePosinCurrentDS = {
+ x: (change.position?.x ?? 0) -
(parentDecisionService?.data?.shape["dc:Bounds"]?.["@_x"] ?? 0),
+ y: (change.position?.y ?? 0) -
(parentDecisionService.data.shape["dc:Bounds"]?.["@_y"] ?? 0),
+ };
+ if (parentShape && dsShape && dsShape["dc:Bounds"] &&
!parentShape["@_isCollapsed"]) {
+ dsShape["dc:Bounds"]["@_x"] =
+ (parentShape["dc:Bounds"]?.["@_x"] ?? 0) +
relativePosinCurrentDS.x;
+ dsShape["dc:Bounds"]["@_y"] =
+ (parentShape["dc:Bounds"]?.["@_y"] ?? 0) +
relativePosinCurrentDS.y;
+ }
+ }
+ }
}
break;
case "remove":
diff --git a/packages/dmn-editor/src/diagram/nodes/Nodes.tsx
b/packages/dmn-editor/src/diagram/nodes/Nodes.tsx
index 8888f179a5c..e0a21079623 100644
--- a/packages/dmn-editor/src/diagram/nodes/Nodes.tsx
+++ b/packages/dmn-editor/src/diagram/nodes/Nodes.tsx
@@ -1005,7 +1005,8 @@ export const DecisionServiceNode = React.memo(
"@_y":
dropPoint.y +
(decisionShapeOnOtherDrd["dc:Bounds"]!["@_y"] -
dsShapeOnOtherDrd["dc:Bounds"]!["@_y"]),
- ...minNodeSize,
+ "@_width":
decisionShapeOnOtherDrd["dc:Bounds"]!["@_width"],
+ "@_height":
decisionShapeOnOtherDrd["dc:Bounds"]!["@_height"],
},
},
});
diff --git
a/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/repositioned-decision.png
b/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/repositioned-decision.png
new file mode 100644
index 00000000000..f7a14634237
Binary files /dev/null and
b/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/repositioned-decision.png
differ
diff --git
a/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/resized-decision.png
b/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/resized-decision.png
new file mode 100644
index 00000000000..3aee047f52f
Binary files /dev/null and
b/packages/dmn-editor/tests-e2e/__screenshots__/Google-Chrome/drds/resized-decision.png
differ
diff --git
a/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/repositioned-decision.png
b/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/repositioned-decision.png
new file mode 100644
index 00000000000..b010a44933b
Binary files /dev/null and
b/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/repositioned-decision.png
differ
diff --git
a/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/resized-decision.png
b/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/resized-decision.png
new file mode 100644
index 00000000000..b4af92bc664
Binary files /dev/null and
b/packages/dmn-editor/tests-e2e/__screenshots__/chromium/drds/resized-decision.png
differ
diff --git
a/packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/repositioned-decision.png
b/packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/repositioned-decision.png
new file mode 100644
index 00000000000..60bfd9a7ed2
Binary files /dev/null and
b/packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/repositioned-decision.png
differ
diff --git
a/packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/resized-decision.png
b/packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/resized-decision.png
new file mode 100644
index 00000000000..4acce6a8504
Binary files /dev/null and
b/packages/dmn-editor/tests-e2e/__screenshots__/webkit/drds/resized-decision.png
differ
diff --git
a/packages/dmn-editor/tests-e2e/drds/modelDecisionServicesInDrds.spec.ts
b/packages/dmn-editor/tests-e2e/drds/modelDecisionServicesInDrds.spec.ts
index 80140760552..ac8c7a83641 100644
--- a/packages/dmn-editor/tests-e2e/drds/modelDecisionServicesInDrds.spec.ts
+++ b/packages/dmn-editor/tests-e2e/drds/modelDecisionServicesInDrds.spec.ts
@@ -235,6 +235,92 @@ test.describe("Model Decision Services - DRD", () => {
await
expect(diagram.get()).toHaveScreenshot("decision-service-from-other-drd.png");
});
+ test("Resizing decision contained by decision service should resize it in
all DRDs", async ({
+ drds,
+ drgNodes,
+ palette,
+ nodes,
+ diagram,
+ }) => {
+ test.info().annotations.push({
+ type: TestAnnotations.REGRESSION,
+ description: "https://github.com/apache/incubator-kie-issues/issues/889",
+ });
+ await drds.toggle();
+ await drds.create({ name: "First DRD" });
+ await drgNodes.toggle();
+
+ await palette.dragNewNode({
+ type: NodeType.DECISION_SERVICE,
+ targetPosition: { x: 400, y: 200 },
+ thenRenameTo: "DS1",
+ });
+ await expect(nodes.get({ name: "DS1" })).toBeAttached();
+
+ await palette.dragNewNode({
+ type: NodeType.DECISION,
+ targetPosition: { x: 200, y: 200 },
+ thenRenameTo: "D1",
+ });
+ await expect(nodes.get({ name: "D1" })).toBeAttached();
+
+ await nodes.move({ name: "D1", targetPosition: { x: 500, y: 300 } });
+ await expect(nodes.get({ name: "D1" })).toBeAttached();
+ await drds.toggle();
+ await drds.create({ name: "Second DRD" });
+ await drgNodes.dragNode({ name: "DS1", targetPosition: { x: 400, y: 200 }
});
+
+ await drgNodes.toggle();
+ await nodes.resize({ nodeName: "D1", xOffset: 50, yOffset: 0 });
+ await drds.toggle();
+ await drds.navigateTo({ name: "First DRD" });
+ await drds.toggle();
+ await expect(diagram.get()).toHaveScreenshot("resized-decision.png");
+ });
+
+ test("Moving decision contained by decision service should move it in all
DRDs", async ({
+ drds,
+ drgNodes,
+ palette,
+ nodes,
+ diagram,
+ }) => {
+ test.info().annotations.push({
+ type: TestAnnotations.REGRESSION,
+ description: "https://github.com/apache/incubator-kie-issues/issues/889",
+ });
+ await drds.toggle();
+ await drds.create({ name: "First DRD" });
+ await drgNodes.toggle();
+
+ await palette.dragNewNode({
+ type: NodeType.DECISION_SERVICE,
+ targetPosition: { x: 400, y: 200 },
+ thenRenameTo: "DS1",
+ });
+ await expect(nodes.get({ name: "DS1" })).toBeAttached();
+
+ await palette.dragNewNode({
+ type: NodeType.DECISION,
+ targetPosition: { x: 200, y: 200 },
+ thenRenameTo: "D1",
+ });
+ await expect(nodes.get({ name: "D1" })).toBeAttached();
+
+ await nodes.move({ name: "D1", targetPosition: { x: 500, y: 300 } });
+ await expect(nodes.get({ name: "D1" })).toBeAttached();
+ await drds.toggle();
+ await drds.create({ name: "Second DRD" });
+ await drgNodes.dragNode({ name: "DS1", targetPosition: { x: 400, y: 200 }
});
+
+ await drgNodes.toggle();
+ await nodes.move({ name: "D1", targetPosition: { x: 600, y: 300 } });
+ await drds.toggle();
+ await drds.navigateTo({ name: "First DRD" });
+ await drds.toggle();
+ await expect(diagram.get()).toHaveScreenshot("repositioned-decision.png");
+ });
+
test("892 expand - allow only if no other DS is collpased in the DRD", async
({ drds }) => {
test.skip(true,
"https://github.com/apache/incubator-kie-issues/issues/892");
test.info().annotations.push({
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]