* 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>
93 lines
2.6 KiB
TypeScript
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);
|
|
}
|