BranchFrame.tsx 1.4 KB

12345678910111213141516171819202122
  1. import { ArrowRight, ChevronUp, GitBranch } from "lucide-react";
  2. import type { NodeProps } from "@xyflow/react";
  3. import type { CanvasNodeData } from "@/lib/layout";
  4. import { StatusBadge } from "@/components/ui/Badges";
  5. import { SourceComparisonButton } from "@/components/flow/SourceComparisonButton";
  6. export function BranchFrame({ data }: NodeProps) {
  7. const node = data as unknown as CanvasNodeData;
  8. const item = node.item;
  9. if (!item || item.itemType !== "branch-summary") return null;
  10. return <section className="branchFrame" aria-label={`方案 ${item.branchId} 实现 Agent 展开流程`}>
  11. <header>
  12. <div className="branchFrameTitle"><span><GitBranch size={14} />实现 Agent</span><strong>方案 {item.branchId}</strong></div>
  13. <StatusBadge status={item.branch.status} />
  14. <div className="branchFrameActions">
  15. <button type="button" className="nodeAction nodrag nopan" onClick={(event) => { event.stopPropagation(); node.onToggleBranch(item.roundIndex, item.branchId); }}><ChevronUp size={14} />收起方案过程</button>
  16. {item.detailRef ? <button type="button" className="nodeAction nodrag nopan" data-focus-return={`${item.id}:business`} onClick={(event) => { event.stopPropagation(); node.onOpen(item, "business"); }}>查看方案汇总<ArrowRight size={14} /></button> : null}
  17. <SourceComparisonButton item={item} onOpen={node.onOpen} />
  18. </div>
  19. </header>
  20. </section>;
  21. }