diff --git a/src/components/MyTasks/MyOffersFamilyTable.jsx b/src/components/MyTasks/MyOffersFamilyTable.jsx index de2a3e0..e161133 100644 --- a/src/components/MyTasks/MyOffersFamilyTable.jsx +++ b/src/components/MyTasks/MyOffersFamilyTable.jsx @@ -2,7 +2,7 @@ import { useRef, useState } from "react"; import OfferCard from "../Cards/OfferCard"; import Icons from "../Helpers/Icons"; import SliderCom from "../Helpers/SliderCom"; -import OfferJobPopout from "../jobPopout/OfferJobPopout"; +import FamilyOfferJobPopout from "../jobPopout/FamilyOfferJobPopout"; export default function MyOffersFamilyTable({ className, familyOffers }) { let [offerPopout, setOfferPopout] = useState({ show: false, data: {} }); // STATE TO HOLD THE VALUE OF THE ALERT DETAILS AND DETERMINE WHEN TO SHOW @@ -127,7 +127,7 @@ export default function MyOffersFamilyTable({ className, familyOffers }) { {/* Offer Job Popout */} {offerPopout.show && ( - { setOfferPopout({ show: false, data: {} }); diff --git a/src/components/jobPopout/FamilyOfferJobPopout.jsx b/src/components/jobPopout/FamilyOfferJobPopout.jsx new file mode 100644 index 0000000..47c8089 --- /dev/null +++ b/src/components/jobPopout/FamilyOfferJobPopout.jsx @@ -0,0 +1,261 @@ +import React, { useState } from "react"; +import Detail from "./popoutcomponent/Detail"; +import ModalCom from "../Helpers/ModalCom"; +import { useNavigate } from "react-router-dom"; + +import usersService from "../../services/UsersService"; +import LoadingSpinner from "../Spinners/LoadingSpinner"; +import localImgLoad from "../../lib/localImgLoad"; + +import { tableReload } from "../../store/TableReloads"; +import { useDispatch } from "react-redux"; + +function FamilyOfferJobPopout({ details, onClose, situation }) { + const apiUrl = new usersService(); + const navigate = useNavigate(); + const dispatch = useDispatch(); + + const [requestStatus, setRequestStatus] = useState({ + loading: false, + status: false, + message: "", + trigger: "", + }); + + //FUNCTION TO HANDLE AN OFFER + const handleOffer = ({ target: { name } }) => { + const reqData = { + // offer_result: 100, + offer_code: details.contract, + contract: details.contract, + }; + + //logic to determine the button pressed and set reqDate accordingly + if (name == "accept") { + setRequestStatus({ + loading: true, + status: false, + message: "", + trigger: "offer", + }); + reqData.offer_result = 100; + } + if (name == "reject") { + setRequestStatus({ + loading: true, + status: false, + message: "", + trigger: "reject", + }); + reqData.offer_result = 333; + } + + // API CALL + apiUrl + .offersResponse(reqData) + .then((response) => { + if (response.status != 200 || response.data.internal_return < 0) { + setRequestStatus({ + loading: false, + status: false, + message: `Unable to ${name} Offer, try again later`, + trigger: "", + }); + return; + } + setRequestStatus({ + loading: false, + status: true, + message: `Offer ${name}ed Successfully`, + trigger: "", + }); + setTimeout(() => { + onClose(); + dispatch(tableReload({ type: "MYTASKTABLE" })); + navigate("/mytask", { replace: true }); + setRequestStatus({ + loading: false, + status: false, + message: "", + trigger: "", + }); + }, 2000); + }) + .catch((error) => { + setRequestStatus({ + loading: false, + status: false, + message: `Opps! An Error Occurred`, + trigger: "", + }); + }) + .finally(() => { + setTimeout(() => { + setRequestStatus({ + loading: false, + status: false, + message: "", + trigger: "", + }); + }, 5000); + }); + }; + + return ( + +
+
+

+ Start Task +

+ +
+
+
+
+
+ Banner-Image +
+
+

+ {details.title} +

+ + {/* INPUT SECTION */} +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+
+
+
+ + {/* ACTION SECTION */} +
+
+ {requestStatus.loading && requestStatus.trigger == "offer" ? ( + + ) : ( + + )} +
+ + {/*
+ {requestStatus.loading && requestStatus.trigger == "reject" ? ( + + ) : ( + + )} +
*/} + + {/* ERROR DISPLAY AND SUBMIT BUTTON */} + {requestStatus.message != "" && + (!requestStatus.status ? ( +
+ {requestStatus.message} +
+ ) : ( + requestStatus.status && ( +
+ {requestStatus.message} +
+ ) + ))} + {/* End of error or success display */} +
+
+ + {/* close button */} +
+ +
+ {/* end of close button */} +
+
+ ); +} + +export default FamilyOfferJobPopout;