summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHATEC\SPVDEV001 <tri.susilo@altama.co.id>2023-04-12 14:04:07 +0700
committerHATEC\SPVDEV001 <tri.susilo@altama.co.id>2023-04-12 14:04:07 +0700
commit5de7459174ca226be99900958aa82523cac5fef2 (patch)
tree3560244cc967dbea1515b02c54fba47574343163
parent2413603c4e17c5ab2f3d07ec26c40f1d2f61bc67 (diff)
pembayaran tempo & recaptcha
-rw-r--r--package.json1
-rw-r--r--src/lib/address/components/CreatePembayaranTempo.jsx125
-rw-r--r--src/pages/pembayaran-tempo.jsx19
3 files changed, 145 insertions, 0 deletions
diff --git a/package.json b/package.json
index 2e185b4a..a4363bfd 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,7 @@
"react": "18.2.0",
"react-device-detect": "^2.2.3",
"react-dom": "18.2.0",
+ "react-google-recaptcha": "^2.1.0",
"react-hook-form": "^7.42.1",
"react-hot-toast": "^2.4.0",
"react-infinite-scroll-component": "^6.1.0",
diff --git a/src/lib/address/components/CreatePembayaranTempo.jsx b/src/lib/address/components/CreatePembayaranTempo.jsx
new file mode 100644
index 00000000..88e4aec9
--- /dev/null
+++ b/src/lib/address/components/CreatePembayaranTempo.jsx
@@ -0,0 +1,125 @@
+import HookFormSelect from '@/core/components/elements/Select/HookFormSelect'
+import { yupResolver } from '@hookform/resolvers/yup'
+import React, { useRef } 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'
+
+const CreatePembayaranTempo = () => {
+ const {
+ register,
+ handleSubmit,
+ formState: { errors }
+ } = useForm({
+ resolver: yupResolver(validationSchema),
+ defaultValues
+ })
+
+ const recaptchaRef = useRef(null)
+
+ const onSubmitHandler = async (values) => {
+ const recaptchaValue = recaptchaRef.current.getValue()
+ if (!recaptchaValue) {
+ toast.error('Catcha harus diisi')
+ return
+ }
+ const data = {
+ ...values
+ }
+
+ const address = await createAddressApi({ data })
+ if (address?.id) {
+ toast.success('Berhasil menambahkan alamat')
+ router.back()
+ }
+ }
+ return (
+ <div className='container mx-auto p-4 md:p-0 my-0 md:my-10'>
+ <h1 className='text-h-sm md:text-title-sm font-semibold mb-6'>Pembayaran Tempo</h1>
+ <div className='w-full p-4 bg-white border border-gray_r-6 rounded'>
+ <form onSubmit={handleSubmit(onSubmitHandler)}>
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4'>
+ <div>
+ <label className='form-label mb-2'>Alamat Email *</label>
+ <input
+ {...register('email')}
+ placeholder='contoh@email.com'
+ type='email'
+ className='form-input'
+ />
+ <div className='text-caption-2 text-danger-500 mt-1'>{errors.email?.message}</div>
+ </div>
+ </div>
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'>
+ <div>
+ <label className='form-label mb-2'>Nama Lengkap *</label>
+ <input
+ {...register('name')}
+ placeholder='Jhon Doe'
+ type='text'
+ className='form-input'
+ />
+ <div className='text-caption-2 text-danger-500 mt-1'>{errors.name?.message}</div>
+ </div>
+ </div>
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'>
+ <div>
+ <label className='form-label mb-2'>Nomor Pokok Wajib Pajak (NPWP) *</label>
+ <input {...register('npwp')} type='file' className='form-input' />
+ <div className='text-caption-2 text-danger-500 mt-1'>{errors.npwp?.message}</div>
+ </div>
+ </div>
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'>
+ <div>
+ <label className='form-label mb-2'>Nomor Induk Berusaha (NIB) atau</label>
+ <input {...register('nib')} type='file' className='form-input' />
+ </div>
+ </div>
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'>
+ <div>
+ <label className='form-label mb-2'>Tanda Daftar Perusahaan (TDP) atau</label>
+ <input {...register('tdp')} type='file' className='form-input' />
+ {/* <div className='text-caption-2 text-danger-500 mt-1'>{errors.name?.message}</div> */}
+ </div>
+ </div>
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'>
+ <div>
+ <label className='form-label mb-2'>Surat Izin Usaha Perdagangan (SIUP) atau</label>
+ <input {...register('siup')} type='file' className='form-input' />
+ {/* <div className='text-caption-2 text-danger-500 mt-1'>{errors.name?.message}</div> */}
+ </div>
+ </div>
+
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'>
+ <div>
+ <ReCAPTCHA ref={recaptchaRef} sitekey={process.env.NEXT_PUBLIC_RECAPTCHA_GOOGLE} />
+ </div>
+ </div>
+ <div className='grid grid-cols-1 md:grid-cols-2 gap-4 mt-4'>
+ <div>
+ <button type='submit' className='btn-yellow w-full md:w-fit mt-6 ml-0 md:ml-auto'>
+ Simpan
+ </button>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ )
+}
+const validationSchema = Yup.object().shape({
+ name: Yup.string().min(3, 'Minimal 3 karakter').required('Harus di-isi'),
+ email: Yup.string().email('Format harus seperti contoh@email.com').required('Harus di-isi'),
+ npwp: Yup.string().required('Harus di-isi')
+})
+const defaultValues = {
+ name: '',
+ email: '',
+ npwp: '',
+ siup: '',
+ tdp: '',
+ nib: ''
+}
+
+export default CreatePembayaranTempo
diff --git a/src/pages/pembayaran-tempo.jsx b/src/pages/pembayaran-tempo.jsx
new file mode 100644
index 00000000..4482c0d1
--- /dev/null
+++ b/src/pages/pembayaran-tempo.jsx
@@ -0,0 +1,19 @@
+import Seo from '@/core/components/Seo'
+import SimpleFooter from '@/core/components/elements/Footer/SimpleFooter'
+import HookFormSelect from '@/core/components/elements/Select/HookFormSelect'
+import BasicLayout from '@/core/components/layouts/BasicLayout'
+import CreatePembayaranTempo from '@/lib/address/components/CreatePembayaranTempo'
+import { Controller } from 'react-hook-form'
+
+export default function pembayaran_tempo() {
+
+ return (
+ <>
+ <Seo title='Pembayaran Tempo - Indoteknik.com' />
+
+ <BasicLayout>
+ <CreatePembayaranTempo></CreatePembayaranTempo>
+ </BasicLayout>
+ </>
+ )
+}