import React, { useEffect, useState } from 'react'; import { Link, useHistory } from 'react-router-dom'; import { Dropdown, Menu, Button, Tag, Switch, message } from 'antd'; import { DownOutlined, RightOutlined, EllipsisOutlined } from '@ant-design/icons'; import { cx } from '@emotion/css'; import { useTranslation } from 'react-i18next'; import classnames from 'classnames'; import { ActionContext, SchemaComponent, useDocumentTitle, useResourceActionContext, useResourceContext } from '@nocobase/client'; import { FlowContext } from './FlowContext'; import { branchBlockClass, nodeCardClass, nodeMetaClass, workflowVersionDropdownClass } from './style'; import { TriggerConfig } from './triggers'; import { Branch } from './Branch'; import { executionCollection, executionSchema } from './schemas/executions'; import { ExecutionLink } from './ExecutionLink'; import { ExecutionResourceProvider } from './ExecutionResourceProvider'; import { lang, NAMESPACE } from './locale'; function makeNodes(nodes): void { const nodesMap = new Map(); nodes.forEach(item => nodesMap.set(item.id, item)); for (let node of nodesMap.values()) { if (node.upstreamId) { node.upstream = nodesMap.get(node.upstreamId); } if (node.downstreamId) { node.downstream = nodesMap.get(node.downstreamId); } } } export function WorkflowCanvas() { const history = useHistory(); const { data, refresh, loading } = useResourceActionContext(); const { resource, targetKey } = useResourceContext(); const { setTitle } = useDocumentTitle(); const [visible, setVisible] = useState(false); useEffect(() => { const { title } = data?.data ?? {}; setTitle(`${lang('Workflow')}${title ? `: ${title}` : ''}`); }, [data?.data]); if (!data?.data && !loading) { return