36 lines
657 B
TypeScript
36 lines
657 B
TypeScript
import { useEffect, useState } from "react";
|
|
|
|
export interface GraphNode {
|
|
id: string;
|
|
published: boolean;
|
|
title: string | null;
|
|
}
|
|
|
|
export interface GraphEdge {
|
|
source: string;
|
|
target: string;
|
|
}
|
|
|
|
export interface GraphData {
|
|
nodes: GraphNode[];
|
|
edges: GraphEdge[];
|
|
}
|
|
|
|
export function useGraph() {
|
|
const [data, setData] = useState<GraphData | null>(null);
|
|
const [loading, setLoading] = useState(true);
|
|
|
|
useEffect(() => {
|
|
(async () => {
|
|
try {
|
|
const res = await fetch("/api/graph");
|
|
setData(await res.json());
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
})();
|
|
}, []);
|
|
|
|
return { data, loading };
|
|
}
|