import { useTranslation } from "react-i18next"; import { Dropdown } from "antd"; import { DeleteOutlined as DeleteOutlinedIcon, EllipsisOutlined as EllipsisOutlinedIcon } from "@ant-design/icons"; import Show from "@/components/Show"; import AddNode from "./AddNode"; import { usePanel } from "./PanelProvider"; import PanelBody from "./PanelBody"; import { useZustandShallowSelector } from "@/hooks"; import { deployProvidersMap } from "@/domain/provider"; import { notifyChannelsMap } from "@/domain/settings"; import { type WorkflowNode, WorkflowNodeType } from "@/domain/workflow"; import { useWorkflowStore } from "@/stores/workflow"; type NodeProps = { data: WorkflowNode; }; const i18nPrefix = "workflow.node"; const Node = ({ data }: NodeProps) => { const { updateNode, removeNode } = useWorkflowStore(useZustandShallowSelector(["updateNode", "removeNode"])); const handleNameBlur = (e: React.FocusEvent) => { updateNode({ ...data, name: e.target.innerText }); }; const { showPanel } = usePanel(); const { t } = useTranslation(); const handleNodeSettingClick = () => { showPanel({ name: data.name, children: , }); }; const getSetting = () => { if (!data.validated) { return <>{t(`${i18nPrefix}.setting.label`)}; } switch (data.type) { case WorkflowNodeType.Start: return (
{t(`workflow.props.trigger.manual`)}}> {t(`workflow.props.trigger.auto`) + ":"}
{data.config?.crontab as string}
); case WorkflowNodeType.Apply: return
{data.config?.domain as string}
; case WorkflowNodeType.Deploy: { const provider = deployProvidersMap.get(data.config?.providerType as string); return (
{t(provider?.name ?? "")}
); } case WorkflowNodeType.Notify: { const channelLabel = notifyChannelsMap.get(data.config?.channel as string); return (
{t(channelLabel?.name ?? "")}
{(data.config?.subject as string) ?? ""}
); } default: return <>{t(`${i18nPrefix}.setting.label`)}; } }; return ( <>
{data.type != WorkflowNodeType.Start && ( <> , danger: true, onClick: () => { removeNode(data.id); }, }, ], }} trigger={["click"]} >
)}
{data.name}
{getSetting()}
); }; export default Node;