@1771technologies/lytenyte-pro
Version:
Blazingly fast headless React data grid with 100s of features.
25 lines (24 loc) • 924 B
JavaScript
import { useMemo } from "react";
import { useTreeViewPaths } from "../tree-view/hooks/use-tree-view-paths.js";
export function useColumnManager({ grid, query }) {
const columns = grid.state.columns.useValue();
const filteredColumns = useMemo(() => {
if (!query)
return columns;
return columns.filter((c) => (c.name ?? c.id).toLowerCase().includes(query.toLowerCase()));
}, [columns, query]);
const items = useTreeViewPaths(filteredColumns, true);
const branchLookup = useMemo(() => {
const stack = [...items];
const lookup = {};
while (stack.length) {
const item = stack.pop();
if (item.kind === "leaf")
continue;
lookup[item.data.idOccurrence] = item;
stack.push(...item.children.values());
}
return lookup;
}, [items]);
return { items, lookup: branchLookup };
}