Fix edge event and show edge label error
This commit is contained in:
@@ -34,6 +34,8 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|||||||
|
|
||||||
const { theme } = useTheme()
|
const { theme } = useTheme()
|
||||||
const hideUnselectedEdges = useSettingsStore.use.enableHideUnselectedEdges()
|
const hideUnselectedEdges = useSettingsStore.use.enableHideUnselectedEdges()
|
||||||
|
const enableEdgeEvents = useSettingsStore.use.enableEdgeEvents()
|
||||||
|
const renderEdgeLabels = useSettingsStore.use.showEdgeLabel()
|
||||||
const selectedNode = useGraphStore.use.selectedNode()
|
const selectedNode = useGraphStore.use.selectedNode()
|
||||||
const focusedNode = useGraphStore.use.focusedNode()
|
const focusedNode = useGraphStore.use.focusedNode()
|
||||||
const selectedEdge = useGraphStore.use.selectedEdge()
|
const selectedEdge = useGraphStore.use.selectedEdge()
|
||||||
@@ -59,39 +61,52 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|||||||
const { setFocusedNode, setSelectedNode, setFocusedEdge, setSelectedEdge, clearSelection } =
|
const { setFocusedNode, setSelectedNode, setFocusedEdge, setSelectedEdge, clearSelection } =
|
||||||
useGraphStore.getState()
|
useGraphStore.getState()
|
||||||
|
|
||||||
// Register the events
|
// Define event types
|
||||||
registerEvents({
|
type NodeEvent = { node: string; event: { original: MouseEvent | TouchEvent } }
|
||||||
enterNode: (event) => {
|
type EdgeEvent = { edge: string; event: { original: MouseEvent | TouchEvent } }
|
||||||
|
|
||||||
|
// Register all events, but edge events will only be processed if enableEdgeEvents is true
|
||||||
|
const events: Record<string, any> = {
|
||||||
|
enterNode: (event: NodeEvent) => {
|
||||||
if (!isButtonPressed(event.event.original)) {
|
if (!isButtonPressed(event.event.original)) {
|
||||||
setFocusedNode(event.node)
|
setFocusedNode(event.node)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
leaveNode: (event) => {
|
leaveNode: (event: NodeEvent) => {
|
||||||
if (!isButtonPressed(event.event.original)) {
|
if (!isButtonPressed(event.event.original)) {
|
||||||
setFocusedNode(null)
|
setFocusedNode(null)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clickNode: (event) => {
|
clickNode: (event: NodeEvent) => {
|
||||||
setSelectedNode(event.node)
|
setSelectedNode(event.node)
|
||||||
setSelectedEdge(null)
|
setSelectedEdge(null)
|
||||||
},
|
},
|
||||||
clickEdge: (event) => {
|
clickStage: () => clearSelection()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only add edge event handlers if enableEdgeEvents is true
|
||||||
|
if (enableEdgeEvents) {
|
||||||
|
events.clickEdge = (event: EdgeEvent) => {
|
||||||
setSelectedEdge(event.edge)
|
setSelectedEdge(event.edge)
|
||||||
setSelectedNode(null)
|
setSelectedNode(null)
|
||||||
},
|
}
|
||||||
enterEdge: (event) => {
|
|
||||||
|
events.enterEdge = (event: EdgeEvent) => {
|
||||||
if (!isButtonPressed(event.event.original)) {
|
if (!isButtonPressed(event.event.original)) {
|
||||||
setFocusedEdge(event.edge)
|
setFocusedEdge(event.edge)
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
leaveEdge: (event) => {
|
|
||||||
|
events.leaveEdge = (event: EdgeEvent) => {
|
||||||
if (!isButtonPressed(event.event.original)) {
|
if (!isButtonPressed(event.event.original)) {
|
||||||
setFocusedEdge(null)
|
setFocusedEdge(null)
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
clickStage: () => clearSelection()
|
}
|
||||||
})
|
|
||||||
}, [registerEvents])
|
// Register the events
|
||||||
|
registerEvents(events)
|
||||||
|
}, [registerEvents, enableEdgeEvents])
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When component mount or hovered node change
|
* When component mount or hovered node change
|
||||||
@@ -102,7 +117,13 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|||||||
const labelColor = isDarkTheme ? Constants.labelColorDarkTheme : undefined
|
const labelColor = isDarkTheme ? Constants.labelColorDarkTheme : undefined
|
||||||
const edgeColor = isDarkTheme ? Constants.edgeColorDarkTheme : undefined
|
const edgeColor = isDarkTheme ? Constants.edgeColorDarkTheme : undefined
|
||||||
|
|
||||||
|
// Update edge-related settings directly without recreating the sigma container
|
||||||
setSettings({
|
setSettings({
|
||||||
|
// Update edge-specific settings
|
||||||
|
enableEdgeEvents,
|
||||||
|
renderEdgeLabels,
|
||||||
|
|
||||||
|
// Node reducer for node appearance
|
||||||
nodeReducer: (node, data) => {
|
nodeReducer: (node, data) => {
|
||||||
const graph = sigma.getGraph()
|
const graph = sigma.getGraph()
|
||||||
const newData: NodeType & {
|
const newData: NodeType & {
|
||||||
@@ -141,6 +162,8 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|||||||
}
|
}
|
||||||
return newData
|
return newData
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Edge reducer for edge appearance
|
||||||
edgeReducer: (edge, data) => {
|
edgeReducer: (edge, data) => {
|
||||||
const graph = sigma.getGraph()
|
const graph = sigma.getGraph()
|
||||||
const newData = { ...data, hidden: false, labelColor, color: edgeColor }
|
const newData = { ...data, hidden: false, labelColor, color: edgeColor }
|
||||||
@@ -182,7 +205,9 @@ const GraphControl = ({ disableHoverEffect }: { disableHoverEffect?: boolean })
|
|||||||
sigma,
|
sigma,
|
||||||
disableHoverEffect,
|
disableHoverEffect,
|
||||||
theme,
|
theme,
|
||||||
hideUnselectedEdges
|
hideUnselectedEdges,
|
||||||
|
enableEdgeEvents,
|
||||||
|
renderEdgeLabels
|
||||||
])
|
])
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
@@ -124,9 +124,7 @@ const GraphViewer = () => {
|
|||||||
const showNodeSearchBar = useSettingsStore.use.showNodeSearchBar()
|
const showNodeSearchBar = useSettingsStore.use.showNodeSearchBar()
|
||||||
const renderLabels = useSettingsStore.use.showNodeLabel()
|
const renderLabels = useSettingsStore.use.showNodeLabel()
|
||||||
|
|
||||||
const enableEdgeEvents = useSettingsStore.use.enableEdgeEvents()
|
|
||||||
const enableNodeDrag = useSettingsStore.use.enableNodeDrag()
|
const enableNodeDrag = useSettingsStore.use.enableNodeDrag()
|
||||||
const renderEdgeLabels = useSettingsStore.use.showEdgeLabel()
|
|
||||||
|
|
||||||
// Handle component mount/unmount and tab visibility
|
// Handle component mount/unmount and tab visibility
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -146,14 +144,14 @@ const GraphViewer = () => {
|
|||||||
}
|
}
|
||||||
}, [isGraphTabVisible, shouldRender, isFetching])
|
}, [isGraphTabVisible, shouldRender, isFetching])
|
||||||
|
|
||||||
|
// Initialize sigma settings once on component mount
|
||||||
|
// Edge-related settings will be updated in GraphControl using useSetSettings
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setSigmaSettings({
|
setSigmaSettings({
|
||||||
...defaultSigmaSettings,
|
...defaultSigmaSettings,
|
||||||
enableEdgeEvents,
|
|
||||||
renderEdgeLabels,
|
|
||||||
renderLabels
|
renderLabels
|
||||||
})
|
})
|
||||||
}, [renderLabels, enableEdgeEvents, renderEdgeLabels])
|
}, [renderLabels])
|
||||||
|
|
||||||
const onSearchFocus = useCallback((value: GraphSearchOption | null) => {
|
const onSearchFocus = useCallback((value: GraphSearchOption | null) => {
|
||||||
if (value === null) useGraphStore.getState().setFocusedNode(null)
|
if (value === null) useGraphStore.getState().setFocusedNode(null)
|
||||||
|
Reference in New Issue
Block a user