diff --git a/src/components/common/SelectableList.tsx b/src/components/common/SelectableList.tsx index 348320d..0df7dad 100644 --- a/src/components/common/SelectableList.tsx +++ b/src/components/common/SelectableList.tsx @@ -2,7 +2,7 @@ import React from "react"; export interface SelectableListProps { items: T[]; - selectedValue?: t | null; + selectedValue?: T | null; renderLabel: (item: T) => React.ReactNode; onSelect: (item: T) => void; } diff --git a/src/modules/manager/workflowTemplates/WorkflowTemplateDetails.tsx b/src/modules/manager/workflowTemplates/WorkflowTemplateDetails.tsx index 8757140..b548fab 100644 --- a/src/modules/manager/workflowTemplates/WorkflowTemplateDetails.tsx +++ b/src/modules/manager/workflowTemplates/WorkflowTemplateDetails.tsx @@ -59,6 +59,7 @@ const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({ .label(t("ActivityNameTemplate")), description: Joi.string().required().allow("").label(t("Description")), domainId: Joi.required(), + tasks: Joi.array().required(), }; // ----------------------------- diff --git a/src/modules/manager/workflowTemplates/components/TaskList.tsx b/src/modules/manager/workflowTemplates/components/TaskList.tsx index 30d65b8..cecfddc 100644 --- a/src/modules/manager/workflowTemplates/components/TaskList.tsx +++ b/src/modules/manager/workflowTemplates/components/TaskList.tsx @@ -1,4 +1,4 @@ -import React, { useState } from "react"; +import React from "react"; import { TaskDefinition, TaskMetadata, @@ -12,13 +12,19 @@ interface TaskListProps { tasks: TaskDefinition[]; taskType: string; onChange: (tasks: TaskDefinition[]) => void; + selectedTask: TaskDefinition | null; + onSelectTask: (task: TaskDefinition | null) => void; } -const TaskList: React.FC = ({ tasks, taskType, onChange }) => { +const TaskList: React.FC = ({ + tasks, + taskType, + onChange, + selectedTask, + onSelectTask, +}) => { const { t: tTaskType } = useTranslation(Namespaces.TaskTypes); - const [currentTask, setCurrentTask] = useState(null); - const formatNewTaskName = ( displayName: string, tasks: TaskDefinition>[], @@ -39,7 +45,7 @@ const TaskList: React.FC = ({ tasks, taskType, onChange }) => { }; if (tasks.length === 0) { - setCurrentTask(newTask); + onSelectTask(newTask); } onChange([...tasks, newTask]); }; @@ -50,9 +56,9 @@ const TaskList: React.FC = ({ tasks, taskType, onChange }) => { x.config.name as string} - onSelect={(item) => setCurrentTask(item)} + onSelect={(item) => onSelectTask(item)} /> ); diff --git a/src/modules/manager/workflowTemplates/components/TasksTab.tsx b/src/modules/manager/workflowTemplates/components/TasksTab.tsx index 8840155..13c9731 100644 --- a/src/modules/manager/workflowTemplates/components/TasksTab.tsx +++ b/src/modules/manager/workflowTemplates/components/TasksTab.tsx @@ -1,3 +1,4 @@ +import React, { useEffect, useState } from "react"; import { CreateWorkflowTemplateVersion, TaskDefinition, @@ -17,7 +18,40 @@ const TasksTab: React.FC = ({ isEditMode, onTasksChange, }) => { - const tasks = data.tasks ?? []; + const tasks = data.tasks; + const [selectedTask, setSelectedTask] = useState(null); + + useEffect(() => { + if (tasks.length === 0) { + if (selectedTask !== null) { + setSelectedTask(null); + } + return; + } + + if (!selectedTask) { + setSelectedTask(tasks[0]); + return; + } + + const selectedGuid = (selectedTask.config as any)?.guid; + if (selectedGuid) { + const match = tasks.find( + (task) => (task.config as any)?.guid === selectedGuid, + ); + + if (match && match !== selectedTask) { + setSelectedTask(match); + } else if (!match) { + setSelectedTask(tasks[0]); + } + return; + } + + if (!tasks.includes(selectedTask)) { + setSelectedTask(tasks[0]); + } + }, [tasks, selectedTask]); const handleTasksChange = (newTasks: TaskDefinition[]) => { // Update the parent form state @@ -25,12 +59,17 @@ const TasksTab: React.FC = ({ }; return ( -
- +
+
+ +
+
{selectedTask?.config.name as string}
); };