import React, { useEffect, useState } from "react"; import templateVersionsService, { CreateWorkflowTemplateVersion, TaskDefinition, TaskMetadata, } from "../services/WorkflowTemplateService"; import TaskList from "./TaskList"; import { TaskEditor } from "./TasksEditor"; interface TasksTabProps { data: CreateWorkflowTemplateVersion; errors: Record; isEditMode: boolean; onTasksChange: (name: string, value: TaskDefinition[]) => void; onValidate: (taskId: string, isValid: boolean) => void; taskValidation: Record; } const TasksTab: React.FC = ({ data, errors, isEditMode, onTasksChange, onValidate, taskValidation, }) => { const tasks = data.tasks; const [selectedTask, setSelectedTask] = useState(null); const [tasksMetadata, setTasksMetadata] = React.useState([]); useEffect(() => { const fetchTaskMetadata = async () => { const meta = await templateVersionsService.getTaskMetadata("GeneralTask"); setTasksMetadata(meta); }; fetchTaskMetadata(); }, []); useEffect(() => { // Don't override user selection if (selectedTask) return; if (tasks.length === 0) { setSelectedTask(null); return; } // Find first invalid task const firstInvalid = tasks.find( (t) => taskValidation[t.config.guid as string] === false, ); if (firstInvalid) { setSelectedTask(firstInvalid); return; } // Otherwise select first task setSelectedTask(tasks[0]); }, [tasks, taskValidation, selectedTask]); const handleTasksChange = (newTasks: TaskDefinition[]) => { // Update the parent form state onTasksChange("tasks", newTasks); }; return (
{selectedTask && ( { const newTasks = tasks.map((t) => t.config.guid === updatedTask.config.guid ? updatedTask : t, ); handleTasksChange(newTasks); // Use the updated object from the array, not the raw updatedTask const updatedFromArray = newTasks.find( (t) => t.config.guid === updatedTask.config.guid, ); setSelectedTask(updatedFromArray!); }} onValidate={onValidate} /> )}
); }; export default TasksTab;