@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
28 lines (27 loc) • 1.57 kB
JavaScript
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}`))) }));
}