Files
modeling-app/src/hooks/useEngineConnectionSubscriptions.ts
Kurt Hutten 758aac9328 fix unreliable channel (#2329)
* fix unreliable channel

* add test for hovering
2024-05-09 15:04:33 +10:00

44 lines
1.5 KiB
TypeScript

import { useEffect } from 'react'
import { editorManager, engineCommandManager } from 'lib/singletons'
import { useModelingContext } from './useModelingContext'
import { getEventForSelectWithPoint } from 'lib/selections'
export function useEngineConnectionSubscriptions() {
const { send, context } = useModelingContext()
useEffect(() => {
if (!engineCommandManager) return
const unSubHover = engineCommandManager.subscribeToUnreliable({
// Note this is our hover logic, "highlight_set_entity" is the event that is fired when we hover over an entity
event: 'highlight_set_entity',
callback: ({ data }) => {
if (data?.entity_id) {
const sourceRange = engineCommandManager.artifactMap?.[data.entity_id]
?.range || [0, 0]
editorManager.setHighlightRange(sourceRange)
} else if (
!editorManager.highlightRange ||
(editorManager.highlightRange[0] !== 0 &&
editorManager.highlightRange[1] !== 0)
) {
editorManager.setHighlightRange([0, 0])
}
},
})
const unSubClick = engineCommandManager.subscribeTo({
event: 'select_with_point',
callback: async (engineEvent) => {
const event = await getEventForSelectWithPoint(engineEvent, {
sketchEnginePathId: context.sketchEnginePathId,
})
event && send(event)
},
})
return () => {
unSubHover()
unSubClick()
}
}, [engineCommandManager, context?.sketchEnginePathId])
}