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

rfellows pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new ffa5e8473d NIFI-13285: If there is no transform to restore for the 
current viewport, executing a zoom fit (#8874)
ffa5e8473d is described below

commit ffa5e8473d568cc31fc3cf9261b81a316c2bb64d
Author: Matt Gilman <[email protected]>
AuthorDate: Tue May 28 20:29:04 2024 -0400

    NIFI-13285: If there is no transform to restore for the current viewport, 
executing a zoom fit (#8874)
    
    * NIFI-13285:
    - If there is no transform to restore for the current viewport, executing a 
zoom fit.
    
    * NIFI-13285:
    - Adjusting the canvas position styles and zoom fit calculations.
    
    This closes #8874
---
 .../flow-designer/service/canvas-view.service.ts      | 19 ++++++++++---------
 .../state/transform/transform.actions.ts              |  2 +-
 .../state/transform/transform.effects.ts              |  9 +++++++--
 .../flow-designer/ui/canvas/canvas.component.scss     |  6 +++---
 .../navigation-control.component.ts                   |  2 +-
 5 files changed, 22 insertions(+), 16 deletions(-)

diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/canvas-view.service.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/canvas-view.service.ts
index 4488516e08..ea4e211101 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/canvas-view.service.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/service/canvas-view.service.ts
@@ -609,7 +609,7 @@ export class CanvasView {
     /**
      * Zooms to fit the entire graph on the canvas.
      */
-    public fit(): void {
+    public fit(allowTransition: boolean): void {
         const translate = [this.x, this.y];
         const scale: number = this.k;
         let newScale: number;
@@ -617,8 +617,8 @@ export class CanvasView {
         // get the canvas normalized width and height
         const canvasContainer: any = 
document.getElementById('canvas-container');
         const canvasBoundingBox: any = canvasContainer.getBoundingClientRect();
-        const canvasWidth = canvasBoundingBox.width;
-        const canvasHeight = canvasBoundingBox.height;
+        const canvasWidth = canvasBoundingBox.width - 50;
+        const canvasHeight = canvasBoundingBox.height - 50;
 
         // get the bounding box for the graph
         const graph: any = d3.select('#canvas');
@@ -627,6 +627,8 @@ export class CanvasView {
         const graphHeight: number = graphBox.height / scale;
         let graphLeft: number = graphBox.left / scale;
         let graphTop: number = (graphBox.top - canvasBoundingBox.top) / scale;
+        const x = translate[0] / scale;
+        const y = translate[1] / scale;
 
         // adjust the scale to ensure the entire graph is visible
         if (graphWidth > canvasWidth || graphHeight > canvasHeight) {
@@ -637,15 +639,14 @@ export class CanvasView {
         } else {
             newScale = 1;
 
-            // since the entire graph will fit on the canvas, offset origin 
appropriately
-            graphLeft -= 100;
-            graphTop -= 50;
+            graphLeft -= (canvasWidth - graphWidth) / 2;
+            graphTop -= (canvasHeight - graphHeight) / 2;
         }
 
-        this.allowTransition = true;
+        this.allowTransition = allowTransition;
         this.centerBoundingBox({
-            x: graphLeft - translate[0] / scale,
-            y: graphTop - translate[1] / scale,
+            x: graphLeft - x,
+            y: graphTop - y,
             width: canvasWidth / newScale,
             height: canvasHeight / newScale,
             scale: newScale
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.actions.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.actions.ts
index d211ad5f94..d8c851310d 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.actions.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.actions.ts
@@ -33,6 +33,6 @@ export const zoomIn = createAction('[Transform] Zoom In');
 
 export const zoomOut = createAction('[Transform] Zoom Out');
 
-export const zoomFit = createAction('[Transform] Zoom Fit');
+export const zoomFit = createAction('[Transform] Zoom Fit', props<{ 
transition: boolean }>());
 
 export const zoomActual = createAction('[Transform] Zoom Actual');
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.effects.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.effects.ts
index 675e47477c..e887aa579f 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.effects.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/state/transform/transform.effects.ts
@@ -84,7 +84,11 @@ export class TransformEffects {
                             if (isFinite(item.scale) && 
isFinite(item.translateX) && isFinite(item.translateY)) {
                                 // restore previous view
                                 this.canvasView.transform([item.translateX, 
item.translateY], item.scale);
+                            } else {
+                                this.store.dispatch(TransformActions.zoomFit({ 
transition: false }));
                             }
+                        } else {
+                            this.store.dispatch(TransformActions.zoomFit({ 
transition: false }));
                         }
                     } catch (e) {
                         // likely could not parse item... ignoring
@@ -143,8 +147,9 @@ export class TransformEffects {
         () =>
             this.actions$.pipe(
                 ofType(TransformActions.zoomFit),
-                tap(() => {
-                    this.canvasView.fit();
+                map((action) => action.transition),
+                tap((transition) => {
+                    this.canvasView.fit(transition);
                 })
             ),
         { dispatch: false }
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/canvas.component.scss
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/canvas.component.scss
index 064d18477c..21ccbce4a0 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/canvas.component.scss
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/canvas.component.scss
@@ -17,9 +17,9 @@
 
 .canvas-background {
     position: absolute;
-    top: 98px;
+    top: 97px;
     left: 0;
-    bottom: 0;
+    bottom: 33px;
     right: 0;
     background-size: 14px 14px;
     z-index: 1;
@@ -30,7 +30,7 @@
 
 :host ::ng-deep svg.canvas-svg {
     width: 100%;
-    height: calc(100% - 33px);
+    height: 100%;
 
     -webkit-font-smoothing: antialiased;
     -moz-osx-font-smoothing: grayscale;
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/graph-controls/navigation-control/navigation-control.component.ts
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/graph-controls/navigation-control/navigation-control.component.ts
index e8013e6cf3..191824bd82 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/graph-controls/navigation-control/navigation-control.component.ts
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-frontend/src/main/nifi/src/app/pages/flow-designer/ui/canvas/graph-controls/navigation-control/navigation-control.component.ts
@@ -83,7 +83,7 @@ export class NavigationControl {
     }
 
     zoomFit(): void {
-        this.store.dispatch(zoomFit());
+        this.store.dispatch(zoomFit({ transition: true }));
     }
 
     zoomActual(): void {

Reply via email to