import React, { FC, useEffect, useState } from "react"; import { SigmaContainer, ZoomControl, FullScreenControl } from "react-sigma-v2"; import { omit, mapValues, keyBy, constant } from "lodash"; import getNodeProgramImage from "sigma/rendering/webgl/programs/node.image"; import GraphSettingsController from "./GraphSettingsController"; import GraphEventsController from "./GraphEventsController"; import GraphDataController from "./GraphDataController"; import DescriptionPanel from "./DescriptionPanel"; import { Dataset, FiltersState } from "../types"; import ClustersPanel from "./ClustersPanel"; import SearchField from "./SearchField"; import drawLabel from "../canvas-utils"; import GraphTitle from "./GraphTitle"; import "react-sigma-v2/lib/react-sigma-v2.css"; import { GrClose } from "react-icons/gr"; import { BiRadioCircleMarked, BiBookContent } from "react-icons/bi"; import { BsArrowsFullscreen, BsFullscreenExit, BsZoomIn, BsZoomOut } from "react-icons/bs"; const Root: FC = () => { const [showContents, setShowContents] = useState(false); const [dataReady, setDataReady] = useState(false); const [dataset, setDataset] = useState(null); const [filtersState, setFiltersState] = useState({ clusters: {}, }); const [hoveredNode, setHoveredNode] = useState(null); // Load data on mount: useEffect(() => { fetch(`${process.env.PUBLIC_URL}/dataset_entities.json`) .then((res) => res.json()) .then((dataset: Dataset) => { setDataset(dataset); setFiltersState({ clusters: mapValues(keyBy(dataset.clusters, "key"), constant(true)), }); requestAnimationFrame(() => setDataReady(true)); }); }, []); if (!dataset) return null; return (
{dataReady && ( <>
} customExitFullScreen={} /> } customZoomOut={} customZoomCenter={} />
setFiltersState((filters) => ({ ...filters, clusters, })) } toggleCluster={(cluster) => { setFiltersState((filters) => ({ ...filters, clusters: filters.clusters[cluster] ? omit(filters.clusters, cluster) : { ...filters.clusters, [cluster]: true }, })); }} />
)}
); }; export default Root;