import { forwardRef, useImperativeHandle, useState } from 'react' import { useTranslation } from 'react-i18next' import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger, } from '@/app/components/base/portal-to-follow-elem' import ShortcutsName from '../shortcuts-name' export type TriggerOption = { id: string type: 'user_input' | 'schedule' | 'webhook' | 'plugin' | 'all' name: string icon: React.ReactNode nodeId?: string enabled: boolean } export type TestRunOptions = { userInput?: TriggerOption triggers: TriggerOption[] runAll?: TriggerOption } type TestRunMenuProps = { options: TestRunOptions onSelect: (option: TriggerOption) => void children: React.ReactNode } export type TestRunMenuRef = { toggle: () => void } const TestRunMenu = forwardRef(({ options, onSelect, children, }, ref) => { const { t } = useTranslation() const [open, setOpen] = useState(false) useImperativeHandle(ref, () => ({ toggle: () => setOpen(prev => !prev), })) const handleSelect = (option: TriggerOption) => { onSelect(option) setOpen(false) } const renderOption = (option: TriggerOption, shortcutKey: string) => (
handleSelect(option)} >
{option.icon}
{option.name}
) const hasUserInput = !!options.userInput const hasTriggers = options.triggers.length > 0 const hasRunAll = !!options.runAll let currentIndex = 0 return ( setOpen(!open)}>
{children}
{t('workflow.common.chooseStartNodeToRun')}
{hasUserInput && renderOption(options.userInput!, '~')} {(hasTriggers || hasRunAll) && hasUserInput && (
)} {hasRunAll && renderOption(options.runAll!, String(currentIndex++))} {hasTriggers && options.triggers.map(trigger => renderOption(trigger, String(currentIndex++)), )}
) }) TestRunMenu.displayName = 'TestRunMenu' export default TestRunMenu