support for required inputs to continue to the next task step

main
alex 2023-05-12 23:23:57 +02:00
parent f6ed8a891e
commit 4e4dc6d7e9
3 changed files with 73 additions and 19 deletions

View File

@ -10,7 +10,7 @@ import {
Steps, Steps,
notification, notification,
} from "antd"; } from "antd";
import { useContext } from "react"; import { useContext, useState } from "react";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import { import {
Constants, Constants,
@ -115,7 +115,57 @@ export default function GroupTasksViewModal({ isOpen }) {
); );
}; };
const alertActionHandler = (status, taskStepId, index, notificationApi) => { 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,
value: specifiedTaskInputs[i].value,
});
}
}
}
if (!canTaskContinued) {
notificationApi["error"]({
message: `Inputs cannot be empty`,
description: `Please fill in all inputs`,
});
return;
}
console.log("contine", taskStepId, step);
webSocketContext.SendSocketMessage(
SentMessagesCommands.TaskContinueTaskStep,
{
groupTaskId: currentGroupTask.Id,
category: currentGroupTask.Category,
groupId: currentGroupTask.GroupId,
step: step,
taskStepId: taskStepId,
taskInputs: taskInputs,
}
);
};
const alertActionHandler = (status, taskStepId, index) => {
switch (status) { switch (status) {
case Constants.GROUP_TASKS_STATUS.FAILED: case Constants.GROUP_TASKS_STATUS.FAILED:
return ( return (
@ -133,21 +183,24 @@ export default function GroupTasksViewModal({ isOpen }) {
return ( return (
<Button <Button
size="small" size="small"
onClick={() => { onClick={() => handleTaskContinueTaskStep(taskStepId, index + 1)}
console.log("clicked continue");
}}
> >
Continue Continue
</Button> </Button>
); );
default: default:
notificationApi["error"]({
message: `Alert action ${status} not implemented`,
});
return <></>; return <></>;
} }
}; };
const getGroupTaskStepLog = (log) => {
return log.length === 0 ? (
""
) : (
<span style={{ whiteSpace: "pre-line" }}>{log}</span>
);
};
const stepsItemHandler = () => { const stepsItemHandler = () => {
let groupTaskSteps = []; let groupTaskSteps = [];
let groupTasks = []; let groupTasks = [];
@ -211,7 +264,7 @@ export default function GroupTasksViewModal({ isOpen }) {
notificationApi={notificationApi} notificationApi={notificationApi}
/> />
) : ( ) : (
groupTaskSteps[index].Log getGroupTaskStepLog(groupTaskSteps[index].Log)
) )
} }
type={getAlertType(groupTaskSteps[index].Status)} type={getAlertType(groupTaskSteps[index].Status)}
@ -219,8 +272,7 @@ export default function GroupTasksViewModal({ isOpen }) {
action={alertActionHandler( action={alertActionHandler(
groupTaskSteps[index].Status, groupTaskSteps[index].Status,
groupTaskSteps[index].Id, groupTaskSteps[index].Id,
index, index
notificationApi
)} )}
/> />
</> </>
@ -345,10 +397,8 @@ export default function GroupTasksViewModal({ isOpen }) {
} }
function InputRequiredHandler({ groupTaskParameters, notificationApi }) { function InputRequiredHandler({ groupTaskParameters, notificationApi }) {
console.log("groupTaskParameters", groupTaskParameters);
return ( return (
<Form layout="vertical"> <Form layout="vertical" id="groupTasksViewModalRequiredInputsForm">
{groupTaskParameters.map((groupTaskParameter) => { {groupTaskParameters.map((groupTaskParameter) => {
switch (groupTaskParameter.type) { switch (groupTaskParameter.type) {
case "text": case "text":
@ -358,7 +408,10 @@ function InputRequiredHandler({ groupTaskParameters, notificationApi }) {
label={groupTaskParameter.displayName} label={groupTaskParameter.displayName}
required required
> >
<Input key={"input-" + groupTaskParameter.parameterName} /> <Input
key={"input-" + groupTaskParameter.parameterName}
id={groupTaskParameter.parameterName}
/>
</Form.Item> </Form.Item>
); );
case "number": case "number":
@ -370,6 +423,7 @@ function InputRequiredHandler({ groupTaskParameters, notificationApi }) {
> >
<InputNumber <InputNumber
key={"fitem-" + groupTaskParameter.parameterName} key={"fitem-" + groupTaskParameter.parameterName}
id={groupTaskParameter.parameterName}
style={{ width: "100%" }} style={{ width: "100%" }}
/> />
</Form.Item> </Form.Item>

View File

@ -55,9 +55,8 @@ export default function GroupTypeSelectionModal({
let canTaskBeStarted = true; let canTaskBeStarted = true;
if (userSpecifiedGlobalInputForm !== null) { if (userSpecifiedGlobalInputForm !== null) {
const userSpecifiedGlobalInputs = document const userSpecifiedGlobalInputs =
.getElementById("groupTypeSelectionUserSpecifiedGlobalInputForm") userSpecifiedGlobalInputForm.getElementsByTagName("input");
.getElementsByTagName("input");
if (userSpecifiedGlobalInputs.length > 0) { if (userSpecifiedGlobalInputs.length > 0) {
for (let i = 0; i < userSpecifiedGlobalInputs.length; i++) { for (let i = 0; i < userSpecifiedGlobalInputs.length; i++) {
@ -225,7 +224,7 @@ function GroupGlobalInputs({
<h3 style={{ fontWeight: "bold" }}>Fill in the global values</h3> <h3 style={{ fontWeight: "bold" }}>Fill in the global values</h3>
<Form <Form
layout="vertical" layout="vertical"
id={"groupTypeSelectionUserSpecifiedGlobalInputForm"} id="groupTypeSelectionUserSpecifiedGlobalInputForm"
> >
{elements} {elements}
</Form> </Form>

View File

@ -84,6 +84,7 @@ const ReceivedMessagesCommands = {
export const SentMessagesCommands = { export const SentMessagesCommands = {
StartGroupTasks: 1, StartGroupTasks: 1,
TaskFailedTryAgainRunTaskStep: 2, TaskFailedTryAgainRunTaskStep: 2,
TaskContinueTaskStep: 3,
}; };
export function WebSocketProvider({ children, userSession, setUserSession }) { export function WebSocketProvider({ children, userSession, setUserSession }) {