import {
Alert,
Button,
Form,
Input,
InputNumber,
Popover,
Space,
Steps,
Tag,
notification,
} from "antd";
import { useEffect, useRef, useState } from "react";
import { useNavigate, useParams } from "react-router-dom";
import {
Constants,
FormatDatetime,
GetDuration,
getUserId,
hasXYPermission,
myFetch,
} from "../../../utils";
import {
CheckOutlined,
InfoCircleOutlined,
LockOutlined,
RetweetOutlined,
UndoOutlined,
} from "@ant-design/icons";
import TextArea from "antd/es/input/TextArea";
import { useTranslation } from "react-i18next";
import { MyAvatar } from "../../../Components/MyAvatar";
import MyModal, { MyNotFoundModalContent } from "../../../Components/MyModal";
import MyAttachments from "../../../Components/MyAttachments";
import { useWebSocketContext } from "../../../Contexts/WebSocketContext";
import { useGroupTasksContext } from "../../../Contexts/GroupTasksContext";
import { useAppContext } from "../../../Contexts/AppContext";
import {
GroupTasksStepsLockedAndUserUpdateInputValueRememberId,
SentMessagesCommands,
} from "../../../Handlers/WebSocketMessageHandler";
export default function GroupTasksViewModal({ isOpen }) {
const webSocketContext = useWebSocketContext();
const appContext = useAppContext();
const groupTasksContext = useGroupTasksContext();
const navigate = useNavigate();
const [notificationApi, notificationContextHolder] =
notification.useNotification();
let { paramCategory, paramGroupTaskId } = useParams();
const { t } = useTranslation();
const currentGroupTask = useRef(null);
const handleCancel = () => {
currentGroupTask.current = null;
navigate(`${Constants.ROUTE_PATHS.GROUP_TASKS}${paramCategory}`);
};
useEffect(() => {
if (!isOpen) return;
myFetch(
`/grouptasks/${paramCategory}/steps/${paramGroupTaskId}`,
"GET"
).then((data) => {
currentGroupTask.current = data.GroupTask;
groupTasksContext.setGroupTasksSteps(data.GroupTaskSteps);
});
}, [isOpen, paramCategory]);
if (!isOpen) return <>>;
const getAlertType = (status) => {
switch (status) {
case Constants.GROUP_TASKS_STATUS.FINISHED:
return "success";
case Constants.GROUP_TASKS_STATUS.FAILED:
return "error";
case Constants.GROUP_TASKS_STATUS.CANCELED:
case Constants.GROUP_TASKS_STATUS.PAUSED:
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
return "warning";
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
case Constants.GROUP_TASKS_STATUS.RUNNING:
default:
return "info";
}
};
const getAlertMessage = (status) => {
switch (status) {
case Constants.GROUP_TASKS_STATUS.FINISHED:
return t("groupTasks.groupTasksViewModal.alertMessage.successful");
case Constants.GROUP_TASKS_STATUS.RUNNING:
return t("groupTasks.groupTasksViewModal.alertMessage.taskIsRunning");
case Constants.GROUP_TASKS_STATUS.CANCELED:
return t("groupTasks.groupTasksViewModal.alertMessage.taskCanceled");
case Constants.GROUP_TASKS_STATUS.FAILED:
return t("groupTasks.groupTasksViewModal.alertMessage.taskFailed");
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
return t(
"groupTasks.groupTasksViewModal.alertMessage.taskInputRequired"
);
case Constants.GROUP_TASKS_STATUS.PAUSED:
return t("groupTasks.groupTasksViewModal.alertMessage.paused");
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
return t("groupTasks.groupTasksViewModal.alertMessage.undoEnded");
default:
return "Alert message not found";
}
};
const getStepItemStatus = (status) => {
switch (status) {
case Constants.GROUP_TASKS_STATUS.FINISHED:
return "finish";
case Constants.GROUP_TASKS_STATUS.RUNNING:
return "process";
case Constants.GROUP_TASKS_STATUS.CANCELED:
case Constants.GROUP_TASKS_STATUS.FAILED:
return "error";
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
case Constants.GROUP_TASKS_STATUS.PAUSED:
case Constants.GROUP_TASKS_STATUS.UNDO_ENDED:
default:
return "wait";
}
};
const handleTaskFailedTryAgainRunTaskStep = (taskStepId, step) => {
webSocketContext.SendSocketMessage(
SentMessagesCommands.TaskFailedTryAgainRunTaskStep,
{
groupTaskId: currentGroupTask.current.Id,
category: currentGroupTask.current.Category,
groupId: currentGroupTask.current.GroupId,
step: step,
taskStepId: taskStepId,
}
);
};
const handleTaskContinueTaskStep = (taskStepId, step) => {
const groupTasksViewModalRequiredInputsForm = document.getElementById(
"groupTasksViewModalRequiredInputsForm"
);
let canTaskContinued = true;
let taskInputs = [];
if (groupTasksViewModalRequiredInputsForm !== null) {
const specifiedTaskInputs =
groupTasksViewModalRequiredInputsForm.getElementsByTagName("input");
if (specifiedTaskInputs.length > 0) {
for (let i = 0; i < specifiedTaskInputs.length; i++) {
if (specifiedTaskInputs[i].value === "") {
canTaskContinued = false;
break;
}
taskInputs.push({
parameterName:
specifiedTaskInputs[i].id.split(
"-"
)[6] /* Format: UUID-STEP-PARAMETER_NAME */,
value: specifiedTaskInputs[i].value,
});
}
}
const specifiedTaskTextareas =
groupTasksViewModalRequiredInputsForm.getElementsByTagName("textarea");
if (specifiedTaskTextareas.length > 0) {
for (let i = 0; i < specifiedTaskTextareas.length; i++) {
if (specifiedTaskTextareas[i].value === "") {
canTaskContinued = false;
break;
}
taskInputs.push({
parameterName:
specifiedTaskTextareas[i].id.split(
"-"
)[6] /* Format: UUID-STEP-PARAMETER_NAME */,
value: specifiedTaskTextareas[i].value,
});
}
}
}
if (!canTaskContinued) {
notificationApi["error"]({
message: t(
"groupTasks.groupTasksViewModal.notification.inputsCannotBeEmpty.message"
),
description: t(
"groupTasks.groupTasksViewModal.notification.inputsCannotBeEmpty.description"
),
});
return;
}
webSocketContext.SendSocketMessage(
SentMessagesCommands.TaskContinueTaskStep,
{
groupTaskId: currentGroupTask.current.Id,
category: currentGroupTask.current.Category,
groupId: currentGroupTask.current.GroupId,
step: step,
taskStepId: taskStepId,
taskInputs: taskInputs,
}
);
};
const handleUserActionTaskStep = (action, taskStepId, step) => {
webSocketContext.SendSocketMessage(
SentMessagesCommands.HandleUserActionTaskStep,
{
action: action,
groupTaskId: currentGroupTask.current.Id,
category: currentGroupTask.current.Category,
groupId: currentGroupTask.current.GroupId,
step: step,
taskStepId: taskStepId,
}
);
};
const ActionHandler = ({ status, taskStepId, index, taskLocked }) => {
const currentStepTask = groupTasksContext.categoryGroup.groups.find(
(group) => group.id === currentGroupTask.current.GroupId
).tasks[index];
switch (status) {
case Constants.GROUP_TASKS_STATUS.FAILED:
return (
);
case Constants.GROUP_TASKS_STATUS.INPUT_REQUIRED:
return (
);
case Constants.GROUP_TASKS_STATUS.PAUSED:
return (
);
})}
>
}
>
ID: {groupTaskSteps[index].Id}
{t("groupTasks.groupTasksViewModal.startedAt")}:{" "}
{FormatDatetime(groupTaskSteps[index].StartedAt)}
{t("groupTasks.groupTasksViewModal.endedAt")}:{" "}
{groupTaskSteps[index].EndedAt !== "0001-01-01T00:00:00Z"
? FormatDatetime(groupTaskSteps[index].EndedAt)
: Constants.TEXT_EMPTY_PLACEHOLDER}
{t("groupTasks.groupTasksViewModal.duration")}:{" "}
{GetDuration(
groupTaskSteps[index].StartedAt,
groupTaskSteps[index].EndedAt
)}
ID:{" "}
{paramGroupTaskId}
{t("groupTasks.groupTasksViewModal.category")}:
{" "}
{currentGroupTask.current.Category}
{t("groupTasks.groupTasksViewModal.startedAt")}:
{" "}
{FormatDatetime(currentGroupTask.current.StartedAt)}
{t("groupTasks.groupTasksViewModal.endedAt")}:
{" "}
{FormatDatetime(currentGroupTask.current.EndedAt)}
{t("groupTasks.groupTasksViewModal.duration")}:
{" "}
{GetDuration(
currentGroupTask.current.StartedAt,
currentGroupTask.current.EndedAt
)}
Type {groupTaskParameter.type} not implemented. Was specified in: {groupTaskParameter.displayName}
); } })} ); } function GroupTaskStepLogHandler({ currentGroupTaskId, log, files }) { return ( {log} {files !== "" && files !== " " && (