Spaces:
Sleeping
Sleeping
File size: 1,995 Bytes
3786a3f d737dbb 3786a3f d737dbb 3786a3f f14eb69 3786a3f d737dbb 3786a3f | 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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | import { create } from 'zustand';
export interface GraphNode {
id: string;
name: string;
type: string;
description?: string;
sourceDoc?: string;
val?: number;
community?: number;
}
export interface GraphLink {
source: string;
target: string;
type: string;
confidence?: number;
description?: string;
sourceDoc?: string;
}
export interface GraphData {
nodes: GraphNode[];
links: GraphLink[];
}
interface GraphState {
data: GraphData;
highlightedEntities: string[];
highlightedPaths: string[];
searchTerm: string;
visibleTypes: Record<string, boolean>;
visibleRelationships: Record<string, boolean>;
selectedEntity: GraphNode | null;
dim: 2 | 3;
setData: (data: GraphData) => void;
setHighlighted: (entities: string[], paths?: string[]) => void;
clearHighlighted: () => void;
setSearchTerm: (term: string) => void;
toggleType: (type: string) => void;
toggleRelationship: (rel: string) => void;
selectEntity: (entity: GraphNode | null) => void;
setDim: (dim: 2 | 3) => void;
}
export const useGraphStore = create<GraphState>((set) => ({
data: { nodes: [], links: [] },
highlightedEntities: [],
highlightedPaths: [],
searchTerm: '',
visibleTypes: {},
visibleRelationships: {},
selectedEntity: null,
dim: 2,
setData: (data) => set({ data }),
setHighlighted: (entities, paths = []) =>
set({ highlightedEntities: entities, highlightedPaths: paths }),
clearHighlighted: () => set({ highlightedEntities: [], highlightedPaths: [] }),
setSearchTerm: (term) => set({ searchTerm: term }),
toggleType: (type) =>
set((state) => ({
visibleTypes: { ...state.visibleTypes, [type]: !state.visibleTypes[type] },
})),
toggleRelationship: (rel) =>
set((state) => ({
visibleRelationships: {
...state.visibleRelationships,
[rel]: !state.visibleRelationships[rel],
},
})),
selectEntity: (entity) => set({ selectedEntity: entity }),
setDim: (dim) => set({ dim }),
}));
|