UNPKG

@1771technologies/lytenyte-pro

Version:

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

56 lines (55 loc) 2.18 kB
import { useMemo, useRef } from "react"; export function useFlattenedPiece({ leafsTop, leafsCenter, leafsBot, groupFlat, centerIndices, }) { const rowByIdRef = useRef(null); const rowByIndexRef = useRef(null); const rowIdToRowIndexRef = useRef(null); const [flatten] = useMemo(() => { const flat = []; const byId = new Map(); const byIndex = new Map(); const byIdToIndex = new Map(); for (let i = 0; i < leafsTop.length; i++) { const node = leafsTop[i]; flat.push(node); byIndex.set(i, node); byId.set(node.id, node); byIdToIndex.set(node.id, i); } const offset = leafsTop.length; if (groupFlat) { for (let i = 0; i < groupFlat.length; i++) { const rowIndex = i + offset; const node = groupFlat[i]; flat.push(node); byIndex.set(rowIndex, node); byId.set(node.id, node); byIdToIndex.set(node.id, rowIndex); } } else { for (let i = 0; i < centerIndices.length; i++) { const rowIndex = i + offset; const srcIndex = centerIndices[i]; const node = leafsCenter[srcIndex]; flat.push(node); byIndex.set(rowIndex, node); byId.set(node.id, node); byIdToIndex.set(node.id, rowIndex); } } const botOffset = offset + (groupFlat ? groupFlat.length : centerIndices.length); for (let i = 0; i < leafsBot.length; i++) { const rowIndex = i + botOffset; const node = leafsBot[i]; flat.push(node); byIndex.set(rowIndex, node); byId.set(node.id, node); byIdToIndex.set(node.id, rowIndex); } rowByIdRef.current = byId; rowByIndexRef.current = byIndex; rowIdToRowIndexRef.current = byIdToIndex; return [flat]; }, [centerIndices, groupFlat, leafsBot, leafsCenter, leafsTop]); return { flatten, rowByIdRef, rowByIndexRef, rowIdToRowIndexRef }; }