import { JSONHeroPath } from "@jsonhero/path"; import { memo, useMemo } from "react"; import { useJson } from "~/hooks/useJson"; import { useJsonColumnViewAPI, useJsonColumnViewState, } from "~/hooks/useJsonColumnView"; import { ColumnDefinition } from "~/useColumnView"; import { BlankColumn } from "./BlankColumn"; import { Column } from "./Column"; import { ColumnItem } from "./ColumnItem"; function ColumnsElement({ columns }: { columns: ColumnDefinition[] }) { const [json] = useJson(); const { selectedPath, highlightedPath, highlightedNodeId } = useJsonColumnViewState(); const { goToNodeId } = useJsonColumnViewAPI(); const highlightedItemIsValue = useMemo(() => { if (highlightedNodeId == null) { return false; } const path = new JSONHeroPath(highlightedNodeId); let item = path.first(json); return typeof item !== "object"; }, [highlightedPath, json]); return (
{columns.map((column) => { return ( {column.items.map((item) => ( goToNodeId(id, "columnView")} /> ))} ); })} {highlightedItemIsValue ? : null}
); } export const Columns = memo(ColumnsElement);