// This program has been developed by students from the bachelor Computer Science at Utrecht // University within the Software Project course. // © Copyright Utrecht University (Department of Information and Computing Sciences) import { Handle, type HandleProps, type Connection, useNodeId, useNodeConnections } from '@xyflow/react'; import { type HandleRule, useHandleRules} from "../HandleRuleLogic.ts"; import "./RuleBasedHandle.module.css"; export function MultiConnectionHandle({ id, type, rules = [], ...otherProps } : HandleProps & { rules?: HandleRule[]}) { let nodeId = useNodeId(); // this check is used to make sure that the handle code doesn't break when used inside a test, // since useNodeId would be undefined if the handle is not used inside a node nodeId = nodeId ? nodeId : "mockId"; const validate = useHandleRules(nodeId, id!, type!, rules); const connections = useNodeConnections({ id: nodeId, handleType: type, handleId: id! }) return ( { const result = validate(connection as Connection); return result.isSatisfied; }} /> ); } export function SingleConnectionHandle({ id, type, rules = [], ...otherProps } : HandleProps & { rules?: HandleRule[]}) { let nodeId = useNodeId(); // this check is used to make sure that the handle code doesn't break when used inside a test, // since useNodeId would be undefined if the handle is not used inside a node nodeId = nodeId ? nodeId : "mockId"; const validate = useHandleRules(nodeId, id!, type!, rules); const connections = useNodeConnections({ id: nodeId, handleType: type, handleId: id! }) return ( { const result = validate(connection as Connection); return result.isSatisfied; }} /> ); }