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
- // Register the events
63
- registerEvents({
64
- enterNode: (event) => {
 
 
 
 
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
- clickEdge: (event) => {
 
 
 
 
 
79
  setSelectedEdge(event.edge)
80
  setSelectedNode(null)
81
- },
82
- enterEdge: (event) => {
 
83
  if (!isButtonPressed(event.event.original)) {
84
  setFocusedEdge(event.edge)
85
  }
86
- },
87
- leaveEdge: (event) => {
 
88
  if (!isButtonPressed(event.event.original)) {
89
  setFocusedEdge(null)
90
  }
91
- },
92
- clickStage: () => clearSelection()
93
- })
94
- }, [registerEvents])
 
 
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, enableEdgeEvents, renderEdgeLabels])
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)