import "../../style/steps_tree.css" import { StepInfoNode } from "../../model/tactic/Tactic" import BendableArrow from "../arrows/BendableArrow" import { ReactNode, useMemo, useRef } from "react" import AddSvg from "../../assets/icon/add.svg?react" import RemoveSvg from "../../assets/icon/remove.svg?react" import { getStepName } from "../../editor/StepsDomain.ts" export interface StepsTreeProps { root: StepInfoNode selectedStepId: number onAddChildren: (parent: StepInfoNode) => void onRemoveNode: (node: StepInfoNode) => void onStepSelected: (node: StepInfoNode) => void } export default function StepsTree({ root, selectedStepId, onAddChildren, onRemoveNode, onStepSelected, }: StepsTreeProps) { return (
) } interface StepsTreeContentProps { node: StepInfoNode rootNode: StepInfoNode selectedStepId: number onAddChildren: (parent: StepInfoNode) => void onRemoveNode: (node: StepInfoNode) => void onStepSelected: (node: StepInfoNode) => void } function StepsTreeNode({ node, rootNode, selectedStepId, onAddChildren, onRemoveNode, onStepSelected, }: StepsTreeContentProps) { const ref = useRef(null) return (
{node.children.map((child) => ( {}} forceStraight={true} wavy={false} readOnly={true} //TODO remove magic constants startRadius={10} endRadius={10} /> ))} onAddChildren(node)} onRemoveButtonClicked={ rootNode.id === node.id ? undefined : () => onRemoveNode(node) } onSelected={() => onStepSelected(node)}>

{useMemo( () => getStepName(rootNode, node.id), [node.id, rootNode], )}

{node.children.map((child) => ( ))}
) } interface StepPieceProps { id: number isSelected: boolean onAddButtonClicked?: () => void onRemoveButtonClicked?: () => void onSelected: () => void children?: ReactNode } function StepPiece({ id, isSelected, onAddButtonClicked, onRemoveButtonClicked, onSelected, children, }: StepPieceProps) { return (
{onAddButtonClicked && ( )} {onRemoveButtonClicked && ( )}
{children}
) }