PromucFlow_constructor/app/client/src/utils/reflowHookUtils.ts
Abhinav Jha 67f7d217a1
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 11:42:32 +05:30

93 lines
2.6 KiB
TypeScript

import { OccupiedSpace } from "constants/CanvasEditorConstants";
import { GridDefaults } from "constants/WidgetConstants";
import { FlattenedWidgetProps } from "reducers/entityReducers/canvasWidgetsReducer";
import { GridProps, ReflowedSpace, ReflowedSpaceMap } from "reflow/reflowTypes";
export function collisionCheckPostReflow(
widgets: {
[widgetId: string]: FlattenedWidgetProps;
},
reflowWidgetKeys: string[],
parentId?: string,
) {
const widgetKeys = Object.keys(widgets).filter((widgetId) => {
if (!widgets[widgetId].parentId) return false;
if (widgets[widgetId].parentId !== parentId) return false;
if (widgets[widgetId].type === "MODAL_WIDGET") return false;
return true;
});
//boundary Check
for (const reflowedKey of reflowWidgetKeys) {
if (isOutOfCanvas(widgets[reflowedKey])) {
return false;
}
}
//overlapping check
for (const reflowedKey of reflowWidgetKeys) {
for (const widgetId of widgetKeys) {
if (areIntersecting(widgets[reflowedKey], widgets[widgetId])) {
return false;
}
}
}
return true;
}
// TODO(ashok): There is a name clash here. Fine for now, but might get confusing in the future.
// maybe we should create a task for this.
function areIntersecting(r1: FlattenedWidgetProps, r2: FlattenedWidgetProps) {
if (r1.widgetId === r2.widgetId) return false;
return !(
r2.leftColumn >= r1.rightColumn ||
r2.rightColumn <= r1.leftColumn ||
r2.topRow >= r1.bottomRow ||
r2.bottomRow <= r1.topRow
);
}
function isOutOfCanvas(widget: FlattenedWidgetProps) {
return (
widget.leftColumn < 0 ||
widget.topRow < 0 ||
widget.rightColumn > GridDefaults.DEFAULT_GRID_COLUMNS
);
}
export function getBottomRowAfterReflow(
movementMap: ReflowedSpaceMap | undefined,
widgetBottom: number,
occupiedSpaces: OccupiedSpace[],
gridProps: GridProps,
) {
const reflowedWidgets: [string, ReflowedSpace][] = Object.entries(
movementMap || {},
);
const bottomReflowedWidgets = reflowedWidgets.filter((each) => !!each[1].Y);
const reflowedWidgetsBottomMostRow = bottomReflowedWidgets.reduce(
(bottomMostRow, each) => {
const [id, reflowedParams] = each;
const widget = occupiedSpaces.find((eachSpace) => eachSpace.id === id);
if (widget) {
const bottomMovement =
(reflowedParams.Y || 0) / gridProps.parentRowSpace;
const bottomRow = widget.bottom + bottomMovement;
if (bottomRow > bottomMostRow) {
return bottomRow;
}
}
return bottomMostRow;
},
0,
);
return Math.max(reflowedWidgetsBottomMostRow, widgetBottom);
}