47 lines
1.2 KiB
TypeScript
Executable file
47 lines
1.2 KiB
TypeScript
Executable file
import { PanelConstraints } from "../Panel";
|
|
import { PRECISION } from "../constants";
|
|
import { assert } from "./assert";
|
|
import { fuzzyCompareNumbers } from "./numbers/fuzzyCompareNumbers";
|
|
|
|
// Panel size must be in percentages; pixel values should be pre-converted
|
|
export function resizePanel({
|
|
panelConstraints: panelConstraintsArray,
|
|
panelIndex,
|
|
size,
|
|
}: {
|
|
panelConstraints: PanelConstraints[];
|
|
panelIndex: number;
|
|
size: number;
|
|
}) {
|
|
const panelConstraints = panelConstraintsArray[panelIndex];
|
|
assert(
|
|
panelConstraints != null,
|
|
`Panel constraints not found for index ${panelIndex}`
|
|
);
|
|
|
|
let {
|
|
collapsedSize = 0,
|
|
collapsible,
|
|
maxSize = 100,
|
|
minSize = 0,
|
|
} = panelConstraints;
|
|
|
|
if (fuzzyCompareNumbers(size, minSize) < 0) {
|
|
if (collapsible) {
|
|
// Collapsible panels should snap closed or open only once they cross the halfway point between collapsed and min size.
|
|
const halfwayPoint = (collapsedSize + minSize) / 2;
|
|
if (fuzzyCompareNumbers(size, halfwayPoint) < 0) {
|
|
size = collapsedSize;
|
|
} else {
|
|
size = minSize;
|
|
}
|
|
} else {
|
|
size = minSize;
|
|
}
|
|
}
|
|
|
|
size = Math.min(maxSize, size);
|
|
size = parseFloat(size.toFixed(PRECISION));
|
|
|
|
return size;
|
|
}
|