import odooApi from '@/core/api/odooApi'; import HookFormSelect from '@/core/components/elements/Select/HookFormSelect'; import cityApi from '@/lib/address/api/cityApi'; import stateApi from '@/lib/address/api/stateApi.js'; import { yupResolver } from '@hookform/resolvers/yup'; import React, { useEffect, useRef, useState } from 'react'; import ReCAPTCHA from 'react-google-recaptcha'; import { Controller, useForm } from 'react-hook-form'; import { toast } from 'react-hot-toast'; import * as Yup from 'yup'; import createLeadApi from '../api/createLeadApi'; import getFileBase64 from '@/core/utils/getFileBase64'; import PageContent from '@/lib/content/components/PageContent'; import { useRouter } from 'next/router'; import useAuth from '@/core/hooks/useAuth'; const RequestForQuotation = () => { const { register, handleSubmit, formState: { errors }, control, reset, watch, setValue, } = useForm({ resolver: yupResolver(validationSchema), defaultValues, }); const [cities, setCities] = useState([]); const [state, setState] = useState([]); const quotationFileRef = useRef(null); const recaptchaRef = useRef(null); const router = useRouter(); const auth = useAuth(); if (auth == false) { router.push(`/login?next=${encodeURIComponent('/request-for-quotation')}`); } useEffect(() => { const loadState = async () => { let dataState = await stateApi({ tempo: false }); dataState = dataState.map((state) => ({ value: state.id, label: state.name, })); setState(dataState); }; loadState(); }, []); const watchState = watch('state'); useEffect(() => { if (!auth) { return; } const loadCities = async () => { setValue('city', ''); let dataCities = await cityApi({ stateId: watchState }); dataCities = dataCities?.map((obj) => ({ value: obj.name, label: obj.name, })); setCities(dataCities); }; loadCities(); }, [auth, watchState, setValue]); const onSubmitHandler = async (values) => { const recaptchaValue = recaptchaRef.current.getValue(); if (!recaptchaValue) { toast.error('Recaptcha harus diisi'); return; } const file = quotationFileRef.current.files[0]; let fileBase64 = null; if (typeof file !== 'undefined') { if (file.size > 5000000) { toast.error('Maksimal ukuran file adalah 5MB'); return; } fileBase64 = await getFileBase64(file); } const data = { name: `Request For Quotation - ${values.company}`, email_from: values.email, phone: values.phone, description: [ `Nama Perusahaan: ${values.company}`, `No. Telepon: ${values.phone}`, `Kota: ${values.city}`, `No. Handphone: ${values.mobile}`, `Alamat Email: ${values.email}`, `Keterangan: ${values.description}`, ].join('\n'), }; if (fileBase64) data.file_quotation = fileBase64; const createLead = await createLeadApi({ data }); if (createLead) { toast.success('Berhasil mengirimkan formulir request for quotation'); reset(); recaptchaRef.current.reset(); } }; if (!auth) { return; } return (