repeat and undo task steps
parent
5d61ec5c87
commit
cc59493b04
|
@ -32,6 +32,8 @@
|
||||||
"groupTasks.groupTasksViewModal.notification.inputsCannotBeEmpty.description": "Bitte füllen Sie alle Felder aus",
|
"groupTasks.groupTasksViewModal.notification.inputsCannotBeEmpty.description": "Bitte füllen Sie alle Felder aus",
|
||||||
"groupTasks.groupTasksViewModal.button.tryAgain": "Erneut versuchen",
|
"groupTasks.groupTasksViewModal.button.tryAgain": "Erneut versuchen",
|
||||||
"groupTasks.groupTasksViewModal.button.continue": "Weiter",
|
"groupTasks.groupTasksViewModal.button.continue": "Weiter",
|
||||||
|
"groupTasks.groupTasksViewModal.button.repeat": "Wiederholen",
|
||||||
|
"groupTasks.groupTasksViewModal.button.undo": "Rückgängig machen",
|
||||||
"groupTasks.groupTasksViewModal.button.resume": "Fortführen",
|
"groupTasks.groupTasksViewModal.button.resume": "Fortführen",
|
||||||
"groupTasks.groupTasksViewModal.popover.specifiedTaskInputs": "Spezifizierte Aufgaben-Eingaben",
|
"groupTasks.groupTasksViewModal.popover.specifiedTaskInputs": "Spezifizierte Aufgaben-Eingaben",
|
||||||
"groupTasks.groupTasksViewModal.startedAt": "Gestartet am",
|
"groupTasks.groupTasksViewModal.startedAt": "Gestartet am",
|
||||||
|
@ -47,6 +49,8 @@
|
||||||
"groupTasks.groupTasksViewModal.alertMessage.taskCanceled": "Aufgabe abgebrochen",
|
"groupTasks.groupTasksViewModal.alertMessage.taskCanceled": "Aufgabe abgebrochen",
|
||||||
"groupTasks.groupTasksViewModal.alertMessage.taskFailed": "Aufgabe fehlgeschlagen",
|
"groupTasks.groupTasksViewModal.alertMessage.taskFailed": "Aufgabe fehlgeschlagen",
|
||||||
"groupTasks.groupTasksViewModal.alertMessage.taskInputRequired": "Eingabe erforderlich",
|
"groupTasks.groupTasksViewModal.alertMessage.taskInputRequired": "Eingabe erforderlich",
|
||||||
|
"groupTasks.groupTasksViewModal.alertMessage.paused": "Pausiert",
|
||||||
|
"groupTasks.groupTasksViewModal.alertMessage.undoEnded": "Rückgängig machen beendet",
|
||||||
"groupTasks.groupTasksTableList.column.creator": "Ersteller",
|
"groupTasks.groupTasksTableList.column.creator": "Ersteller",
|
||||||
"groupTasks.groupTasksTableList.column.groupName": "Gruppenname",
|
"groupTasks.groupTasksTableList.column.groupName": "Gruppenname",
|
||||||
"groupTasks.groupTasksTableList.column.description": "Beschreibung",
|
"groupTasks.groupTasksTableList.column.description": "Beschreibung",
|
||||||
|
@ -63,6 +67,7 @@
|
||||||
"groupTasks.groupTasksTableList.statusBadge.failed": "Fehlgeschlagen",
|
"groupTasks.groupTasksTableList.statusBadge.failed": "Fehlgeschlagen",
|
||||||
"groupTasks.groupTasksTableList.statusBadge.inputRequired": "Eingabe erforderlich",
|
"groupTasks.groupTasksTableList.statusBadge.inputRequired": "Eingabe erforderlich",
|
||||||
"groupTasks.groupTasksTableList.statusBadge.paused": "Pausiert",
|
"groupTasks.groupTasksTableList.statusBadge.paused": "Pausiert",
|
||||||
|
"groupTasks.groupTasksTableList.statusBadge.undoEnded": "Rückgängig gemacht",
|
||||||
"groupTasks.groupTasksTableList.button.newTask": "Neue Aufgabe",
|
"groupTasks.groupTasksTableList.button.newTask": "Neue Aufgabe",
|
||||||
"groupTasks.groupTasksTableList.button.reload": "Neu laden",
|
"groupTasks.groupTasksTableList.button.reload": "Neu laden",
|
||||||
"groupTasks.groupTasksTableList.popover.title": "Sind Sie sicher, dass Sie die Gruppenkonfigurationen neu laden wollen?",
|
"groupTasks.groupTasksTableList.popover.title": "Sind Sie sicher, dass Sie die Gruppenkonfigurationen neu laden wollen?",
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
"groupTasks.groupTasksViewModal.notification.inputsCannotBeEmpty.description": "Please fill in all inputs",
|
"groupTasks.groupTasksViewModal.notification.inputsCannotBeEmpty.description": "Please fill in all inputs",
|
||||||
"groupTasks.groupTasksViewModal.button.tryAgain": "Try again",
|
"groupTasks.groupTasksViewModal.button.tryAgain": "Try again",
|
||||||
"groupTasks.groupTasksViewModal.button.continue": "Continue",
|
"groupTasks.groupTasksViewModal.button.continue": "Continue",
|
||||||
|
"groupTasks.groupTasksViewModal.button.repeat": "Repeat",
|
||||||
|
"groupTasks.groupTasksViewModal.button.undo": "Undo",
|
||||||
"groupTasks.groupTasksViewModal.button.resume": "Resume",
|
"groupTasks.groupTasksViewModal.button.resume": "Resume",
|
||||||
"groupTasks.groupTasksViewModal.popover.specifiedTaskInputs": "Specified Task Inputs",
|
"groupTasks.groupTasksViewModal.popover.specifiedTaskInputs": "Specified Task Inputs",
|
||||||
"groupTasks.groupTasksViewModal.startedAt": "Started at",
|
"groupTasks.groupTasksViewModal.startedAt": "Started at",
|
||||||
|
@ -47,6 +49,8 @@
|
||||||
"groupTasks.groupTasksViewModal.alertMessage.taskCanceled": "Task canceled",
|
"groupTasks.groupTasksViewModal.alertMessage.taskCanceled": "Task canceled",
|
||||||
"groupTasks.groupTasksViewModal.alertMessage.taskFailed": "Task failed",
|
"groupTasks.groupTasksViewModal.alertMessage.taskFailed": "Task failed",
|
||||||
"groupTasks.groupTasksViewModal.alertMessage.taskInputRequired": "Input required",
|
"groupTasks.groupTasksViewModal.alertMessage.taskInputRequired": "Input required",
|
||||||
|
"groupTasks.groupTasksViewModal.alertMessage.paused": "Paused",
|
||||||
|
"groupTasks.groupTasksViewModal.alertMessage.undoEnded": "Undo ended",
|
||||||
"groupTasks.groupTasksTableList.column.creator": "Creator",
|
"groupTasks.groupTasksTableList.column.creator": "Creator",
|
||||||
"groupTasks.groupTasksTableList.column.groupName": "Group Name",
|
"groupTasks.groupTasksTableList.column.groupName": "Group Name",
|
||||||
"groupTasks.groupTasksTableList.column.description": "Description",
|
"groupTasks.groupTasksTableList.column.description": "Description",
|
||||||
|
@ -63,6 +67,7 @@
|
||||||
"groupTasks.groupTasksTableList.statusBadge.failed": "Failed",
|
"groupTasks.groupTasksTableList.statusBadge.failed": "Failed",
|
||||||
"groupTasks.groupTasksTableList.statusBadge.inputRequired": "Input required",
|
"groupTasks.groupTasksTableList.statusBadge.inputRequired": "Input required",
|
||||||
"groupTasks.groupTasksTableList.statusBadge.paused": "Paused",
|
"groupTasks.groupTasksTableList.statusBadge.paused": "Paused",
|
||||||
|
"groupTasks.groupTasksTableList.statusBadge.undoEnded": "Undo ended",
|
||||||
"groupTasks.groupTasksTableList.button.newTask": "New task",
|
"groupTasks.groupTasksTableList.button.newTask": "New task",
|
||||||
"groupTasks.groupTasksTableList.button.reload": "Reload",
|
"groupTasks.groupTasksTableList.button.reload": "Reload",
|
||||||
"groupTasks.groupTasksTableList.popover.title": "Are you sure you want to reload the group configs?",
|
"groupTasks.groupTasksTableList.popover.title": "Are you sure you want to reload the group configs?",
|
||||||
|
|
|
@ -140,6 +140,13 @@ export default function GroupTaskTableList({
|
||||||
text={t("groupTasks.groupTasksTableList.statusBadge.paused")}
|
text={t("groupTasks.groupTasksTableList.statusBadge.paused")}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
|
||||||
|
return (
|
||||||
|
<Badge
|
||||||
|
status="warning"
|
||||||
|
text={t("groupTasks.groupTasksTableList.statusBadge.undoEnded")}
|
||||||
|
/>
|
||||||
|
);
|
||||||
default:
|
default:
|
||||||
return <Badge status="error" text="Status not found" />;
|
return <Badge status="error" text="Status not found" />;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {
|
||||||
Popover,
|
Popover,
|
||||||
Result,
|
Result,
|
||||||
Row,
|
Row,
|
||||||
|
Space,
|
||||||
Steps,
|
Steps,
|
||||||
Tag,
|
Tag,
|
||||||
notification,
|
notification,
|
||||||
|
@ -27,9 +28,12 @@ import {
|
||||||
GroupTasksStepsLockedAndUserUpdateInputValueRememberId,
|
GroupTasksStepsLockedAndUserUpdateInputValueRememberId,
|
||||||
} from "../../../utils";
|
} from "../../../utils";
|
||||||
import {
|
import {
|
||||||
|
CheckOutlined,
|
||||||
FileImageOutlined,
|
FileImageOutlined,
|
||||||
InfoCircleOutlined,
|
InfoCircleOutlined,
|
||||||
LockOutlined,
|
LockOutlined,
|
||||||
|
RetweetOutlined,
|
||||||
|
UndoOutlined,
|
||||||
} from "@ant-design/icons";
|
} from "@ant-design/icons";
|
||||||
import { StlViewer } from "react-stl-viewer";
|
import { StlViewer } from "react-stl-viewer";
|
||||||
import TextArea from "antd/es/input/TextArea";
|
import TextArea from "antd/es/input/TextArea";
|
||||||
|
@ -78,6 +82,7 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
return "error";
|
return "error";
|
||||||
case Constants.GROUP_TASKS_STATUS.CANCELED:
|
case Constants.GROUP_TASKS_STATUS.CANCELED:
|
||||||
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
||||||
|
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
|
||||||
return "warning";
|
return "warning";
|
||||||
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
|
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
|
||||||
case Constants.GROUP_TASKS_STATUS.RUNNING:
|
case Constants.GROUP_TASKS_STATUS.RUNNING:
|
||||||
|
@ -101,7 +106,9 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
"groupTasks.groupTasksViewModal.alertMessage.taskInputRequired"
|
"groupTasks.groupTasksViewModal.alertMessage.taskInputRequired"
|
||||||
);
|
);
|
||||||
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
||||||
return "Paused";
|
return t("groupTasks.groupTasksViewModal.alertMessage.paused");
|
||||||
|
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
|
||||||
|
return t("groupTasks.groupTasksViewModal.alertMessage.undoEnded");
|
||||||
default:
|
default:
|
||||||
return "Alert message not found";
|
return "Alert message not found";
|
||||||
}
|
}
|
||||||
|
@ -118,6 +125,7 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
return "error";
|
return "error";
|
||||||
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
|
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
|
||||||
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
||||||
|
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
|
||||||
default:
|
default:
|
||||||
return "wait";
|
return "wait";
|
||||||
}
|
}
|
||||||
|
@ -211,10 +219,11 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleTaskResumeFromPauseTaskStep = (taskStepId, step) => {
|
const handleUserActionTaskStep = (action, taskStepId, step) => {
|
||||||
webSocketContext.SendSocketMessage(
|
webSocketContext.SendSocketMessage(
|
||||||
SentMessagesCommands.TaskResumeFromPauseTaskStep,
|
SentMessagesCommands.HandleUserActionTaskStep,
|
||||||
{
|
{
|
||||||
|
action: action,
|
||||||
groupTaskId: currentGroupTask.Id,
|
groupTaskId: currentGroupTask.Id,
|
||||||
category: currentGroupTask.Category,
|
category: currentGroupTask.Category,
|
||||||
groupId: currentGroupTask.GroupId,
|
groupId: currentGroupTask.GroupId,
|
||||||
|
@ -224,7 +233,13 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const alertActionHandler = (status, taskStepId, index, taskLocked) => {
|
const ActionHandler = ({ status, taskStepId, index, taskLocked }) => {
|
||||||
|
const currentStepTask = webSocketContext.CategoryGroups.find(
|
||||||
|
(category) => category.category === currentGroupTask.Category
|
||||||
|
).groups.find((group) => group.id === currentGroupTask.GroupId).tasks[
|
||||||
|
index
|
||||||
|
];
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case Constants.GROUP_TASKS_STATUS.FAILED:
|
case Constants.GROUP_TASKS_STATUS.FAILED:
|
||||||
return (
|
return (
|
||||||
|
@ -250,13 +265,55 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
</Button>
|
</Button>
|
||||||
);
|
);
|
||||||
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
case Constants.GROUP_TASKS_STATUS.PAUSED:
|
||||||
|
return (
|
||||||
|
<Space>
|
||||||
|
{currentStepTask.repeatPossible && (
|
||||||
|
<Button
|
||||||
|
icon={<RetweetOutlined />}
|
||||||
|
size="small"
|
||||||
|
disabled={taskLocked}
|
||||||
|
onClick={() =>
|
||||||
|
handleUserActionTaskStep(2, taskStepId, index + 1)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{t("groupTasks.groupTasksViewModal.button.repeat")}
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{currentStepTask.undoPossible && (
|
||||||
|
<Button
|
||||||
|
icon={<UndoOutlined />}
|
||||||
|
size="small"
|
||||||
|
disabled={taskLocked}
|
||||||
|
onClick={() =>
|
||||||
|
handleUserActionTaskStep(1, taskStepId, index + 1)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{t("groupTasks.groupTasksViewModal.button.undo")}
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<Button
|
||||||
|
icon={<CheckOutlined />}
|
||||||
|
size="small"
|
||||||
|
type={
|
||||||
|
currentStepTask.repeatPossible && currentStepTask.undoPossible
|
||||||
|
? "primary"
|
||||||
|
: "default"
|
||||||
|
}
|
||||||
|
disabled={taskLocked}
|
||||||
|
onClick={() => handleUserActionTaskStep(0, taskStepId, index + 1)}
|
||||||
|
>
|
||||||
|
{t("groupTasks.groupTasksViewModal.button.resume")}
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
);
|
||||||
|
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
|
||||||
return (
|
return (
|
||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
disabled={taskLocked}
|
disabled={taskLocked}
|
||||||
onClick={() =>
|
onClick={() => handleUserActionTaskStep(2, taskStepId, index + 1)}
|
||||||
handleTaskResumeFromPauseTaskStep(taskStepId, index + 1)
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
{t("groupTasks.groupTasksViewModal.button.resume")}
|
{t("groupTasks.groupTasksViewModal.button.resume")}
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -296,7 +353,9 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
groupTaskSteps[index] !== undefined &&
|
groupTaskSteps[index] !== undefined &&
|
||||||
groupTaskSteps[index].Inputs !== "" &&
|
groupTaskSteps[index].Inputs !== "" &&
|
||||||
groupTaskSteps[index].Status !==
|
groupTaskSteps[index].Status !==
|
||||||
Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED ? (
|
Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED &&
|
||||||
|
groupTaskSteps[index].Status !==
|
||||||
|
Constants.GROUP_TASKS_STATUS.UNDO_ENDED ? (
|
||||||
<>
|
<>
|
||||||
{groupTask.name}{" "}
|
{groupTask.name}{" "}
|
||||||
<Popover
|
<Popover
|
||||||
|
@ -394,21 +453,35 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<Alert
|
<Alert
|
||||||
|
style={{ width: "100%" }}
|
||||||
message={
|
message={
|
||||||
<b>
|
<div
|
||||||
{getAlertMessage(groupTaskSteps[index].Status)}{" "}
|
style={{
|
||||||
{groupTaskSteps[index].LockedByUserId !== "" && (
|
display: "flex",
|
||||||
<>
|
justifyContent: "space-between",
|
||||||
<LockOutlined />{" "}
|
}}
|
||||||
<MyAvatar
|
>
|
||||||
tooltip
|
<b>
|
||||||
allUsers={webSocketContext.AllUsers}
|
{getAlertMessage(groupTaskSteps[index].Status)}{" "}
|
||||||
userId={groupTaskSteps[index].LockedByUserId}
|
{groupTaskSteps[index].LockedByUserId !== "" && (
|
||||||
avatarWidth={24}
|
<>
|
||||||
/>
|
<LockOutlined />{" "}
|
||||||
</>
|
<MyAvatar
|
||||||
)}
|
tooltip
|
||||||
</b>
|
allUsers={webSocketContext.AllUsers}
|
||||||
|
userId={groupTaskSteps[index].LockedByUserId}
|
||||||
|
avatarWidth={24}
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</b>
|
||||||
|
<ActionHandler
|
||||||
|
status={groupTaskSteps[index].Status}
|
||||||
|
index={index}
|
||||||
|
taskLocked={groupTaskSteps[index].LockedByUserId}
|
||||||
|
taskStepId={groupTaskSteps[index].Id}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
description={
|
description={
|
||||||
groupTaskSteps[index].Status ===
|
groupTaskSteps[index].Status ===
|
||||||
|
@ -432,7 +505,10 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
groupTaskSteps[index].Log.length > 0 && (
|
groupTaskSteps[index].Log.length > 0 && (
|
||||||
<div id={`${currentGroupTask.Id}-scroll-${index}`}>
|
<div
|
||||||
|
id={`${currentGroupTask.Id}-scroll-${index}`}
|
||||||
|
style={{ width: "100%" }}
|
||||||
|
>
|
||||||
<GroupTaskStepLogHandler
|
<GroupTaskStepLogHandler
|
||||||
currentGroupTaskId={currentGroupTask.Id}
|
currentGroupTaskId={currentGroupTask.Id}
|
||||||
log={groupTaskSteps[index].Log}
|
log={groupTaskSteps[index].Log}
|
||||||
|
@ -444,12 +520,6 @@ export default function GroupTasksViewModal({ isOpen }) {
|
||||||
}
|
}
|
||||||
type={getAlertType(groupTaskSteps[index].Status)}
|
type={getAlertType(groupTaskSteps[index].Status)}
|
||||||
showIcon
|
showIcon
|
||||||
action={alertActionHandler(
|
|
||||||
groupTaskSteps[index].Status,
|
|
||||||
groupTaskSteps[index].Id,
|
|
||||||
index,
|
|
||||||
groupTaskSteps[index].LockedByUserId
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
|
@ -964,7 +1034,7 @@ function GroupTaskStepLogHandler({ currentGroupTaskId, log, files }) {
|
||||||
<span style={{ whiteSpace: "pre-line" }}>
|
<span style={{ whiteSpace: "pre-line" }}>
|
||||||
{log}
|
{log}
|
||||||
|
|
||||||
{files !== "" && fileContent(JSON.parse(files))}
|
{files !== "" && files !== " " && fileContent(JSON.parse(files))}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ export const Constants = {
|
||||||
FAILED: 4,
|
FAILED: 4,
|
||||||
INPUT_REQUIRED: 5,
|
INPUT_REQUIRED: 5,
|
||||||
PAUSED: 6,
|
PAUSED: 6,
|
||||||
|
UNDO_ENDED: 7,
|
||||||
},
|
},
|
||||||
GLOBALS: {
|
GLOBALS: {
|
||||||
MIN_USERNAME_LENGTH: 2,
|
MIN_USERNAME_LENGTH: 2,
|
||||||
|
@ -211,7 +212,7 @@ export const SentMessagesCommands = {
|
||||||
ScannersUseScanners: 15,
|
ScannersUseScanners: 15,
|
||||||
ScannersDisconnectScanner: 16,
|
ScannersDisconnectScanner: 16,
|
||||||
GroupTasksCheckingForCategoryGroupChanges: 17,
|
GroupTasksCheckingForCategoryGroupChanges: 17,
|
||||||
TaskResumeFromPauseTaskStep: 18,
|
HandleUserActionTaskStep: 18,
|
||||||
};
|
};
|
||||||
|
|
||||||
export function WebSocketProvider({
|
export function WebSocketProvider({
|
||||||
|
|
Loading…
Reference in New Issue