Spaces:
Build error
Build error
import { useCallback } from 'react' | |
import { useStoreApi } from 'reactflow' | |
import type { Node } from '../types' | |
import { useWorkflowStore } from '../store' | |
export const useHelpline = () => { | |
const store = useStoreApi() | |
const workflowStore = useWorkflowStore() | |
const handleSetHelpline = useCallback((node: Node) => { | |
const { getNodes } = store.getState() | |
const nodes = getNodes() | |
const { | |
setHelpLineHorizontal, | |
setHelpLineVertical, | |
} = workflowStore.getState() | |
if (node.data.isInIteration) { | |
return { | |
showHorizontalHelpLineNodes: [], | |
showVerticalHelpLineNodes: [], | |
} | |
} | |
const showHorizontalHelpLineNodes = nodes.filter((n) => { | |
if (n.id === node.id) | |
return false | |
if (n.data.isInIteration) | |
return false | |
const nY = Math.ceil(n.position.y) | |
const nodeY = Math.ceil(node.position.y) | |
if (nY - nodeY < 5 && nY - nodeY > -5) | |
return true | |
return false | |
}).sort((a, b) => a.position.x - b.position.x) | |
const showHorizontalHelpLineNodesLength = showHorizontalHelpLineNodes.length | |
if (showHorizontalHelpLineNodesLength > 0) { | |
const first = showHorizontalHelpLineNodes[0] | |
const last = showHorizontalHelpLineNodes[showHorizontalHelpLineNodesLength - 1] | |
const helpLine = { | |
top: first.position.y, | |
left: first.position.x, | |
width: last.position.x + last.width! - first.position.x, | |
} | |
if (node.position.x < first.position.x) { | |
helpLine.left = node.position.x | |
helpLine.width = first.position.x + first.width! - node.position.x | |
} | |
if (node.position.x > last.position.x) | |
helpLine.width = node.position.x + node.width! - first.position.x | |
setHelpLineHorizontal(helpLine) | |
} | |
else { | |
setHelpLineHorizontal() | |
} | |
const showVerticalHelpLineNodes = nodes.filter((n) => { | |
if (n.id === node.id) | |
return false | |
if (n.data.isInIteration) | |
return false | |
const nX = Math.ceil(n.position.x) | |
const nodeX = Math.ceil(node.position.x) | |
if (nX - nodeX < 5 && nX - nodeX > -5) | |
return true | |
return false | |
}).sort((a, b) => a.position.x - b.position.x) | |
const showVerticalHelpLineNodesLength = showVerticalHelpLineNodes.length | |
if (showVerticalHelpLineNodesLength > 0) { | |
const first = showVerticalHelpLineNodes[0] | |
const last = showVerticalHelpLineNodes[showVerticalHelpLineNodesLength - 1] | |
const helpLine = { | |
top: first.position.y, | |
left: first.position.x, | |
height: last.position.y + last.height! - first.position.y, | |
} | |
if (node.position.y < first.position.y) { | |
helpLine.top = node.position.y | |
helpLine.height = first.position.y + first.height! - node.position.y | |
} | |
if (node.position.y > last.position.y) | |
helpLine.height = node.position.y + node.height! - first.position.y | |
setHelpLineVertical(helpLine) | |
} | |
else { | |
setHelpLineVertical() | |
} | |
return { | |
showHorizontalHelpLineNodes, | |
showVerticalHelpLineNodes, | |
} | |
}, [store, workflowStore]) | |
return { | |
handleSetHelpline, | |
} | |
} | |