import { Handle, type NodeProps, Position, type Node, } from '@xyflow/react'; import { Toolbar } from '../components/NodeComponents'; import styles from '../../VisProg.module.css'; import { TextField } from '../../../../components/TextField'; import useFlowStore from '../VisProgStores'; /** * The default data dot a phase node * @param label: the label of this phase * @param droppable: whether this node is droppable from the drop bar (initialized as true) * @param desciption: description of the goal * @param hasReduce: whether this node has reducing functionality (true by default) */ export type GoalNodeData = { label: string; description: string; droppable: boolean; achieved: boolean; hasReduce: boolean; }; export type GoalNode = Node /** * Defines how a Goal node should be rendered * @param props NodeProps, like id, label, children * @returns React.JSX.Element */ export default function GoalNode({id, data}: NodeProps) { const {updateNodeData} = useFlowStore(); const text_input_id = `goal_${id}_text_input`; const checkbox_id = `goal_${id}_checkbox`; const setDescription = (value: string) => { updateNodeData(id, {...data, description: value}); } const setAchieved = (value: boolean) => { updateNodeData(id, {...data, achieved: value}); } return <>
setDescription(val)} placeholder={"To ..."} />
setAchieved(e.target.checked)} />
; } /** * Reduces each Goal, including its children down into its relevant data. * @param node The Node Properties of this node. * @param _nodes all the nodes in the graph */ export function GoalReduce(node: Node, _nodes: Node[]) { const data = node.data as GoalNodeData; return { id: node.id, label: data.label, description: data.description, achieved: data.achieved, } } /** * This function is called whenever a connection is made with this node type as the target * @param _thisNode the node of this node type which function is called * @param _sourceNodeId the source of the received connection */ export function GoalConnectionTarget(_thisNode: Node, _sourceNodeId: string) { // no additional connection logic exists yet } /** * This function is called whenever a connection is made with this node type as the source * @param _thisNode the node of this node type which function is called * @param _targetNodeId the target of the created connection */ export function GoalConnectionSource(_thisNode: Node, _targetNodeId: string) { // no additional connection logic exists yet } /** * This function is called whenever a connection is disconnected with this node type as the target * @param _thisNode the node of this node type which function is called * @param _sourceNodeId the source of the disconnected connection */ export function GoalDisconnectionTarget(_thisNode: Node, _sourceNodeId: string) { // no additional connection logic exists yet } /** * This function is called whenever a connection is disconnected with this node type as the source * @param _thisNode the node of this node type which function is called * @param _targetNodeId the target of the diconnected connection */ export function GoalDisconnectionSource(_thisNode: Node, _targetNodeId: string) { // no additional connection logic exists yet }