import React from 'react'; import { cx } from '@emotion/css'; import { Dropdown, Menu, Button } from 'antd'; import { PlusOutlined } from '@ant-design/icons'; import { useAPIClient, useCompile } from '@nocobase/client'; import { useFlowContext } from './FlowContext'; import { Instruction, instructions } from './nodes'; import { addButtonClass } from './style'; import { NAMESPACE } from './locale'; interface AddButtonProps { upstream; branchIndex?: number | null; }; export function AddButton({ upstream, branchIndex = null }: AddButtonProps) { const compile = useCompile(); const api = useAPIClient(); const { workflow, onNodeAdded } = useFlowContext() ?? {}; if (!workflow) { return null; } const resource = api.resource('workflows.nodes', workflow.id); async function onCreate({ keyPath }) { const type = keyPath.pop(); const config = {}; const [optionKey] = keyPath; if (optionKey) { const { value } = instructions.get(type)?.options?.find(item => item.key === optionKey) ?? {}; Object.assign(config, value); } const { data: { data: node } } = await resource.create!({ values: { type, upstreamId: upstream?.id ?? null, branchIndex, config } }); onNodeAdded(node); } const groups = [ { value: 'control', name: `{{t("Control", { ns: "${NAMESPACE}" })}}` }, { value: 'collection', name: `{{t("Collection operations", { ns: "${NAMESPACE}" })}}` }, { value: 'manual', name: `{{t("Manual", { ns: "${NAMESPACE}" })}}` }, { value: 'extended', name: `{{t("Extended types", { ns: "${NAMESPACE}" })}}` }, ]; const instructionList = (Array.from(instructions.getValues()) as Instruction[]); return (