'use client' import { Circle, Group } from 'react-konva' import { useStage } from '../context/provider' import { entities } from '../../../wailsjs/wailsjs/go/models' import { KonvaEventObject } from 'konva/lib/Node' import { useProject } from '../../../context/Project/provider' type Props = { areas: entities.Area[] } const ConnectionPoints = (props: Props) => { const { isLinkAreaContextsVisible, scale, startingContextConnection, setStartingContextConnection } = useStage() const { requestConnectProcessedAreas } = useProject() const handleContextAreaMouseDown = async (e: KonvaEventObject) => { e.cancelBubble = true const clickedConnectionPoint = { isHead: e.currentTarget.attrs.isHead, areaId: e.currentTarget.attrs.id } if (!startingContextConnection) return setStartingContextConnection(clickedConnectionPoint) if (clickedConnectionPoint.isHead === startingContextConnection.isHead || clickedConnectionPoint.areaId === startingContextConnection.areaId) return setStartingContextConnection(null) const headId = startingContextConnection.isHead ? startingContextConnection.areaId : clickedConnectionPoint.areaId const tailId = !startingContextConnection.isHead ? startingContextConnection.areaId : clickedConnectionPoint.areaId setStartingContextConnection(null) try { await requestConnectProcessedAreas(headId, tailId) } catch (err) { console.warn('RequestConnectProcessedAreas', err) } } const renderConnectingPointsForArea = (a: entities.Area) => { if (!isLinkAreaContextsVisible) return <> const headConnector = const tailConnector = let connectorsToRender = [] if (!startingContextConnection) connectorsToRender = [headConnector, tailConnector] else if (startingContextConnection.isHead) connectorsToRender = [tailConnector] else connectorsToRender = [headConnector] if (startingContextConnection?.areaId === a.id) { let y = (startingContextConnection.isHead ? a.startY : a.endY) * scale connectorsToRender.push( setStartingContextConnection(null)} />) } return {connectorsToRender} } const renderAllConnectingPoints = () => props.areas.map(a => renderConnectingPointsForArea(a)) return {renderAllConnectingPoints()} } export default ConnectionPoints