Rearrangement of New Task Layout
This commit was merged in pull request #273.
This commit is contained in:
@@ -31,6 +31,19 @@ function AssignTaskPopout({ action, situation, familyDetails }) {
|
|||||||
setActiveTask({ id, data });
|
setActiveTask({ id, data });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// New Task
|
||||||
|
const [formState, setFormState] = useState({
|
||||||
|
// Initialize form state with desired fields
|
||||||
|
banner: "" || "default.jpg",
|
||||||
|
country: "" || "",
|
||||||
|
price: "" || "",
|
||||||
|
title: "" || "",
|
||||||
|
description: "" || "",
|
||||||
|
job_detail: "" || "",
|
||||||
|
timeline_days: "" || "",
|
||||||
|
category: [] || "",
|
||||||
|
});
|
||||||
|
|
||||||
const assignFamilyTask = () => {
|
const assignFamilyTask = () => {
|
||||||
setRequestStatus({ loading: true, status: false, message: "" });
|
setRequestStatus({ loading: true, status: false, message: "" });
|
||||||
let reqData = {};
|
let reqData = {};
|
||||||
@@ -54,46 +67,93 @@ function AssignTaskPopout({ action, situation, familyDetails }) {
|
|||||||
job_description: activeTask.data?.description,
|
job_description: activeTask.data?.description,
|
||||||
assign_mode: 110011,
|
assign_mode: 110011,
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
apiCall
|
if (taskType === "new") {
|
||||||
.assignFamilyTask(reqData)
|
const {
|
||||||
.then((res) => {
|
banner,
|
||||||
if (res.status != 200 || res.data.internal_return < 0) {
|
category,
|
||||||
setRequestStatus({
|
country,
|
||||||
loading: false,
|
description,
|
||||||
status: false,
|
job_detail,
|
||||||
message: "failed to assign task",
|
price,
|
||||||
});
|
timeline_days,
|
||||||
return setTimeout(() => {
|
title,
|
||||||
setRequestStatus({ loading: false, status: false, message: "" });
|
} = formState;
|
||||||
}, 5000);
|
|
||||||
}
|
const requiredFields = [
|
||||||
setRequestStatus({
|
banner,
|
||||||
loading: false,
|
category,
|
||||||
status: true,
|
country,
|
||||||
message: "action successful",
|
description,
|
||||||
});
|
job_detail,
|
||||||
setTimeout(() => {
|
price,
|
||||||
setRequestStatus({ loading: false, status: false, message: "" });
|
timeline_days,
|
||||||
action(); // FUNCTION THAT CLOSES THE MODAL BOX
|
title,
|
||||||
}, 5000);
|
];
|
||||||
})
|
|
||||||
.catch((err) => {
|
if (requiredFields.some((field) => !field)) {
|
||||||
|
const emptyField = requiredFields.find((field) => !field);
|
||||||
|
setRequestStatus({
|
||||||
|
loading: false,
|
||||||
|
status: false,
|
||||||
|
message: `${emptyField} Empty`,
|
||||||
|
});
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
setRequestStatus({ loading: false, status: false, message: "" });
|
||||||
|
}, 3000);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
reqData = {
|
||||||
|
banner,
|
||||||
|
category,
|
||||||
|
country,
|
||||||
|
description,
|
||||||
|
job_detail,
|
||||||
|
price: price * 100,
|
||||||
|
timeline_days,
|
||||||
|
title,
|
||||||
|
assign_mode: 110055,
|
||||||
|
family_uid: familyDetails.uid,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
apiCall
|
||||||
|
.assignFamilyTask(reqData)
|
||||||
|
.then((res) => {
|
||||||
|
if (res.status != 200 || res.data.internal_return < 0) {
|
||||||
setRequestStatus({
|
setRequestStatus({
|
||||||
loading: false,
|
loading: false,
|
||||||
status: false,
|
status: false,
|
||||||
message: "An Error occured, try again",
|
message: "failed to assign task",
|
||||||
});
|
});
|
||||||
setTimeout(() => {
|
return setTimeout(() => {
|
||||||
setRequestStatus({ loading: false, status: false, message: "" });
|
setRequestStatus({ loading: false, status: false, message: "" });
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
}
|
||||||
|
setRequestStatus({
|
||||||
|
loading: false,
|
||||||
|
status: true,
|
||||||
|
message: "action successful",
|
||||||
});
|
});
|
||||||
}
|
setTimeout(() => {
|
||||||
|
setRequestStatus({ loading: false, status: false, message: "" });
|
||||||
if (taskType == "new") {
|
action(); // FUNCTION THAT CLOSES THE MODAL BOX
|
||||||
// RUNS HERE IF TASK TYPE IS NEW TASK
|
}, 5000);
|
||||||
console.log("TESTING");
|
})
|
||||||
}
|
.catch((err) => {
|
||||||
|
setRequestStatus({
|
||||||
|
loading: false,
|
||||||
|
status: false,
|
||||||
|
message: "An Error occured, try again",
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
setRequestStatus({ loading: false, status: false, message: "" });
|
||||||
|
}, 5000);
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -120,16 +180,10 @@ function AssignTaskPopout({ action, situation, familyDetails }) {
|
|||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// New Task
|
console.log("Trying to see form data >>", formState);
|
||||||
const [newTaskData, setNewTaskData] = useState({})
|
|
||||||
const handleNewTaskData = (data) => {
|
|
||||||
setNewTaskData(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log("Trying to see form data >>", newTaskData)
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ModalCom action={action} situation={situation}>
|
<ModalCom action={action} situation={situation} className="assign-task-popup">
|
||||||
<div className="w-full h-full lg:w-[700px] lg:h-auto bg-white dark:bg-dark-white lg:rounded-2xl">
|
<div className="w-full h-full lg:w-[700px] lg:h-auto bg-white dark:bg-dark-white lg:rounded-2xl">
|
||||||
<div className="w-full flex items-center justify-between lg:px-10 lg:py-8 px-[30px] py-[23px] border-b dark:border-[#5356fb29] border-light-purple">
|
<div className="w-full flex items-center justify-between lg:px-10 lg:py-8 px-[30px] py-[23px] border-b dark:border-[#5356fb29] border-light-purple">
|
||||||
<h1 className="text-26 font-bold text-dark-gray dark:text-white tracking-wide">
|
<h1 className="text-26 font-bold text-dark-gray dark:text-white tracking-wide">
|
||||||
@@ -231,9 +285,12 @@ function AssignTaskPopout({ action, situation, familyDetails }) {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
{taskType !== "select" && (
|
{taskType == "new" && (
|
||||||
<div className="p-4 w-full h-[400px]">
|
<div className="p-4 w-full h-[400px]">
|
||||||
<NewTasks onChange={handleNewTaskData} />
|
<NewTasks
|
||||||
|
formState={formState}
|
||||||
|
setFormState={setFormState}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
@@ -335,7 +392,7 @@ function AssignTaskPopout({ action, situation, familyDetails }) {
|
|||||||
<div className="">
|
<div className="">
|
||||||
{requestStatus.loading ? (
|
{requestStatus.loading ? (
|
||||||
<LoadingSpinner color="sky-blue" size="8" />
|
<LoadingSpinner color="sky-blue" size="8" />
|
||||||
) : (
|
) : taskType == "select" ? (
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
disabled={requestStatus.loading}
|
disabled={requestStatus.loading}
|
||||||
@@ -344,6 +401,15 @@ function AssignTaskPopout({ action, situation, familyDetails }) {
|
|||||||
>
|
>
|
||||||
Assign
|
Assign
|
||||||
</button>
|
</button>
|
||||||
|
) : (
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
disabled={requestStatus.loading}
|
||||||
|
onClick={assignFamilyTask}
|
||||||
|
className="px-1 w-40 h-11 flex justify-center items-center btn-gradient text-base rounded-full text-white cursor-pointer"
|
||||||
|
>
|
||||||
|
{`Assign to ${familyDetails?.firstname}`}
|
||||||
|
</button>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,25 +1,16 @@
|
|||||||
import React, { useEffect, useState } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import usersService from "../../../../services/UsersService";
|
import usersService from "../../../../services/UsersService";
|
||||||
import InputCom from "../../../Helpers/Inputs/InputCom";
|
import InputCom from "../../../Helpers/Inputs/InputCom";
|
||||||
|
import debounce from "../../../../hooks/debounce";
|
||||||
|
|
||||||
export default function NewTasks({ onChange }) {
|
const DEFAULT_IMAGE = require("../../../../assets/images/taskbanners/default.jpg");
|
||||||
|
export default function NewTasks({ formState, setFormState }) {
|
||||||
let [currency, setCurrency] = useState({
|
let [currency, setCurrency] = useState({
|
||||||
loading: true,
|
loading: true,
|
||||||
status: false,
|
status: false,
|
||||||
data: null,
|
data: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
const [formState, setFormState] = useState({
|
|
||||||
// Initialize form state with desired fields
|
|
||||||
country: "",
|
|
||||||
price: "",
|
|
||||||
title: "",
|
|
||||||
description: "",
|
|
||||||
job_detail: "",
|
|
||||||
timeline_days: "",
|
|
||||||
category: [],
|
|
||||||
});
|
|
||||||
|
|
||||||
const ApiCall = new usersService();
|
const ApiCall = new usersService();
|
||||||
|
|
||||||
// FUNCTION TO GET Currency
|
// FUNCTION TO GET Currency
|
||||||
@@ -49,7 +40,6 @@ export default function NewTasks({ onChange }) {
|
|||||||
...prevState,
|
...prevState,
|
||||||
[name]: value,
|
[name]: value,
|
||||||
}));
|
}));
|
||||||
onChange(formState); // Pass the form data to the parent on every change
|
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -57,8 +47,8 @@ export default function NewTasks({ onChange }) {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<form className="w-full">
|
<form className="w-full flex justify-between items-center">
|
||||||
<div className="flex flex-col gap-3">
|
<div className="flex flex-col gap-3 max-w-[77%]">
|
||||||
{/* inputs starts here */}
|
{/* inputs starts here */}
|
||||||
<div className="grid md:grid-cols-3 grid-cols-1 gap-6 mb-[5px]">
|
<div className="grid md:grid-cols-3 grid-cols-1 gap-6 mb-[5px]">
|
||||||
{/* Currency */}
|
{/* Currency */}
|
||||||
@@ -79,13 +69,13 @@ export default function NewTasks({ onChange }) {
|
|||||||
// onBlur={props.handleBlur}
|
// onBlur={props.handleBlur}
|
||||||
>
|
>
|
||||||
{currency.loading ? (
|
{currency.loading ? (
|
||||||
<option className="text-slate-500 text-lg" value="">
|
<option className="text-slate-500 text-[13.975px]" value="">
|
||||||
Loading...
|
Loading...
|
||||||
</option>
|
</option>
|
||||||
) : currency.data.length ? (
|
) : currency.data.length ? (
|
||||||
<>
|
<>
|
||||||
<option className="text-slate-500 text-lg" value="">
|
<option className="text-slate-500 text-[13.975px]" value="">
|
||||||
Select a currency
|
Currency
|
||||||
</option>
|
</option>
|
||||||
{currency.data?.map((item, index) => (
|
{currency.data?.map((item, index) => (
|
||||||
<option
|
<option
|
||||||
@@ -141,11 +131,14 @@ export default function NewTasks({ onChange }) {
|
|||||||
>
|
>
|
||||||
{publicArray.length && (
|
{publicArray.length && (
|
||||||
<>
|
<>
|
||||||
<option className="text-slate-500 text-lg" value="">
|
<option className="text-slate-500 text-[13.975px]" value="">
|
||||||
Select Duration
|
Duration
|
||||||
</option>
|
</option>
|
||||||
{publicArray.map(({ name, duration }, idx) => (
|
{publicArray.map(({ name, duration }, idx) => (
|
||||||
<option className="text-slate-500 text-lg" value={duration}>
|
<option
|
||||||
|
className="text-slate-500 text-[13.975px]"
|
||||||
|
value={duration}
|
||||||
|
>
|
||||||
{name}
|
{name}
|
||||||
</option>
|
</option>
|
||||||
))}
|
))}
|
||||||
@@ -210,6 +203,16 @@ export default function NewTasks({ onChange }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{/* Banner Image */}
|
||||||
|
<div className="max-w-[20%] w-full">
|
||||||
|
<div className="h-32 w-full">
|
||||||
|
<img
|
||||||
|
src={DEFAULT_IMAGE}
|
||||||
|
alt="task_banner_img"
|
||||||
|
className="w-full h-full object-contain"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -941,4 +941,8 @@ TODO: Responsive ===========================
|
|||||||
|
|
||||||
.login-type-btn{
|
.login-type-btn{
|
||||||
box-shadow: 0 0 0.8rem #00000080;
|
box-shadow: 0 0 0.8rem #00000080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.assign-task-popup{
|
||||||
|
top: 75px;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user