import React, { useState } from "react"; import { useFetcher } from "@remix-run/react"; import { type LoaderFunctionArgs } from "@remix-run/server-runtime"; import { requireUserId } from "~/services/session.server"; import { useTypedLoaderData } from "remix-typedjson"; import { LoaderCircle } from "lucide-react"; import { PageHeader } from "~/components/common/page-header"; import { GraphVisualizationClient } from "~/components/graph/graph-client"; interface SpaceGraphProps { userId: string; clusterId: string; } export default function SpaceGraph({ userId, clusterId }: SpaceGraphProps) { const fetcher = useFetcher(); // Kick off the fetcher on mount if not already done React.useEffect(() => { if (userId && fetcher.state === "idle" && !fetcher.data) { fetcher.load("/api/v1/graph/clustered"); } }, [userId, fetcher]); // Determine loading state const loading = fetcher.state === "loading" || fetcher.state === "submitting" || !fetcher.data; // Get graph data from fetcher let graphData: any = null; if (fetcher.data && fetcher.data.success) { graphData = fetcher.data.data; } else if (fetcher.data && !fetcher.data.success) { graphData = { triplets: [], clusters: [] }; } return (
{loading ? (
Loading graph...
) : ( typeof window !== "undefined" && graphData && ( ) )}
); }