Upgraded the Tasks tab, so that the item selected can be loaded into the editor
This commit is contained in:
parent
745473759d
commit
2f300faf90
@ -2,7 +2,7 @@ import React from "react";
|
|||||||
|
|
||||||
export interface SelectableListProps<T> {
|
export interface SelectableListProps<T> {
|
||||||
items: T[];
|
items: T[];
|
||||||
selectedValue?: t | null;
|
selectedValue?: T | null;
|
||||||
renderLabel: (item: T) => React.ReactNode;
|
renderLabel: (item: T) => React.ReactNode;
|
||||||
onSelect: (item: T) => void;
|
onSelect: (item: T) => void;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,6 +59,7 @@ const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({
|
|||||||
.label(t("ActivityNameTemplate")),
|
.label(t("ActivityNameTemplate")),
|
||||||
description: Joi.string().required().allow("").label(t("Description")),
|
description: Joi.string().required().allow("").label(t("Description")),
|
||||||
domainId: Joi.required(),
|
domainId: Joi.required(),
|
||||||
|
tasks: Joi.array().required(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// -----------------------------
|
// -----------------------------
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import React, { useState } from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
TaskDefinition,
|
TaskDefinition,
|
||||||
TaskMetadata,
|
TaskMetadata,
|
||||||
@ -12,13 +12,19 @@ interface TaskListProps {
|
|||||||
tasks: TaskDefinition[];
|
tasks: TaskDefinition[];
|
||||||
taskType: string;
|
taskType: string;
|
||||||
onChange: (tasks: TaskDefinition[]) => void;
|
onChange: (tasks: TaskDefinition[]) => void;
|
||||||
|
selectedTask: TaskDefinition | null;
|
||||||
|
onSelectTask: (task: TaskDefinition | null) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TaskList: React.FC<TaskListProps> = ({ tasks, taskType, onChange }) => {
|
const TaskList: React.FC<TaskListProps> = ({
|
||||||
|
tasks,
|
||||||
|
taskType,
|
||||||
|
onChange,
|
||||||
|
selectedTask,
|
||||||
|
onSelectTask,
|
||||||
|
}) => {
|
||||||
const { t: tTaskType } = useTranslation(Namespaces.TaskTypes);
|
const { t: tTaskType } = useTranslation(Namespaces.TaskTypes);
|
||||||
|
|
||||||
const [currentTask, setCurrentTask] = useState<TaskDefinition | null>(null);
|
|
||||||
|
|
||||||
const formatNewTaskName = (
|
const formatNewTaskName = (
|
||||||
displayName: string,
|
displayName: string,
|
||||||
tasks: TaskDefinition<Record<string, unknown>>[],
|
tasks: TaskDefinition<Record<string, unknown>>[],
|
||||||
@ -39,7 +45,7 @@ const TaskList: React.FC<TaskListProps> = ({ tasks, taskType, onChange }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (tasks.length === 0) {
|
if (tasks.length === 0) {
|
||||||
setCurrentTask(newTask);
|
onSelectTask(newTask);
|
||||||
}
|
}
|
||||||
onChange([...tasks, newTask]);
|
onChange([...tasks, newTask]);
|
||||||
};
|
};
|
||||||
@ -50,9 +56,9 @@ const TaskList: React.FC<TaskListProps> = ({ tasks, taskType, onChange }) => {
|
|||||||
|
|
||||||
<SelectableList
|
<SelectableList
|
||||||
items={tasks}
|
items={tasks}
|
||||||
selectedValue={currentTask}
|
selectedValue={selectedTask}
|
||||||
renderLabel={(x) => x.config.name as string}
|
renderLabel={(x) => x.config.name as string}
|
||||||
onSelect={(item) => setCurrentTask(item)}
|
onSelect={(item) => onSelectTask(item)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import React, { useEffect, useState } from "react";
|
||||||
import {
|
import {
|
||||||
CreateWorkflowTemplateVersion,
|
CreateWorkflowTemplateVersion,
|
||||||
TaskDefinition,
|
TaskDefinition,
|
||||||
@ -17,7 +18,40 @@ const TasksTab: React.FC<TasksTabProps> = ({
|
|||||||
isEditMode,
|
isEditMode,
|
||||||
onTasksChange,
|
onTasksChange,
|
||||||
}) => {
|
}) => {
|
||||||
const tasks = data.tasks ?? [];
|
const tasks = data.tasks;
|
||||||
|
const [selectedTask, setSelectedTask] = useState<TaskDefinition | null>(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[]) => {
|
const handleTasksChange = (newTasks: TaskDefinition[]) => {
|
||||||
// Update the parent form state
|
// Update the parent form state
|
||||||
@ -25,12 +59,17 @@ const TasksTab: React.FC<TasksTabProps> = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div className="two-column-grid">
|
||||||
<TaskList
|
<div className="fit-content-width">
|
||||||
tasks={tasks}
|
<TaskList
|
||||||
taskType="GeneralTask"
|
tasks={tasks}
|
||||||
onChange={handleTasksChange}
|
taskType="GeneralTask"
|
||||||
/>
|
onChange={handleTasksChange}
|
||||||
|
selectedTask={selectedTask}
|
||||||
|
onSelectTask={setSelectedTask}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>{selectedTask?.config.name as string}</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user