UNPKG

@1771technologies/lytenyte-pro

Version:

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

28 lines (27 loc) 1.57 kB
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime"; import { useMemo } from "react"; import { splitRect } from "@1771technologies/lytenyte-shared"; import { useCutoffContext, useColumnsContext } from "@1771technologies/lytenyte-core/internal"; import { AnnotationHeaderRect } from "./annotation-header-rect.js"; import { resolveColumnIndex, useColumnIdToIndex } from "./resolve-anchor.js"; export function AnnotationHeaderOverlay({ annotations, }) { const { startCutoff, endCutoff } = useCutoffContext(); const { view } = useColumnsContext(); const colIdToIndex = useColumnIdToIndex(view.visibleColumns); const split = useMemo(() => { const result = []; for (const annotation of annotations) { if (annotation.anchor.kind !== "header") continue; const colStart = resolveColumnIndex(annotation.anchor.colStart, colIdToIndex); const colEnd = resolveColumnIndex(annotation.anchor.colEnd, colIdToIndex); if (colStart == null || colEnd == null) continue; const rects = splitRect({ rowStart: 0, rowEnd: 1, columnStart: colStart, columnEnd: colEnd }, startCutoff, endCutoff, 0, 1); for (const rect of rects) result.push({ rect, annotation }); } return result; }, [annotations, startCutoff, endCutoff, colIdToIndex]); return (_jsx(_Fragment, { children: split.map((s, i) => (_jsx(AnnotationHeaderRect, { rect: s.rect, annotation: s.annotation }, `${s.annotation.id}-${i}`))) })); }