diff --git a/src/components/MyJobs/MyJobTable.jsx b/src/components/MyJobs/MyJobTable.jsx index 4b4ffde..1e94fd8 100644 --- a/src/components/MyJobs/MyJobTable.jsx +++ b/src/components/MyJobs/MyJobTable.jsx @@ -1,5 +1,5 @@ import { useCallback, useEffect, useMemo, useState } from "react"; -import { useSelector } from "react-redux"; +import { useDispatch, useSelector } from "react-redux"; import usersService from "../../services/UsersService"; import { PriceFormatter } from "../Helpers/PriceFormatter"; import SelectBox from "../Helpers/SelectBox"; @@ -11,9 +11,13 @@ import EditJobPopOut from "../jobPopout/EditJobPopout"; import DeleteIcon from "../../assets/images/icon-delete.svg"; import EditIcon from "../../assets/images/icon-edit.svg"; +import { tableReload } from "../AddJob/settings"; +import CreditPopup from "../MyWallet/Popup/CreditPopup"; import JobListPopout from "../jobPopout/JobListPopout"; export default function MyJobTable({ MyJobList, reloadJobList, className }) { + const dispatch = useDispatch(); + // Getting the categories const currentJobCart = MyJobList?.data?.categories; // DropDown Box @@ -23,21 +27,44 @@ export default function MyJobTable({ MyJobList, reloadJobList, className }) { Object.keys(filterCategories)[0] ); - let [jobPopout, setJobPopout] = useState({ show: false, data: {} }); // STATE TO HOLD THE VALUE OF THE ALERT DETAILS AND DETERMINE WHEN TO SHOW + const [jobPopout, setJobPopout] = useState({ show: false, data: {} }); - let [deleteJobPopout, setDeleteJobPopout] = useState({ + const [deleteJobPopout, setDeleteJobPopout] = useState({ show: false, data: {}, - }); // STATE TO HOLD THE VALUE OF THE ITEM DETAILS TO DELETE AND DETERMINE WHEN TO SHOW + }); const [editJob, setEditJob] = useState({ show: false, data: {} }); const [myCountry, setCountries] = useState(""); + const { userDetails: { country }, } = useSelector((state) => state?.userDetails); const userApi = useMemo(() => new usersService(), []); + const [creditPopup, setCreditPopup] = useState({ show: false, data: {} }); + const [walletItem, setWalletItem] = useState(null); + + /** + * Opens the credit popup. + * @param {Object} value - The value object. + */ + const openPopUp = (value) => { + setCreditPopup({ + show: true, + data: { ...value }, + }); + }; + + /** + * Closes the credit popup and dispatches a table reload action. + */ + const closePopUp = () => { + setCreditPopup({ show: false, data: {} }); + dispatch(tableReload({ type: "WALLETTABLE" })); + }; + // Get Country Api const getCountryList = useCallback(async () => { try { @@ -98,6 +125,121 @@ export default function MyJobTable({ MyJobList, reloadJobList, className }) { } }; + const { MyJobListHeader, MyJobListTable } = myJobTableFeatures( + filterCategories, + selectedCategory, + handleSetCategory, + setDeleteJobPopout, + setEditJob, + setJobPopout, + MyJobList, + filteredCurrentJobList, + handlePagination, + currentPage, + currentJobList, + indexOfFirstItem, + indexOfLastItem + ); + + return ( +
+ + {MyJobList?.loading ? ( + + ) : ( + + )} + + {/* Job List Popout */} + {jobPopout.show && ( + { + setJobPopout({ show: false, data: {} }); + }} + setWalletItem={setWalletItem} + openWallet={openPopUp} + situation={jobPopout.show} + /> + )} + {/* End of Job List Popout */} + + {/* Delete Job Popout */} + {deleteJobPopout.show && ( + { + setDeleteJobPopout({ show: false, data: {} }); + }} + reloadJobList={reloadJobList} + situation={deleteJobPopout.show} + /> + )} + {/* END of Delete Job Popout */} + + {editJob.show && ( + { + setEditJob({ + show: false, + data: {}, + }); + }} + situation={editJob.show} + country={myCountry} + categories={currentJobCart} + /> + )} + + {creditPopup.show && ( + + )} +
+ ); +} + +function myJobTableFeatures( + filterCategories, + selectedCategory, + handleSetCategory, + setDeleteJobPopout, + setEditJob, + setJobPopout, + MyJobList, + filteredCurrentJobList, + handlePagination, + currentPage, + currentJobList, + indexOfFirstItem, + indexOfLastItem +) { + // List of job table features + const MyJobListHeader = () => ( +
+
+

+ {filterCategories[selectedCategory]} Jobs +

+
+ +
+ ); + const JobListItem = ({ value, index, image_server }) => { let thePrice = PriceFormatter( value?.price * 0.01, @@ -187,7 +329,10 @@ export default function MyJobTable({ MyJobList, reloadJobList, className }) {