import { memo } from "react"; import { Arrow, ArrowPart } from "../../statecharts/concrete_syntax"; import { ArcDirection, euclideanDistance } from "../../util/geometry"; import { CORNER_HELPER_RADIUS } from "../parameters"; import { arraysEqual } from "@/util/util"; export const ArrowSVG = memo(function(props: { arrow: Arrow; selected: ArrowPart[]; error: string; highlight: boolean; fired: boolean; arc: ArcDirection; initialMarker: boolean }) { const { start, end, uid } = props.arrow; const radius = euclideanDistance(start, end) / 1.6; let largeArc = "1"; let arcOrLine = props.arc === "no" ? "L" : `A ${radius} ${radius} 0 ${largeArc} ${props.arc === "ccw" ? "0" : "1"}`; if (props.initialMarker) { // largeArc = "0"; arcOrLine = `A ${radius*2} ${radius*2} 0 0 1` } return {props.error && {props.error}} {/* selection helper circles */} {/* selection indicator circles */} {props.selected.includes("start") && } {props.selected.includes("end") && } ; }, (prevProps, nextProps) => { return prevProps.arrow === nextProps.arrow && arraysEqual(prevProps.selected, nextProps.selected) && prevProps.highlight === nextProps.highlight && prevProps.error === nextProps.error && prevProps.fired === nextProps.fired && prevProps.arc === nextProps.arc && prevProps.initialMarker === nextProps.initialMarker })