yangdx
commited on
Commit
·
9fab39c
1
Parent(s):
1ea39b5
Fix edge event and show edge label error
Browse files
lightrag_webui/src/components/graph/GraphControl.tsx
CHANGED
@@ -34,6 +34,8 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|
34 |
|
35 |
const { theme } = useTheme()
|
36 |
const hideUnselectedEdges = useSettingsStore.use.enableHideUnselectedEdges()
|
|
|
|
|
37 |
const selectedNode = useGraphStore.use.selectedNode()
|
38 |
const focusedNode = useGraphStore.use.focusedNode()
|
39 |
const selectedEdge = useGraphStore.use.selectedEdge()
|
@@ -59,39 +61,52 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|
59 |
const { setFocusedNode, setSelectedNode, setFocusedEdge, setSelectedEdge, clearSelection } =
|
60 |
useGraphStore.getState()
|
61 |
|
62 |
-
//
|
63 |
-
|
64 |
-
|
|
|
|
|
|
|
|
|
65 |
if (!isButtonPressed(event.event.original)) {
|
66 |
setFocusedNode(event.node)
|
67 |
}
|
68 |
},
|
69 |
-
leaveNode: (event) => {
|
70 |
if (!isButtonPressed(event.event.original)) {
|
71 |
setFocusedNode(null)
|
72 |
}
|
73 |
},
|
74 |
-
clickNode: (event) => {
|
75 |
setSelectedNode(event.node)
|
76 |
setSelectedEdge(null)
|
77 |
},
|
78 |
-
|
|
|
|
|
|
|
|
|
|
|
79 |
setSelectedEdge(event.edge)
|
80 |
setSelectedNode(null)
|
81 |
-
}
|
82 |
-
|
|
|
83 |
if (!isButtonPressed(event.event.original)) {
|
84 |
setFocusedEdge(event.edge)
|
85 |
}
|
86 |
-
}
|
87 |
-
|
|
|
88 |
if (!isButtonPressed(event.event.original)) {
|
89 |
setFocusedEdge(null)
|
90 |
}
|
91 |
-
}
|
92 |
-
|
93 |
-
|
94 |
-
|
|
|
|
|
95 |
|
96 |
/**
|
97 |
* When component mount or hovered node change
|
@@ -102,7 +117,13 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|
102 |
const labelColor = isDarkTheme ? Constants.labelColorDarkTheme : undefined
|
103 |
const edgeColor = isDarkTheme ? Constants.edgeColorDarkTheme : undefined
|
104 |
|
|
|
105 |
setSettings({
|
|
|
|
|
|
|
|
|
|
|
106 |
nodeReducer: (node, data) => {
|
107 |
const graph = sigma.getGraph()
|
108 |
const newData: NodeType & {
|
@@ -141,6 +162,8 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|
141 |
}
|
142 |
return newData
|
143 |
},
|
|
|
|
|
144 |
edgeReducer: (edge, data) => {
|
145 |
const graph = sigma.getGraph()
|
146 |
const newData = { ...data, hidden: false, labelColor, color: edgeColor }
|
@@ -182,7 +205,9 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|
182 |
sigma,
|
183 |
disableHoverEffect,
|
184 |
theme,
|
185 |
-
hideUnselectedEdges
|
|
|
|
|
186 |
])
|
187 |
|
188 |
return null
|
|
|
34 |
|
35 |
const { theme } = useTheme()
|
36 |
const hideUnselectedEdges = useSettingsStore.use.enableHideUnselectedEdges()
|
37 |
+
const enableEdgeEvents = useSettingsStore.use.enableEdgeEvents()
|
38 |
+
const renderEdgeLabels = useSettingsStore.use.showEdgeLabel()
|
39 |
const selectedNode = useGraphStore.use.selectedNode()
|
40 |
const focusedNode = useGraphStore.use.focusedNode()
|
41 |
const selectedEdge = useGraphStore.use.selectedEdge()
|
|
|
61 |
const { setFocusedNode, setSelectedNode, setFocusedEdge, setSelectedEdge, clearSelection } =
|
62 |
useGraphStore.getState()
|
63 |
|
64 |
+
// Define event types
|
65 |
+
type NodeEvent = { node: string; event: { original: MouseEvent | TouchEvent } }
|
66 |
+
type EdgeEvent = { edge: string; event: { original: MouseEvent | TouchEvent } }
|
67 |
+
|
68 |
+
// Register all events, but edge events will only be processed if enableEdgeEvents is true
|
69 |
+
const events: Record<string, any> = {
|
70 |
+
enterNode: (event: NodeEvent) => {
|
71 |
if (!isButtonPressed(event.event.original)) {
|
72 |
setFocusedNode(event.node)
|
73 |
}
|
74 |
},
|
75 |
+
leaveNode: (event: NodeEvent) => {
|
76 |
if (!isButtonPressed(event.event.original)) {
|
77 |
setFocusedNode(null)
|
78 |
}
|
79 |
},
|
80 |
+
clickNode: (event: NodeEvent) => {
|
81 |
setSelectedNode(event.node)
|
82 |
setSelectedEdge(null)
|
83 |
},
|
84 |
+
clickStage: () => clearSelection()
|
85 |
+
}
|
86 |
+
|
87 |
+
// Only add edge event handlers if enableEdgeEvents is true
|
88 |
+
if (enableEdgeEvents) {
|
89 |
+
events.clickEdge = (event: EdgeEvent) => {
|
90 |
setSelectedEdge(event.edge)
|
91 |
setSelectedNode(null)
|
92 |
+
}
|
93 |
+
|
94 |
+
events.enterEdge = (event: EdgeEvent) => {
|
95 |
if (!isButtonPressed(event.event.original)) {
|
96 |
setFocusedEdge(event.edge)
|
97 |
}
|
98 |
+
}
|
99 |
+
|
100 |
+
events.leaveEdge = (event: EdgeEvent) => {
|
101 |
if (!isButtonPressed(event.event.original)) {
|
102 |
setFocusedEdge(null)
|
103 |
}
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
// Register the events
|
108 |
+
registerEvents(events)
|
109 |
+
}, [registerEvents, enableEdgeEvents])
|
110 |
|
111 |
/**
|
112 |
* When component mount or hovered node change
|
|
|
117 |
const labelColor = isDarkTheme ? Constants.labelColorDarkTheme : undefined
|
118 |
const edgeColor = isDarkTheme ? Constants.edgeColorDarkTheme : undefined
|
119 |
|
120 |
+
// Update edge-related settings directly without recreating the sigma container
|
121 |
setSettings({
|
122 |
+
// Update edge-specific settings
|
123 |
+
enableEdgeEvents,
|
124 |
+
renderEdgeLabels,
|
125 |
+
|
126 |
+
// Node reducer for node appearance
|
127 |
nodeReducer: (node, data) => {
|
128 |
const graph = sigma.getGraph()
|
129 |
const newData: NodeType & {
|
|
|
162 |
}
|
163 |
return newData
|
164 |
},
|
165 |
+
|
166 |
+
// Edge reducer for edge appearance
|
167 |
edgeReducer: (edge, data) => {
|
168 |
const graph = sigma.getGraph()
|
169 |
const newData = { ...data, hidden: false, labelColor, color: edgeColor }
|
|
|
205 |
sigma,
|
206 |
disableHoverEffect,
|
207 |
theme,
|
208 |
+
hideUnselectedEdges,
|
209 |
+
enableEdgeEvents,
|
210 |
+
renderEdgeLabels
|
211 |
])
|
212 |
|
213 |
return null
|
lightrag_webui/src/features/GraphViewer.tsx
CHANGED
@@ -124,9 +124,7 @@ const GraphViewer = () => {
|
|
124 |
const showNodeSearchBar = useSettingsStore.use.showNodeSearchBar()
|
125 |
const renderLabels = useSettingsStore.use.showNodeLabel()
|
126 |
|
127 |
-
const enableEdgeEvents = useSettingsStore.use.enableEdgeEvents()
|
128 |
const enableNodeDrag = useSettingsStore.use.enableNodeDrag()
|
129 |
-
const renderEdgeLabels = useSettingsStore.use.showEdgeLabel()
|
130 |
|
131 |
// Handle component mount/unmount and tab visibility
|
132 |
useEffect(() => {
|
@@ -146,14 +144,14 @@ const GraphViewer = () => {
|
|
146 |
}
|
147 |
}, [isGraphTabVisible, shouldRender, isFetching])
|
148 |
|
|
|
|
|
149 |
useEffect(() => {
|
150 |
setSigmaSettings({
|
151 |
...defaultSigmaSettings,
|
152 |
-
enableEdgeEvents,
|
153 |
-
renderEdgeLabels,
|
154 |
renderLabels
|
155 |
})
|
156 |
-
}, [renderLabels
|
157 |
|
158 |
const onSearchFocus = useCallback((value: GraphSearchOption | null) => {
|
159 |
if (value === null) useGraphStore.getState().setFocusedNode(null)
|
|
|
124 |
const showNodeSearchBar = useSettingsStore.use.showNodeSearchBar()
|
125 |
const renderLabels = useSettingsStore.use.showNodeLabel()
|
126 |
|
|
|
127 |
const enableNodeDrag = useSettingsStore.use.enableNodeDrag()
|
|
|
128 |
|
129 |
// Handle component mount/unmount and tab visibility
|
130 |
useEffect(() => {
|
|
|
144 |
}
|
145 |
}, [isGraphTabVisible, shouldRender, isFetching])
|
146 |
|
147 |
+
// Initialize sigma settings once on component mount
|
148 |
+
// Edge-related settings will be updated in GraphControl using useSetSettings
|
149 |
useEffect(() => {
|
150 |
setSigmaSettings({
|
151 |
...defaultSigmaSettings,
|
|
|
|
|
152 |
renderLabels
|
153 |
})
|
154 |
+
}, [renderLabels])
|
155 |
|
156 |
const onSearchFocus = useCallback((value: GraphSearchOption | null) => {
|
157 |
if (value === null) useGraphStore.getState().setFocusedNode(null)
|