import { Field, Form, Formik } from "formik"; import React, { useEffect, useState } from "react"; import { useDispatch } from "react-redux"; import * as Yup from "yup"; import usersService from "../../services/UsersService"; import { tableReload } from "../../store/TableReloads"; import InputCom from "../Helpers/Inputs/InputCom"; import LoadingSpinner from "../Spinners/LoadingSpinner"; const validationSchema = Yup.object().shape({ country: Yup.string() .min(1, "Minimum 3 characters") .max(25, "Maximum 25 characters") .required("Country is required"), price: Yup.string() .typeError("Invalid number") .min(1, "Price must be greater than 0") .test("no-e", "Invalid number", (value) => { if (value && /\d+e/.test(value)) { return false; } return true; }) .required("Price is required"), title: Yup.string() .min(5, "Minimum 5 characters") .max(149, "Maximum 149 characters") .required("Title is required"), description: Yup.string() .min(5, "Minimum 5 characters") .max(299, "Maximum 299 characters") .required("Description is required"), job_detail: Yup.string() .min(3, "Minimum 3 characters") .max(1440, "Maximum 1440 characters") .required("Details is required"), timeline_days: Yup.number() .typeError("you must specify a number") .min(1, "Price must be greater than 0") .required("Timeline is required"), category: Yup.array().min(1, "Select at least one checkbox"), }); function AddJob({ popUpHandler, categories }) { const ApiCall = new usersService(); let dispatch = useDispatch(); let [currency, setCurrency] = useState({ loading: true, status: false, data: null, }); // To Hold the array of currency getUserCurrency returns let initialValues = { // initial values for formik country: "", price: "", title: "", description: "", job_detail: "", timeline_days: "", category: [], }; let [requestStatus, setRequestStatus] = useState({ loading: false, status: false, message: "", }); // Holds state when submit button is pressed // FUNCTION TO GET Currency const getUserCurrency = () => { setCurrency((prev) => ({ ...prev, loading: true })); ApiCall.getUserWallets() .then((res) => { if (res.data.internal_return < 0) { setCurrency({ loading: false, status: true, data: [] }); return; } setCurrency({ loading: false, status: true, data: res.data.result_list, }); }) .catch((err) => { setCurrency({ loading: false, status: false, data: [] }); }); }; // FUNCTION TO HANDLE ADD JOB FORM const handleAddJob = (values, helpers) => { let reqData = { country: values?.country, price: Number(values.price) * 100, title: values?.title, description: values?.description, job_detail: values?.job_detail, timeline_days: values?.timeline_days, category: values.category?.join("@"), }; setRequestStatus({ loading: true, status: false, message: "" }); ApiCall.jobManagerCreateJob(reqData) .then((res) => { if (res.data.internal_return < 1) { setRequestStatus({ loading: false, status: false, message: "Could not complete your request at the moment", }); setTimeout(() => { popUpHandler(); }, 1500); return; } setRequestStatus({ loading: false, status: true, message: "Job Added Successfully", }); setTimeout(() => { dispatch(tableReload({ type: "JOBTABLE" })); popUpHandler(); }, 1000); }) .catch((err) => { setRequestStatus({ loading: false, status: false, message: "Opps! something went wrong. Try Again", }); }) .finally(() => { setTimeout(() => { setRequestStatus({ loading: false, status: false, message: "" }); }, 5000); }); }; useEffect(() => { getUserCurrency(); }, []); return (