@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
60 lines (59 loc) • 2.41 kB
JavaScript
export function makeColumnLayout(view, floatingRowEnabled) {
const combinedView = view.combinedView;
const groupMeta = view.meta;
const centerEnd = view.startCount + view.centerCount;
const layout = [];
const floatingRow = [];
for (let r = 0; r < combinedView.length; r++) {
const row = combinedView[r];
const rowLayout = [];
for (let i = 0; i < row.length; i++) {
const c = row[i];
const colS = c.colStart;
const colPin = colS < view.startCount ? "start" : colS >= centerEnd ? "end" : null;
if (c.kind === "leaf") {
const vals = {
id: c.data.id,
colPin,
column: c.data,
rowStart: c.rowStart,
rowEnd: c.rowStart + c.rowSpan,
rowSpan: c.rowSpan,
colStart: c.colStart,
colEnd: c.colStart + c.colSpan,
colSpan: c.colSpan,
colFirstEndPin: c.colStart === centerEnd ? true : undefined,
colLastStartPin: c.colStart + c.colSpan === view.startCount ? true : undefined,
};
rowLayout.push({ kind: "cell", ...vals });
if (floatingRowEnabled) {
floatingRow.push({ kind: "floating", ...vals });
}
continue;
}
rowLayout.push({
kind: "group",
colPin,
id: c.data.id,
isCollapsible: groupMeta.groupIsCollapsible.get(c.data.id),
idOccurrence: c.data.idOccurrence,
rowStart: c.rowStart,
rowEnd: c.rowStart + c.rowSpan,
rowSpan: c.rowSpan,
colStart: c.colStart,
colEnd: c.colStart + c.colSpan,
colSpan: c.colSpan,
columnIds: [...c.data.idsInNode],
groupPath: c.data.groupPath,
start: c.data.start,
end: c.data.end,
colFirstEndPin: c.colStart === centerEnd ? true : undefined,
colLastStartPin: c.colStart + c.colSpan === view.startCount ? true : undefined,
});
}
layout.push(rowLayout);
}
if (floatingRowEnabled)
layout.push(floatingRow);
return layout;
}