import React, { useCallback, useEffect, useMemo, useState } from "react"; import ModalCom from "../Helpers/ModalCom"; import { Form, Formik } from "formik"; import * as Yup from "yup"; import InputCom from "../Helpers/Inputs/InputCom"; import LoadingSpinner from "../Spinners/LoadingSpinner"; import usersService from "../../services/UsersService"; import { useNavigate } from "react-router-dom"; import { tableReload } from "../../store/TableReloads"; import { useDispatch } from "react-redux"; const EditJobPopOut = ({ details, onClose, situation, country }) => { const dispatch = useDispatch() let [requestStatus, setRequestStatus] = useState({ loading: false, status: false, message: "", }); // Holds state when submit button is pressed const validationSchema = Yup.object().shape({ country: Yup.string() .min(1, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("Country is required"), price: Yup.number() .typeError("you must specify a number") .min(1, "Price must be greater than 0") .required("Price is required"), title: Yup.string() .min(3, "Minimum 3 characters") .max(100, "Maximum 25 characters") .required("Title is required"), description: Yup.string() .min(3, "Minimum 3 characters") .max(250, "Maximum 250 characters") .required("Description is required"), job_detail: Yup.string() .min(3, "Minimum 3 characters") .max(250, "Maximum 250 characters") .required("Details is required"), timeline_days: Yup.number() .typeError("you must specify a number") .min(1, "Price must be greater than 0") .required("Price is required"), }); let initialValues = { // initial values for formik country: country, price: details?.price, title: details?.title, description: details?.description, job_detail: details?.job_detail, timeline_days: details?.timeline_days, }; const jobApi = useMemo(() => new usersService(), []); const navigate = useNavigate(); const handleEditJob = useCallback( async (values) => { setRequestStatus({ loading: true, message: "" }); let reqData = { job_id: details.job_id, job_uid: details.job_uid, ...values, }; delete reqData?.country try { let res = await jobApi.jobManagerUpdateJob(reqData); let { data } = await res; if (data?.internal_return < 0) return; setRequestStatus({ loading: false, message: null }); setTimeout(() => { dispatch(tableReload({type:'JOBTABLE'})) navigate("/myjobs", { replace: true }); onClose(); }, 1000); } catch (error) { setRequestStatus({ loading: false, message: error }); throw new Error(error); } }, [jobApi, navigate, onClose, details] ); return (

Edit Job

{(props) => (
{props.errors.country && props.touched.country && (

{props.errors.country}

)}
{/* Price */}
{props.errors.price && props.touched.price && (

{props.errors.price}

)}
{/* Title */}
{props.errors.title && props.touched.title && (

{props.errors.title}

)}
{/* Description */}
{props.errors.description && props.touched.description && (

{props.errors.description}

)}
{/* Details */}