UNPKG

@1771technologies/lytenyte-pro

Version:

Blazingly fast headless React data grid with 100s of features.

60 lines (59 loc) 2.41 kB
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; }