import React, { Suspense, useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useLocation } from "react-router-dom"; import usersService from "../../../services/UsersService"; import { tableReload } from "../../../store/TableReloads"; import ModalCom from "../../Helpers/ModalCom"; import { PriceFormatter } from "../../Helpers/PriceFormatter"; import LoadingSpinner from "../../Spinners/LoadingSpinner"; import Detail from "../../jobPopout/popoutcomponent/Detail"; import { NewTasks } from "./forms"; import { SocketValues } from "../../Contexts/SocketIOContext"; const AssignTaskPopout = ({ action, details, situation, familyDetailsData, familyTask, activeTask, setActiveTask, setUpdatePage, assignTaskChecker, }) => { const {parentAssignJobToKid} = SocketValues() const apiCall = new usersService(); let { pathname, state } = useLocation(); const {userDetails} = useSelector((state) => state?.userDetails); // CHECKS IF USER Details are avaliable, to determine if user is active const [selectedFamilyUid, setSelectedFamilyUid] = useState(''); const handleFamChange = (event) => { setSelectedFamilyUid(event.target.value); }; const dispatch = useDispatch(); const getFamilySession = JSON.parse(sessionStorage.getItem("family_list")); const familyList = getFamilySession?.map((member) => ( )); let [requestStatus, setRequestStatus] = useState({ loading: false, status: false, message: "", }); // HOLDS RESPONSE FOR SENDING API REQUEST let [taskType, setTaskType] = useState(details ? "new" : "select"); // SWITCHES BTW SELECT TASK AND NEW TASK const switchTaskType = ({ target: { value } }) => { // FUNCTION TO CHANGE SELECTED ACTIVE TASK setTaskType(value); }; const handleActiveTask = (id = 0, data = {}) => { // FUNCTION TO CHANGE SELECTED ACTIVE TASK setActiveTask({ id, data }); }; // New Task const [formState, setFormState] = useState({ // Initialize form state with desired fields banner: details?.banner || "default.jpg", country: details?.country || "", price: details?.price || "", title: details?.title || "", description: details?.description || "", job_detail: details?.job_detail || "", timeline_days: details?.timeline_days || "", category: details?.category || "", }); const assignFamilyTask = () => { setRequestStatus({ loading: true, status: false, message: "" }); if(!selectedFamilyUid){ // If no family found, throw error setRequestStatus({ loading: false, status: false, message: "Please Select a Kid" }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 3000); } let reqData = {}; if (taskType == "select") { // RUNS HERE IF TASK TYPE IS SELECT if (!Object.keys(activeTask.data).length) { setRequestStatus({ loading: false, status: false, message: "No Task is seleted", }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 3000); } reqData = { // API PAYLOADS job_id: activeTask.data?.job_id, job_uid: activeTask.data?.job_uid, family_uid: selectedFamilyUid ? selectedFamilyUid : familyDetailsData?.uid || details?.family_uid, job_description: activeTask.data?.description, assign_mode: 110011, }; } if (taskType === "new") { const { banner, category, country, description, job_detail, price, timeline_days, title, } = formState; const requiredFields = { banner, // category, currency: country, description, "job detail": job_detail, price, timeline: timeline_days, title, }; for (let field in requiredFields) { if (requiredFields[field] == "") { // let currencyErrMsg = field == "country" && "currency" setRequestStatus({ loading: false, status: false, message: `${ field[0].toUpperCase() + field.slice(1).toLowerCase() } is empty`, }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 3000); } } reqData = { banner, category, country, description, job_detail, price: price * 100, timeline_days, title, assign_mode: 110055, family_uid: selectedFamilyUid ? selectedFamilyUid : familyDetailsData?.uid || details?.family_uid, }; } apiCall .assignFamilyTask(reqData) .then((res) => { if (res.status != 200 || res.data.internal_return < 0) { setRequestStatus({ loading: false, status: false, message: "failed to assign task", }); return setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); } if (res.status === 200) { setRequestStatus({ loading: false, status: true, message: "action successful", }); setUpdatePage(prev => !prev); // Updates family task page by calling the useeffect hook dispatch(tableReload({ type: "WALLETTABLE" })); // RELOADS USER WALLET //SENDS MESSAGE TO SOCKET TO UPDATE CHILD ACCOUNT // message, room let socketMsg = { "audience": "MEMBER", "action": "REFRESH_OFFER", "family_uid": reqData.family_uid, } let socketRoom = `FAMILY-${userDetails.uid}` parentAssignJobToKid(socketMsg, socketRoom) //SENDS MESSAGE TO SOCKET TO UPDATE CHILD ACCOUNT setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); action(); // FUNCTION THAT CLOSES THE MODAL BOX }, 5000); } }) .catch((err) => { setRequestStatus({ loading: false, status: false, message: "An Error occured, try again", }); setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); }); }; let imageSrc = (localStorage.getItem("session_token") ? `${userDetails?.session_image_server}${localStorage.getItem("session_token")}/job/${activeTask.data.job_uid}` : ""); // FOR GETTING JOB IMAGE useEffect(()=>{ // effect to update family UID when components mounts if(familyDetailsData?.uid){ setSelectedFamilyUid(familyDetailsData?.uid) }else if(details?.family_uid){ setSelectedFamilyUid(details?.family_uid) }else{ setSelectedFamilyUid('') } },[]) return ( <>

{details ? ( ` Assign ${details?.firstname}'s Task` ) : familyDetailsData ? ( ` Assign ${familyDetailsData.firstname}'s Task` ) : (
Assign task to{" "}
)}

{familyTask?.loading ? (
) : ( <>
Select Task
New Task
{/* Task Type === select */} {taskType == "select" && (
{familyTask?.data?.length ? ( familyTask?.data?.map((item, index) => (
handleActiveTask(item.job_uid, item)} > handleActiveTask(item.job_uid, item) } className="w-[15px] h-[15px] cursor-pointer" />

{item?.title}

)) ) : (

No Task found!

)}
)} {taskType == "new" && (
)}
{/*Right Hand Side for details && Task Type === select */} {taskType == "select" && ( <> {familyTask?.data?.length > 0 ? (

{activeTask?.data?.title}

{PriceFormatter( activeTask?.data?.price * 0.01, activeTask?.data?.currency, activeTask?.data?.curreny_code )}

{`${activeTask?.data?.timeline_days} day(s)`}

job image
{/* Dummy, no value found for created! thus commented*/} {/*
*/}