PromucFlow_constructor/app/client/src/utils/autoHeight/reflow.test.ts

222 lines
5.9 KiB
TypeScript
Raw Normal View History

feat: (Internal Change) Add auto height computation functions (#17962) * Add auto height reflow functions libary * Add comments in hard to understand parts * feat: auto height reflow lib (#17978) added 2 tests for boxHelper and 1 simple test for reflow computeChangeInPositionBasedOnDelta Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> * Reduce one loop. Fix typo * Add helper functions and use them in lib * Use helper function * Add types * Fix issue where widgets don't get close to the bottom most above widget if that widget hasn't changed * fix: auto height reflow lib merge release (#18193) * feat: show number of tabs on the header (#18071) * number of tabs displayed alongside label * styling for span removed * feature added and cypress test cases written * code refactoring after review * Update top contributors * feat: Auto-height add reducers and actions (#17953) * Add reducers for auto height feature (Internal Change, No changes reflected to users) Co-authored-by: ankurrsinghal <ankur@appsmith.com> * [Bug] Incorrect count of users in workspace when adding multiple users (#17728) fix: filtering unique users by userId Co-authored-by: Anubhav <anubhav@appsmith.com> * fix: Instrumentation for execution errors (#18093) * fix: Instrumentation for execution errors * added widget editor error event * fix: Sidebar heading fontSize & checkbox alignment (#18104) sidebar heading & checkbox alignment to heading * chore: added type for feature flag (#18152) add: new type for env variable * Update top contributors * feat: [Context Switching]: Change focus target and fix cursor position (#17794) Co-authored-by: rahulramesha <rahul@appsmith.com> * fix: JS Objects save failures due to AST changes (#18018) * fix: update local_testing.sh to build image for external contributor PRs (#18024) * chore: use `typography` and `getTypographyFromKey` from the design-system (#18050) Change typography imports, change function call * dummy Co-authored-by: Rishabh Kashyap <rishabh.kashyap@appsmith.com> Co-authored-by: Appsmith Bot <74705725+appsmith-bot@users.noreply.github.com> Co-authored-by: Abhinav Jha <abhinav@appsmith.com> Co-authored-by: Ankit Srivastava <67647761+ankitsrivas14@users.noreply.github.com> Co-authored-by: Anubhav <anubhav@appsmith.com> Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com> Co-authored-by: Rohit Agarwal <rohit_agarwal@live.in> Co-authored-by: Ayush Pahwa <ayush@appsmith.com> Co-authored-by: Hetu Nandu <hetu@appsmith.com> Co-authored-by: subratadeypappu <subrata@appsmith.com> Co-authored-by: Sumit Kumar <sumit@appsmith.com> Co-authored-by: Tanvi Bhakta <tanvibhakta@gmail.com> Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> Co-authored-by: ankurrsinghal <ankur@appsmith.com> Co-authored-by: Ankur Singhal <ankurrsinghal@gmail.com> Co-authored-by: Rishabh Kashyap <rishabh.kashyap@appsmith.com> Co-authored-by: Appsmith Bot <74705725+appsmith-bot@users.noreply.github.com> Co-authored-by: Ankit Srivastava <67647761+ankitsrivas14@users.noreply.github.com> Co-authored-by: Anubhav <anubhav@appsmith.com> Co-authored-by: ChandanBalajiBP <104058110+ChandanBalajiBP@users.noreply.github.com> Co-authored-by: Rohit Agarwal <rohit_agarwal@live.in> Co-authored-by: Ayush Pahwa <ayush@appsmith.com> Co-authored-by: Hetu Nandu <hetu@appsmith.com> Co-authored-by: subratadeypappu <subrata@appsmith.com> Co-authored-by: Sumit Kumar <sumit@appsmith.com> Co-authored-by: Tanvi Bhakta <tanvibhakta@gmail.com>
2022-11-20 06:12:32 +00:00
import { TreeNode } from "./constants";
import { computeChangeInPositionBasedOnDelta } from "./reflow";
describe("reflow", () => {
describe("computeChangeInPositionBasedOnDelta (should compute new positions for boxes based on boxes which has changed heights)", () => {
it("simple 2 boxes test where the top grows by 5 rows and should shifts the bottom one by 5 rows", () => {
const box1TopRow = 10;
const box1BottomRow = 20;
const box2TopRow = 30;
const box2BottomRow = 40;
const tree: Record<string, TreeNode> = {
"1": {
aboves: [],
belows: ["2"],
topRow: box1TopRow,
bottomRow: box1BottomRow,
originalTopRow: box1TopRow,
originalBottomRow: box1BottomRow,
},
"2": {
aboves: ["1"],
belows: [],
topRow: box2TopRow,
bottomRow: box2BottomRow,
originalTopRow: box2TopRow,
originalBottomRow: box2BottomRow,
},
};
const box1DeltaHeightIncrease = 5;
const delta: Record<string, number> = {
"1": box1DeltaHeightIncrease,
};
const expectedChanges = {
"1": {
topRow: box1TopRow,
bottomRow: box1BottomRow + box1DeltaHeightIncrease,
},
"2": {
topRow: box2TopRow + box1DeltaHeightIncrease,
bottomRow: box2BottomRow + box1DeltaHeightIncrease,
},
};
const changes = computeChangeInPositionBasedOnDelta(tree, delta);
expect(expectedChanges).toMatchObject(changes);
});
it("When delta is negative, the original spacing is maintained", () => {
const box1TopRow = 10;
const box1BottomRow = 100;
const box1OriginalTopRow = 10;
const box1OriginalBottomRow = 20;
const box2TopRow = 110;
const box2BottomRow = 200;
const box2OriginalTopRow = 30;
const box2OriginalBottomRow = 40;
const tree: Record<string, TreeNode> = {
"1": {
aboves: [],
belows: ["2"],
topRow: box1TopRow,
bottomRow: box1BottomRow,
originalTopRow: box1OriginalTopRow,
originalBottomRow: box1OriginalBottomRow,
},
"2": {
aboves: ["1"],
belows: [],
topRow: box2TopRow,
bottomRow: box2BottomRow,
originalTopRow: box2OriginalTopRow,
originalBottomRow: box2OriginalBottomRow,
},
};
const box1DeltaHeight = -50;
const delta: Record<string, number> = {
"1": box1DeltaHeight,
"2": box1DeltaHeight,
};
const expectedChanges = {
"1": {
topRow: box1TopRow,
bottomRow: box1BottomRow + box1DeltaHeight,
},
"2": {
topRow: 60,
bottomRow: 100,
},
};
const changes = computeChangeInPositionBasedOnDelta(tree, delta);
expect(expectedChanges).toMatchObject(changes);
});
it("When delta is negative, bottom box moves up", () => {
const box1TopRow = 10;
const box1BottomRow = 100;
const box1OriginalTopRow = 10;
const box1OriginalBottomRow = 15;
const box2TopRow = 140;
const box2BottomRow = 230;
const box2OriginalTopRow = 30;
const box2OriginalBottomRow = 40;
const tree: Record<string, TreeNode> = {
"1": {
aboves: [],
belows: ["2"],
topRow: box1TopRow,
bottomRow: box1BottomRow,
originalTopRow: box1OriginalTopRow,
originalBottomRow: box1OriginalBottomRow,
},
"2": {
aboves: ["1"],
belows: [],
topRow: box2TopRow,
bottomRow: box2BottomRow,
originalTopRow: box2OriginalTopRow,
originalBottomRow: box2OriginalBottomRow,
},
};
const box1DeltaHeight = -50;
const delta: Record<string, number> = {
"1": box1DeltaHeight,
"2": box1DeltaHeight,
};
const expectedChanges = {
"1": {
topRow: box1TopRow,
bottomRow: box1BottomRow + box1DeltaHeight,
},
"2": {
topRow: 90,
bottomRow: 130,
},
};
const changes = computeChangeInPositionBasedOnDelta(tree, delta);
expect(expectedChanges).toMatchObject(changes);
});
it("When a widget is blocking and delta is negative, bottom box moves up to the original spacing between the blocking box and the bottom box", () => {
const box1TopRow = 10;
const box1BottomRow = 100;
const box1OriginalTopRow = 10;
const box1OriginalBottomRow = 15;
const box2TopRow = 140;
const box2BottomRow = 230;
const box2OriginalTopRow = 30;
const box2OriginalBottomRow = 40;
const box3 = {
aboves: [],
belows: ["2"],
topRow: 50,
bottomRow: 120,
originalBottomRow: 20,
originalTopRow: 10,
};
const tree: Record<string, TreeNode> = {
"1": {
aboves: [],
belows: ["2"],
topRow: box1TopRow,
bottomRow: box1BottomRow,
originalTopRow: box1OriginalTopRow,
originalBottomRow: box1OriginalBottomRow,
},
"2": {
aboves: ["1", "3"],
belows: [],
topRow: box2TopRow,
bottomRow: box2BottomRow,
originalTopRow: box2OriginalTopRow,
originalBottomRow: box2OriginalBottomRow,
},
"3": box3,
};
const box1DeltaHeight = -50;
const delta: Record<string, number> = {
"1": box1DeltaHeight,
"2": box1DeltaHeight,
};
const expectedChanges = {
"1": {
topRow: box1TopRow,
bottomRow: box1BottomRow + box1DeltaHeight,
},
"2": {
topRow: 130,
bottomRow: 170,
},
};
const changes = computeChangeInPositionBasedOnDelta(tree, delta);
expect(expectedChanges).toMatchObject(changes);
});
});
});