import { useCallback, useEffect, useMemo, useState } from "react"; import dataImage2 from "../../assets/images/data-table-user-2.png"; import SelectBox from "../Helpers/SelectBox"; import DeleteJobPopout from "../jobPopout/DeleteJobPopout"; import JobListPopout from "../jobPopout/JobListPopout"; import LoadingSpinner from "../Spinners/LoadingSpinner"; import { useSelector } from "react-redux"; import usersService from "../../services/UsersService"; import { handlePagingFunc } from "../Pagination/HandlePagination"; import PaginatedList from "../Pagination/PaginatedList"; import EditJobPopOut from "../jobPopout/EditJobPopout"; import { PriceFormatter } from "../Helpers/PriceFormatter"; import EditIcon from '../../assets/images/icon-edit.svg' import DeleteIcon from '../../assets/images/icon-delete.svg' import localImgLoad from "../../lib/localImgLoad"; export default function MyJobTable({ MyJobList, reloadJobList, className }) { // Getting the categories const currentJobCart = MyJobList?.data?.categories; // DropDown Box const filterCategories = { All: "All Categories", ...currentJobCart }; const [selectedCategory, setCategory] = useState( 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 let [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(), []); // Get Country Api const getCountryList = useCallback(async () => { const res = await userApi.getSignupCountryData(); try { if (res.status === 200) { const { data: { signup_country }, } = await res; let checkCountry = signup_country ?.filter((item) => item[0] == country) ?.map((item, idx) => item[1]) .join(""); setCountries(checkCountry); } } catch (error) { throw new Error(error); } }, [userApi, country]); useEffect(() => { getCountryList(); }, [getCountryList]); // Handle Pagination const [currentPage, setCurrentPage] = useState(0); const indexOfFirstItem = Number(currentPage); const indexOfLastItem = Number(indexOfFirstItem) + Number(process.env.REACT_APP_ITEM_PER_PAGE); // Handle Filter Job List const filterJobList = () => { if (selectedCategory === "All") return MyJobList?.data?.result_list; else return MyJobList?.data?.result_list?.filter((item) => item.category.includes(selectedCategory) ); }; const currentJobList = filterJobList(); // Handling Filter Pagination const filteredCurrentJobList = currentJobList?.slice( indexOfFirstItem, indexOfLastItem ); const handlePagination = (e) => { handlePagingFunc(e, setCurrentPage); }; // Handles the category selection const handleSetCategory = (value) => { setCurrentPage(0); for (let i in filterCategories) { if (filterCategories[i] == value) { setCategory(i); } } }; const JobListItem = ({ value, index }) => { let thePrice = PriceFormatter( value?.price * 0.01, value?.currency_code, value?.currency ); return (
| No Jobs Available In This Category! |
| No Jobs Avaliable! |