import React from "react"; import { useForm } from "react-hook-form"; import { yupResolver } from "@hookform/resolvers/yup"; import * as yup from "yup"; import MkdSDK from "@/utils/MkdSDK"; import { useNavigate } from "react-router-dom"; import { tokenExpireError, AuthContext } from "@/authContext"; import { GlobalContext, showToast } from "@/globalContext"; import AddAdminPageLayout from "@/layouts/AddAdminPageLayout"; import CustomComboBoxV2 from "@/components/CustomComboBoxV2"; const AddAdminIdVerificationPage = () => { const { dispatch: globalDispatch } = React.useContext(GlobalContext); const [frontImage, setFrontImage] = React.useState(); const [backImage, setBackImage] = React.useState(); const [selectedVerification, setSelectedVerification] = React.useState("Passport"); let sdk = new MkdSDK(); const schema = yup .object({ type: yup.string().required(), expiry_date: yup.string().test("is-not-in-past", "Not a valid date", (val) => { if (val == "") return false; const date = new Date(val); return date > new Date(); }), status: yup.number().required().integer(), user_id: yup.string().required("Please select a user"), }) .required(); const { dispatch } = React.useContext(AuthContext); const navigate = useNavigate(); const { control, setValue, register, handleSubmit, setError, clearErrors, formState: { errors }, } = useForm({ resolver: yupResolver(schema), defaultValues: { user_id: "" }, }); const selectStatus = [ { key: "0", value: "Pending" }, { key: "1", value: "Verified" }, { key: "2", value: "Declined" }, ]; const selectType = [ { key: "Passport", value: "Passport" }, { key: "Driver's License", value: "Driver's License" }, ]; const handleTypeChange = (e) => { setSelectedVerification(e.target.value); }; const handleImageUpload = async (file) => { const formData = new FormData(); for (let i = 0; i < file.length; i++) { formData.append("file", file[i]); } try { const upload = await sdk.uploadImage(formData); return upload.url; } catch (error) { tokenExpireError(dispatch, error.message); } }; async function fetchUsersFiltered(emailFilter, setter, initialUserId) { try { var initial = []; if (+initialUserId) { const initialUserResult = await sdk.callRawAPI("/v2/api/custom/ergo/user/PAGINATE", { page: 1, limit: 1, where: [`${initialUserId ? `ergo_user.id = ${+initialUserId}` : ""}`] }, "POST"); if (Array.isArray(initialUserResult.list)) { initial = initialUserResult.list; } } if (emailFilter) { const result = await sdk.callRawAPI("/v2/api/custom/ergo/user/PAGINATE", { page: 1, limit: 10, where: [`ergo_user.email LIKE '%${emailFilter}%'`] }, "POST"); if (Array.isArray(result.list)) { setter([...initial, ...result.list]); } } } catch (err) { console.log("err", err); } } const verifyUserAndUploadImage = async (data) => { try { if (!frontImage) { setError("front_image", { type: "manual", message: "Image is required", }); } if (!backImage) { setError("back_image", { type: "manual", message: "Image is required", }); } if (!frontImage || (!backImage && selectedVerification != "Passport")) return; data.frontImage = await handleImageUpload(frontImage); if (selectedVerification == "Passport") { data.backImage = null; } if (backImage) { data.backImage = await handleImageUpload(backImage); } onSubmit(data); } catch (error) { console.log("Error", error); setError("type", { type: "manual", message: error.message, }); tokenExpireError(dispatch, error.message); } }; const onSubmit = async (data) => { console.log("data", data); try { sdk.setTable("id_verification"); const result = await sdk.callRestAPI( { type: data.type, expiry_date: data.expiry_date, status: data.status, image_front: data.frontImage, image_back: data.backImage, user_id: data.user_id, }, "POST", ); if (!result.error) { showToast(globalDispatch, "Added"); navigate("/admin/id_verification"); } else { if (result.validation) { const keys = Object.keys(result.validation); for (let i = 0; i < keys.length; i++) { const field = keys[i]; setError(field, { type: "manual", message: result.validation[field], }); } } } } catch (error) { tokenExpireError(dispatch, error.message); if (error.message == "Validation error") { updateIdVerification({ type: data.type, expiry_date: data.expiry_date, status: data.status, image_front: data.frontImage, image_back: data.backImage, user_id: data.user_id, }); return; } setError("type", { type: "manual", message: error.message, }); } }; const onError = (x, y) => { if (!frontImage) { setError("front_image", { type: "manual", message: "Image is required", }); } if (!backImage && selectedVerification != "Password") { setError("back_image", { type: "manual", message: "Image is required", }); } }; React.useEffect(() => { globalDispatch({ type: "SETPATH", payload: { path: "id_verification", }, }); }, []); async function updateIdVerification(data) { try { sdk.setTable("id_verification"); await sdk.callRestAPI({ set: data, where: { user_id: data.user_id } }, "PUTWHERE"); showToast(globalDispatch, "Updated"); navigate("/admin/id_verification"); } catch (err) { tokenExpireError(dispatch, err); showToast(globalDispatch, err, 4000, "ERROR"); } } return (
setValue("user_id", val)} valueField={"id"} labelField={"email"} getItems={fetchUsersFiltered} className="relative flex h-[40px] items-center rounded border px-3" placeholder="User email" />

{errors.user_id?.message}

{errors.type?.message}

{errors.expiry_date?.message}

{errors.status?.message}

{ setFrontImage(e.target.files); clearErrors("front_image"); }} />

{errors.front_image?.message}

{ setBackImage(e.target.files); clearErrors("back_image"); }} />

{errors.back_image?.message}

); }; export default AddAdminIdVerificationPage;