## Description This PR adds one of the promised updates to the auto height feature. More specifically, we wanted to add was the ability to see the containers change height as we drag and drop widgets within them instead of after dropping (when auto height is enabled) This PR does that. Co-authored-by: Aishwarya UR <aishwarya@appsmith.com>
201 lines
4.1 KiB
TypeScript
201 lines
4.1 KiB
TypeScript
import { RenderModes } from "constants/WidgetConstants";
|
|
import { WidgetProps } from "widgets/BaseWidget";
|
|
import {
|
|
getCanvasBottomRow,
|
|
getCanvasWidgetHeightsToUpdate,
|
|
} from "./WidgetSizeUtils";
|
|
|
|
const DUMMY_WIDGET: WidgetProps = {
|
|
bottomRow: 0,
|
|
isLoading: false,
|
|
leftColumn: 0,
|
|
parentColumnSpace: 0,
|
|
parentRowSpace: 0,
|
|
renderMode: RenderModes.CANVAS,
|
|
rightColumn: 0,
|
|
topRow: 0,
|
|
type: "SKELETON_WIDGET",
|
|
version: 2,
|
|
widgetId: "",
|
|
widgetName: "",
|
|
};
|
|
|
|
it("Computes the bottomRow of the canvas within a container correctly", () => {
|
|
const canvasWidgets = {
|
|
x: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "x",
|
|
bottomRow: 20,
|
|
topRow: 10,
|
|
type: "CONTAINER_WIDGET",
|
|
children: ["m"],
|
|
},
|
|
m: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "m",
|
|
parentId: "x",
|
|
children: ["n", "o"],
|
|
type: "CANVAS_WIDGET",
|
|
},
|
|
n: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 30,
|
|
},
|
|
o: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 5,
|
|
},
|
|
};
|
|
|
|
const result = getCanvasBottomRow("m", canvasWidgets);
|
|
expect(result).toBe(300);
|
|
});
|
|
|
|
it("Computes the bottomRow of the canvas within a Modal correctly", () => {
|
|
const canvasWidgets = {
|
|
x: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "x",
|
|
bottomRow: 20,
|
|
topRow: 10,
|
|
height: 200,
|
|
type: "MODAL_WIDGET",
|
|
children: ["m"],
|
|
},
|
|
m: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "m",
|
|
parentId: "x",
|
|
children: ["n", "o"],
|
|
type: "CANVAS_WIDGET",
|
|
},
|
|
n: {
|
|
...DUMMY_WIDGET,
|
|
parentId: "m",
|
|
bottomRow: 30,
|
|
},
|
|
o: {
|
|
...DUMMY_WIDGET,
|
|
parentId: "m",
|
|
bottomRow: 5,
|
|
},
|
|
};
|
|
|
|
const result = getCanvasBottomRow("m", canvasWidgets);
|
|
expect(result).toBe(300);
|
|
});
|
|
|
|
it("Computes the bottomRow of the canvas within a Modal correctly", () => {
|
|
const canvasWidgets = {
|
|
x: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "x",
|
|
bottomRow: 20,
|
|
topRow: 10,
|
|
height: 500,
|
|
type: "MODAL_WIDGET",
|
|
children: ["m"],
|
|
},
|
|
m: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "m",
|
|
parentId: "x",
|
|
children: ["n", "o"],
|
|
type: "CANVAS_WIDGET",
|
|
},
|
|
n: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 30,
|
|
},
|
|
o: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 5,
|
|
},
|
|
};
|
|
|
|
const result = getCanvasBottomRow("m", canvasWidgets);
|
|
expect(result).toBe(500);
|
|
});
|
|
|
|
it("Computes the bottomRow of the canvas within a Container when the container has larger height correctly", () => {
|
|
// The Container widget has a height of 10 rows, while the lowest widget is at 6 rows, so, the canvas should take this into account
|
|
// and return 10 * Row height == 100
|
|
const canvasWidgets = {
|
|
x: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "x",
|
|
bottomRow: 20,
|
|
topRow: 10,
|
|
type: "CONTAINER_WIDGET",
|
|
children: ["m"],
|
|
},
|
|
m: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "m",
|
|
parentId: "x",
|
|
children: ["n", "o"],
|
|
type: "CANVAS_WIDGET",
|
|
},
|
|
n: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 6,
|
|
},
|
|
o: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 5,
|
|
},
|
|
};
|
|
|
|
const result = getCanvasBottomRow("m", canvasWidgets);
|
|
expect(result).toBe(100);
|
|
});
|
|
|
|
it("Computes all the effected canvases for the changed widgets", () => {
|
|
const canvasWidgets = {
|
|
x: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "x",
|
|
bottomRow: 20,
|
|
topRow: 10,
|
|
type: "CONTAINER_WIDGET",
|
|
children: ["m"],
|
|
},
|
|
m: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "m",
|
|
parentId: "x",
|
|
children: ["n", "o", "p"],
|
|
type: "CANVAS_WIDGET",
|
|
},
|
|
n: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 6,
|
|
},
|
|
o: {
|
|
...DUMMY_WIDGET,
|
|
bottomRow: 5,
|
|
},
|
|
p: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "p",
|
|
bottomRow: 20,
|
|
topRow: 10,
|
|
type: "CONTAINER_WIDGET",
|
|
children: ["q"],
|
|
parentId: "m",
|
|
},
|
|
q: {
|
|
...DUMMY_WIDGET,
|
|
widgetId: "q",
|
|
parentId: "p",
|
|
children: [],
|
|
type: "CANVAS_WIDGET",
|
|
},
|
|
};
|
|
|
|
// Since the container p has changed, it will effect the parent m and the child q
|
|
|
|
const result = getCanvasWidgetHeightsToUpdate(["p"], canvasWidgets);
|
|
expect(result).toStrictEqual({ q: 100, m: 200 });
|
|
});
|