@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
51 lines (50 loc) • 1.66 kB
JavaScript
import { areRectsEqual } from "./are-rects-equal.js";
export function splitOnPivot(rect, pivot) {
if (rect.isUnit || areRectsEqual(rect, pivot))
return null;
const splits = [];
const isAfter = pivot.columnStart > rect.columnStart;
const isSame = pivot.columnStart === rect.columnStart && pivot.columnEnd === rect.columnEnd;
// The pivot is on the right side of the rect. So we split by end
if (isAfter) {
const split = { ...rect, columnEnd: rect.columnEnd - 1, borderEnd: false };
if (split.columnStart !== split.columnEnd)
splits.push(split);
}
else {
const split = {
...rect,
columnStart: rect.columnStart + 1,
borderStart: false,
};
if (split.columnStart !== split.columnEnd)
splits.push(split);
}
if (pivot.rowStart > rect.rowStart) {
const split = {
...rect,
columnStart: pivot.columnStart,
columnEnd: pivot.columnEnd,
rowEnd: rect.rowEnd - 1,
borderBottom: false,
borderStart: !isAfter,
borderEnd: isSame || isAfter,
};
if (split.rowStart !== split.rowEnd)
splits.push(split);
}
else {
const split = {
...rect,
columnStart: pivot.columnStart,
columnEnd: pivot.columnEnd,
rowStart: rect.rowStart + 1,
borderTop: false,
borderStart: !isAfter,
borderEnd: isSame || isAfter,
};
if (split.rowStart !== split.rowEnd)
splits.push(split);
}
return splits;
}