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(); 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 (

Request for Quotation

Halaman untuk pengajuan penawaran harga, lengkapi data di bawah ini dengan jelas untuk mempermudah tim support kami melayani kebutuhan Anda. Tim kami akan sesegera mungkin untuk membuatkan penawaran harga terbaik, hubungi kami melalui telpon jika ada keterlambatan pelayanan.
{errors.company?.message}
{errors.phone?.message}
} />
{errors.state?.message}
} />
{errors.city?.message}
{errors.contactPerson?.message}
{errors.mobile?.message}
{errors.email?.message}