aboutsummaryrefslogtreecommitdiff
path: root/apps/web/components/graph/use-graph-data.ts
blob: 8db5757309f829292274279a4efcacc68c8c8783 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"use client"

import { useMemo } from "react"
import type { ViewportGraphNode, ViewportGraphEdge } from "@/lib/viewport-graph-types"
import type { GraphNode, GraphEdge } from "./types"
import { NODE_SIZES } from "./constants"

export function useGraphData(
	nodes: ViewportGraphNode[],
	edges: ViewportGraphEdge[],
): { nodes: GraphNode[]; edges: GraphEdge[] } {
	const graphNodes = useMemo((): GraphNode[] => {
		return nodes.map((node) => ({
			id: node.id,
			type: node.type,
			x: node.x,
			y: node.y,
			data: node.data,
			size: node.type === "document" ? NODE_SIZES.document : NODE_SIZES.memory,
			color: node.color,
			isHovered: node.isHovered,
			parentDocumentId: node.parentDocumentId,
		}))
	}, [nodes])

	const graphEdges = useMemo((): GraphEdge[] => {
		return edges.map((edge) => ({
			id: edge.id,
			source: typeof edge.source === "string" ? edge.source : edge.source.id,
			target: typeof edge.target === "string" ? edge.target : edge.target.id,
			similarity: edge.similarity,
			color: edge.color,
			opacity: edge.opacity,
			thickness: edge.thickness,
			edgeType: edge.edgeType,
		}))
	}, [edges])

	return { nodes: graphNodes, edges: graphEdges }
}