refactor: clean code
This commit is contained in:
@@ -26,13 +26,13 @@ const AddNode = ({ node, disabled }: AddNodeProps) => {
|
||||
return [
|
||||
[WorkflowNodeType.Apply, "workflow_node.apply.label", <SolutionOutlinedIcon />],
|
||||
[WorkflowNodeType.Deploy, "workflow_node.deploy.label", <CloudUploadOutlinedIcon />],
|
||||
[WorkflowNodeType.Notify, "workflow_node.notify.label", <SendOutlinedIcon />],
|
||||
[WorkflowNodeType.Branch, "workflow_node.branch.label", <SisternodeOutlinedIcon />],
|
||||
[WorkflowNodeType.ExecuteResultBranch, "workflow_node.execute_result_branch.label", <SisternodeOutlinedIcon />],
|
||||
[WorkflowNodeType.Notify, "workflow_node.notify.label", <SendOutlinedIcon />],
|
||||
]
|
||||
.filter(([type]) => {
|
||||
if (node.type !== WorkflowNodeType.Apply && node.type !== WorkflowNodeType.Deploy && type === WorkflowNodeType.ExecuteResultBranch) {
|
||||
return false;
|
||||
if (node.type !== WorkflowNodeType.Apply && node.type !== WorkflowNodeType.Deploy && node.type !== WorkflowNodeType.Notify) {
|
||||
return type !== WorkflowNodeType.ExecuteResultBranch;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -16,6 +16,8 @@ const ConditionNode = ({ node, disabled, branchId, branchIndex }: ConditionNodeP
|
||||
return (
|
||||
<>
|
||||
<Popover
|
||||
classNames={{ root: "shadow-md" }}
|
||||
styles={{ body: { padding: 0 } }}
|
||||
arrow={false}
|
||||
content={
|
||||
<SharedNode.Menu
|
||||
@@ -26,8 +28,6 @@ const ConditionNode = ({ node, disabled, branchId, branchIndex }: ConditionNodeP
|
||||
trigger={<Button color="primary" icon={<MoreOutlinedIcon />} variant="text" />}
|
||||
/>
|
||||
}
|
||||
overlayClassName="shadow-md"
|
||||
overlayInnerStyle={{ padding: 0 }}
|
||||
placement="rightTop"
|
||||
>
|
||||
<Card className="relative z-[1] mt-10 w-[256px] shadow-md" styles={{ body: { padding: 0 } }} hoverable>
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import { memo } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { MoreOutlined as MoreOutlinedIcon } from "@ant-design/icons";
|
||||
import { Button, Card, Popover } from "antd";
|
||||
import {
|
||||
CheckCircleOutlined as CheckCircleOutlinedIcon,
|
||||
CloseCircleOutlined as CloseCircleOutlinedIcon,
|
||||
MoreOutlined as MoreOutlinedIcon,
|
||||
} from "@ant-design/icons";
|
||||
import { Button, Card, Popover, theme } from "antd";
|
||||
|
||||
import { CheckCircleIcon, XCircleIcon } from "lucide-react";
|
||||
import { WorkflowNodeType } from "@/domain/workflow";
|
||||
import AddNode from "./AddNode";
|
||||
import SharedNode, { type SharedNodeProps } from "./_SharedNode";
|
||||
@@ -16,9 +19,13 @@ export type ConditionNodeProps = SharedNodeProps & {
|
||||
const ExecuteResultNode = ({ node, disabled, branchId, branchIndex }: ConditionNodeProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { token: themeToken } = theme.useToken();
|
||||
|
||||
return (
|
||||
<>
|
||||
<Popover
|
||||
classNames={{ root: "shadow-md" }}
|
||||
styles={{ body: { padding: 0 } }}
|
||||
arrow={false}
|
||||
content={
|
||||
<SharedNode.Menu
|
||||
@@ -29,8 +36,6 @@ const ExecuteResultNode = ({ node, disabled, branchId, branchIndex }: ConditionN
|
||||
trigger={<Button color="primary" icon={<MoreOutlinedIcon />} variant="text" />}
|
||||
/>
|
||||
}
|
||||
overlayClassName="shadow-md"
|
||||
overlayInnerStyle={{ padding: 0 }}
|
||||
placement="rightTop"
|
||||
>
|
||||
<Card className="relative z-[1] mt-10 w-[256px] shadow-md" styles={{ body: { padding: 0 } }} hoverable>
|
||||
@@ -38,12 +43,12 @@ const ExecuteResultNode = ({ node, disabled, branchId, branchIndex }: ConditionN
|
||||
<div className="flex items-center space-x-2">
|
||||
{node.type === WorkflowNodeType.ExecuteSuccess ? (
|
||||
<>
|
||||
<CheckCircleIcon size={18} className="text-green-500" />
|
||||
<CheckCircleOutlinedIcon style={{ color: themeToken.colorSuccess }} />
|
||||
<div>{t("workflow_node.execute_success.label")}</div>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<XCircleIcon size={18} className="text-red-500" />
|
||||
<CloseCircleOutlinedIcon style={{ color: themeToken.colorError }} />
|
||||
<div>{t("workflow_node.execute_failure.label")}</div>
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -64,6 +64,16 @@ type SharedNodeMenuProps = SharedNodeProps & {
|
||||
afterDelete?: () => void;
|
||||
};
|
||||
|
||||
const isBranchingNode = (node: WorkflowNode) => {
|
||||
return (
|
||||
node.type === WorkflowNodeType.Branch ||
|
||||
node.type === WorkflowNodeType.Condition ||
|
||||
node.type === WorkflowNodeType.ExecuteResultBranch ||
|
||||
node.type === WorkflowNodeType.ExecuteSuccess ||
|
||||
node.type === WorkflowNodeType.ExecuteFailure
|
||||
);
|
||||
};
|
||||
|
||||
const SharedNodeMenu = ({ trigger, node, disabled, branchId, branchIndex, afterUpdate, afterDelete }: SharedNodeMenuProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
@@ -91,13 +101,7 @@ const SharedNodeMenu = ({ trigger, node, disabled, branchId, branchIndex, afterU
|
||||
};
|
||||
|
||||
const handleDeleteClick = async () => {
|
||||
if (
|
||||
node.type === WorkflowNodeType.Branch ||
|
||||
node.type === WorkflowNodeType.Condition ||
|
||||
node.type === WorkflowNodeType.ExecuteResultBranch ||
|
||||
node.type === WorkflowNodeType.ExecuteSuccess ||
|
||||
node.type === WorkflowNodeType.ExecuteFailure
|
||||
) {
|
||||
if (isBranchingNode(node)) {
|
||||
await removeBranch(branchId!, branchIndex!);
|
||||
} else {
|
||||
await removeNode(node.id);
|
||||
@@ -116,19 +120,13 @@ const SharedNodeMenu = ({ trigger, node, disabled, branchId, branchIndex, afterU
|
||||
{
|
||||
key: "rename",
|
||||
disabled: disabled,
|
||||
label:
|
||||
node.type === WorkflowNodeType.Branch || node.type === WorkflowNodeType.Condition
|
||||
? t("workflow_node.action.rename_branch")
|
||||
: t("workflow_node.action.rename_node"),
|
||||
label: isBranchingNode(node) ? t("workflow_node.action.rename_branch") : t("workflow_node.action.rename_node"),
|
||||
icon: <FormOutlinedIcon />,
|
||||
onClick: () => {
|
||||
nameRef.current = node.name;
|
||||
|
||||
const dialog = modalApi.confirm({
|
||||
title:
|
||||
node.type === WorkflowNodeType.Branch || node.type === WorkflowNodeType.Condition
|
||||
? t("workflow_node.action.rename_branch")
|
||||
: t("workflow_node.action.rename_node"),
|
||||
title: isBranchingNode(node) ? t("workflow_node.action.rename_branch") : t("workflow_node.action.rename_node"),
|
||||
content: (
|
||||
<div className="pb-2 pt-4">
|
||||
<Input
|
||||
@@ -156,14 +154,7 @@ const SharedNodeMenu = ({ trigger, node, disabled, branchId, branchIndex, afterU
|
||||
{
|
||||
key: "remove",
|
||||
disabled: disabled || node.type === WorkflowNodeType.Start,
|
||||
label:
|
||||
node.type === WorkflowNodeType.Branch ||
|
||||
node.type === WorkflowNodeType.Condition ||
|
||||
node.type === WorkflowNodeType.ExecuteResultBranch ||
|
||||
node.type === WorkflowNodeType.ExecuteSuccess ||
|
||||
node.type === WorkflowNodeType.ExecuteFailure
|
||||
? t("workflow_node.action.remove_branch")
|
||||
: t("workflow_node.action.remove_node"),
|
||||
label: isBranchingNode(node) ? t("workflow_node.action.remove_branch") : t("workflow_node.action.remove_node"),
|
||||
icon: <CloseCircleOutlinedIcon />,
|
||||
danger: true,
|
||||
onClick: handleDeleteClick,
|
||||
@@ -193,10 +184,10 @@ const SharedNodeBlock = ({ children, node, disabled, onClick }: SharedNodeBlockP
|
||||
return (
|
||||
<>
|
||||
<Popover
|
||||
classNames={{ root: "shadow-md" }}
|
||||
styles={{ body: { padding: 0 } }}
|
||||
arrow={false}
|
||||
content={<SharedNodeMenu node={node} disabled={disabled} trigger={<Button color="primary" icon={<MoreOutlinedIcon />} variant="text" />} />}
|
||||
overlayClassName="shadow-md"
|
||||
overlayInnerStyle={{ padding: 0 }}
|
||||
placement="rightTop"
|
||||
>
|
||||
<Card className="relative w-[256px] overflow-hidden shadow-md" styles={{ body: { padding: 0 } }} hoverable>
|
||||
|
||||
Reference in New Issue
Block a user