PromucFlow_constructor/app/client/src/components/editorComponents/ResizableUtils.tsx

63 lines
1.7 KiB
TypeScript
Raw Normal View History

import { XYCord } from "utils/hooks/useCanvasDragging";
import { WidgetProps, WidgetRowCols } from "widgets/BaseWidget";
2020-01-16 11:46:21 +00:00
import { GridDefaults } from "constants/WidgetConstants";
export type UIElementSize = { height: number; width: number };
export const RESIZABLE_CONTAINER_BORDER_THEME_INDEX = 1;
2020-02-18 19:56:58 +00:00
export const computeRowCols = (
delta: UIElementSize,
position: XYCord,
props: WidgetProps,
2020-02-18 19:56:58 +00:00
) => {
return {
leftColumn: Math.round(
props.leftColumn + position.x / props.parentColumnSpace,
2020-01-16 11:46:21 +00:00
),
topRow: Math.round(props.topRow + position.y / props.parentRowSpace),
2020-02-18 19:56:58 +00:00
rightColumn: Math.round(
props.rightColumn + (delta.width + position.x) / props.parentColumnSpace,
2020-01-16 11:46:21 +00:00
),
bottomRow: Math.round(
props.bottomRow + (delta.height + position.y) / props.parentRowSpace,
2020-01-16 11:46:21 +00:00
),
};
2020-02-18 19:56:58 +00:00
};
2020-02-18 19:56:58 +00:00
export const computeBoundedRowCols = (rowCols: WidgetRowCols) => {
return {
leftColumn: Math.max(rowCols.leftColumn, 0),
rightColumn: Math.min(
rowCols.rightColumn,
GridDefaults.DEFAULT_GRID_COLUMNS,
),
topRow: rowCols.topRow,
bottomRow: rowCols.bottomRow,
};
};
export const hasRowColsChanged = (
newRowCols: WidgetRowCols,
props: WidgetProps,
) => {
return (
props.leftColumn !== newRowCols.leftColumn ||
props.topRow !== newRowCols.topRow ||
props.bottomRow !== newRowCols.bottomRow ||
props.rightColumn !== newRowCols.rightColumn
2020-02-18 19:56:58 +00:00
);
};
2020-02-18 19:56:58 +00:00
export const computeFinalRowCols = (
delta: UIElementSize,
position: XYCord,
props: WidgetProps,
2020-02-18 19:56:58 +00:00
): WidgetRowCols | false => {
const newRowCols = computeBoundedRowCols(
computeRowCols(delta, position, props),
);
2020-02-18 19:56:58 +00:00
return hasRowColsChanged(newRowCols, props) ? newRowCols : false;
};