import Show from "@/components/Show"; import { Button } from "@/components/ui/button"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import { Switch } from "@/components/ui/switch"; import { Toaster } from "@/components/ui/toaster"; import { useToast } from "@/components/ui/use-toast"; import End from "@/components/workflow/End"; import NodeRender from "@/components/workflow/NodeRender"; import WorkflowBaseInfoEditDialog from "@/components/workflow/WorkflowBaseInfoEditDialog"; import WorkflowProvider from "@/components/workflow/WorkflowProvider"; import { allNodesValidated, WorkflowNode } from "@/domain/workflow"; import { useWorkflowStore, WorkflowState } from "@/providers/workflow"; import { ArrowLeft } from "lucide-react"; import { useEffect, useMemo } from "react"; import { useNavigate, useSearchParams } from "react-router-dom"; import { useShallow } from "zustand/shallow"; const selectState = (state: WorkflowState) => ({ workflow: state.workflow, init: state.init, switchEnable: state.switchEnable, save: state.save, }); const WorkflowDetail = () => { // 3. 使用正确的选择器和 shallow 比较 const { workflow, init, switchEnable, save } = useWorkflowStore(useShallow(selectState)); // 从 url 中获取 workflowId const [searchParams] = useSearchParams(); const id = searchParams.get("id"); useEffect(() => { console.log(id); init(id ?? ""); }, [id]); const navigate = useNavigate(); const { toast } = useToast(); const elements = useMemo(() => { let current = workflow.draft as WorkflowNode; const elements: JSX.Element[] = []; while (current) { // 处理普通节点 elements.push(); current = current.next as WorkflowNode; } elements.push(); return elements; }, [workflow]); const handleBackClick = () => { navigate("/workflow"); }; const handleEnableChange = () => { if (!workflow.enabled && !allNodesValidated(workflow.draft as WorkflowNode)) { toast({ title: "无法启用", description: "有尚未设置完成的节点", variant: "destructive", }); return; } switchEnable(); }; const handleWorkflowSaveClick = () => { if (!allNodesValidated(workflow.draft as WorkflowNode)) { toast({ title: "保存失败", description: "有尚未设置完成的节点", variant: "destructive", }); return; } save(); }; return ( <> {workflow.name ? workflow.name : "未命名工作流"} {workflow.description ? workflow.description : "添加流程说明"} } /> 立即执行}> 保存变更 {elements} > ); }; export default WorkflowDetail;