25 lines
770 B
TypeScript
25 lines
770 B
TypeScript
import { OccupiedSpace } from "constants/editorConstants";
|
|
import { GridDefaults } from "constants/WidgetConstants";
|
|
|
|
export const calculateDropTargetRows = (
|
|
widgetId: string,
|
|
widgetBottomRow: number,
|
|
defaultRows: number,
|
|
occupiedSpacesByChildren?: OccupiedSpace[],
|
|
) => {
|
|
/* Max bottom row including the existing widgets as well as the widget we just dropped */
|
|
let minBottomRow = widgetBottomRow;
|
|
if (occupiedSpacesByChildren) {
|
|
minBottomRow = occupiedSpacesByChildren.reduce((prev, next) => {
|
|
if (next.id !== widgetId) {
|
|
return next.bottom > prev ? next.bottom : prev;
|
|
}
|
|
return prev;
|
|
}, widgetBottomRow);
|
|
}
|
|
|
|
return Math.ceil(
|
|
Math.max(minBottomRow + GridDefaults.CANVAS_EXTENSION_OFFSET, defaultRows),
|
|
);
|
|
};
|