import React from 'react'; import { IoIosPlay } from 'react-icons/io'; import { useNavigate } from 'react-router-dom'; import { useLanguage } from '../../../../providers/language/LanguageContext'; import { useWorkflowSelection } from '../../../../contexts/WorkflowSelectionContext'; import styles from '../ActionButton.module.css'; export interface PlayActionButtonProps { row: T; onPlay?: (row: T) => Promise | void; disabled?: boolean | { disabled: boolean; message?: string }; loading?: boolean; className?: string; title?: string; hookData?: any; // Contains all hook data including operations // Field mappings idField?: string; // Field name for the unique identifier nameField?: string; // Field name for display name contentField?: string; // Field name for content (e.g., 'content' for prompts, 'prompt' for workflows) // Navigation navigateTo?: string; // Path to navigate to after selection (default: 'start/dashboard') // Behavior mode?: 'workflow' | 'prompt'; // 'workflow' selects workflow, 'prompt' sets input value } export function PlayActionButton({ row, onPlay, disabled = false, loading = false, className = '', title, hookData, idField = 'id', nameField = 'name', contentField = 'content', navigateTo = 'start/dashboard', mode = 'prompt' }: PlayActionButtonProps) { const { t } = useLanguage(); const navigate = useNavigate(); const { selectWorkflow } = useWorkflowSelection(); // Extract disabled state and tooltip message const isDisabled = typeof disabled === 'boolean' ? disabled : disabled?.disabled || false; const disabledMessage = typeof disabled === 'object' ? disabled?.message : undefined; const handleClick = async (e: React.MouseEvent) => { e.stopPropagation(); if (!isDisabled && !loading) { try { // Call the onPlay callback if provided if (onPlay) { await onPlay(row); } if (mode === 'workflow') { // Workflow mode: select workflow and navigate const workflowId = (row as any)[idField]; if (!workflowId) { console.error('Workflow ID not found in row'); return; } selectWorkflow(workflowId); } else { // Prompt mode: set input value in dashboard const content = (row as any)[contentField]; if (content && typeof content === 'string') { // Dispatch event to set dashboard input value window.dispatchEvent(new CustomEvent('dashboardSetInput', { detail: { value: content } })); } } // Navigate to dashboard (or specified path) navigate(`/${navigateTo}`); } catch (error: any) { console.error('Error in PlayActionButton:', error); } } }; const buttonTitle = title || (mode === 'workflow' ? t('workflows.action.play', 'Play') : t('prompts.action.start', 'Start Prompt')); const isLoading = loading; const finalTitle = isDisabled && disabledMessage ? disabledMessage : buttonTitle; return ( ); } export default PlayActionButton;