From cb083185ce59df7143ea258e147a118a1e416e56 Mon Sep 17 00:00:00 2001 From: it-fixcomart Date: Mon, 20 Jan 2025 10:33:19 +0700 Subject: update merchant --- .../merchant/components/InformasiPerusahaan.jsx | 2717 ++++++++++---------- 1 file changed, 1403 insertions(+), 1314 deletions(-) (limited to 'src/lib/merchant/components/InformasiPerusahaan.jsx') diff --git a/src/lib/merchant/components/InformasiPerusahaan.jsx b/src/lib/merchant/components/InformasiPerusahaan.jsx index a5456378..88bad0c4 100644 --- a/src/lib/merchant/components/InformasiPerusahaan.jsx +++ b/src/lib/merchant/components/InformasiPerusahaan.jsx @@ -4,7 +4,13 @@ import stateApi from '@/lib/address/api/stateApi.js'; import districtApi from '@/lib/address/api/districtApi'; import subDistrictApi from '@/lib/address/api/subDistrictApi'; import { yupResolver } from '@hookform/resolvers/yup'; -import React, { useEffect, useRef, useState } from 'react'; +import React, { + useEffect, + useRef, + useState, + forwardRef, + useImperativeHandle, +} from 'react'; import ReCAPTCHA from 'react-google-recaptcha'; import { Controller, useForm } from 'react-hook-form'; import { toast } from 'react-hot-toast'; @@ -26,1518 +32,1601 @@ import DesktopView from '@/core/components/views/DesktopView'; import getFileBase64 from '@/core/utils/getFileBase64'; import odooApi from '~/libs/odooApi'; -const CreateMerchant = ({ handleIsError }) => { - const isError = (value) => { - // Logika menentukan error - const result = value ? true : false; - handleIsError(result); // Panggil handleIsError dari Merchant - return result; - }; - // React.useEffect(() => { - // handleIsError(isError()); - // }, [handleIsError]); - const { - register, - handleSubmit, - formState: { errors }, - control, - reset, - watch, - setValue, - getValues, - } = useForm({ - resolver: yupResolver(validationSchema), - defaultValues, - }); - console.log('errors', errors); - console.log('errors length', errors.length); - const list_unit = [ - { - value: 'Manufacturing', - label: 'Manufacturing', - }, - { - value: 'Hospitality', - label: 'Hospitality', - }, - { - value: 'Automotive', - label: 'Automotive', - }, - { - value: 'Retail', - label: 'Retail', - }, - { - value: 'Maining', - label: 'Maining', - }, - { - value: 'Lain - Lain', - label: 'Lain - Lain', - }, - ]; - const [state, setState] = useState([]); - const [cities, setCities] = useState([]); - const [districts, setDistricts] = useState([]); - const [fileNames, setFileNames] = useState({}); - const [DeatailFile, setDetailFile] = useState({}); - const [subDistricts, setSubDistricts] = useState([]); - const [zips, setZips] = useState([]); - const [isExample, setIsExample] = useState(false); - const [BannerMerchant, setBannerMerchant] = useState(); - const [isPkp, setIsPkp] = useState(false); - - useEffect(() => { - window.scrollTo({ - top: 0, - behavior: 'smooth', - }); - }, []); - - const recaptchaRef = useRef(null); - const router = useRouter(); - - const auth = useAuth(); - if (auth == false) { - router.push(`/login?next=${encodeURIComponent('/daftar-merchant')}`); - } - const dataBisnisType = [ - { value: 1, label: 'PT' }, - { value: 2, label: 'CV' }, - { value: 3, label: 'Perorangan' }, - ]; - const dataCategoryPerusahaan = [ - { value: 1, label: 'Principal (Pemegang merk/Produsen)' }, - { value: 2, label: 'Sole Distributor (Distributor Tunggal)' }, - { value: 3, label: 'Authorized Distributor (Distributor Resmi)' }, - { value: 4, label: 'Importer (Pengimpor Barang)' }, - { value: 5, label: 'Wholesaler (Pedagang Besar)' }, - ]; - - useEffect(() => { - const loadData = async () => { - try { - const data = await getMerchantApi(); - console.log('data', data); - reset({ - pejabatName: data.pejabatName ? data.pejabatName : '', - PICName: data.picMerchant || '', - PICPosition: data.picPosition || '', - address: data.address || '', - state: data.state || '', - city: data.city || '', - district: data.district || '', - subDistrict: data.subDistrict || '', - zip: parseInt(data.zip) || '', - email: data.emailCompany || '', - emailSales: data.emailSales || '', - emailFinance: data.emailFinance || '', - bank: data.bankName || '', - rekening: data.rekeningName || '', - accountNumber: data.accountNumber || '', - phone: data.phone || '', - mobile: data.mobile || '', - bisnisType: data.bisnisType ? parseInt(data.bisnisType) : null, - categoryPerusahaan: data.categoryPerusahaan - ? parseInt(data.categoryPerusahaan) - : null, - website: data.website || '', - }); - } catch (error) { - console.error('Error loading profile:', error); - handleIsError(true); // Jika ada error, panggil fungsi error handler - } +const CreateMerchant = forwardRef( + ({ handleIsError, isKonfirmasi, buttonSubmitClick }, ref) => { + const isError = (value) => { + // Logika menentukan error + const result = value ? true : false; + handleIsError(result); // Panggil handleIsError dari Merchant + return result; }; + // React.useEffect(() => { + // handleIsError(isError()); + // }, [handleIsError]); + const { + register, + handleSubmit, + formState: { errors }, + control, + reset, + watch, + setValue, + getValues, + } = useForm({ + resolver: yupResolver(validationSchema), + defaultValues, + }); + console.log('errors', errors); + console.log('errors length', errors.length); + const list_unit = [ + { + value: 'Manufacturing', + label: 'Manufacturing', + }, + { + value: 'Hospitality', + label: 'Hospitality', + }, + { + value: 'Automotive', + label: 'Automotive', + }, + { + value: 'Retail', + label: 'Retail', + }, + { + value: 'Maining', + label: 'Maining', + }, + { + value: 'Lain - Lain', + label: 'Lain - Lain', + }, + ]; + const [state, setState] = useState([]); + const [cities, setCities] = useState([]); + const [districts, setDistricts] = useState([]); + const [fileNames, setFileNames] = useState({}); + const [DeatailFile, setDetailFile] = useState({}); + const [subDistricts, setSubDistricts] = useState([]); + const [zips, setZips] = useState([]); + const [isExample, setIsExample] = useState(false); + const [BannerMerchant, setBannerMerchant] = useState(); + const [isPkp, setIsPkp] = useState(false); - loadData(); - }, [reset, handleIsError]); + useEffect(() => { + window.scrollTo({ + top: 0, + behavior: 'smooth', + }); + }, []); - useEffect(() => { - const loadProfile = async () => { - try { - const dataProfile = await addressApi({ - id: auth.parentId ? auth.parentId : auth.partnerId, - }); - if (dataProfile.companyType == 'pkp') { - setIsPkp(true); - } - setValue('company', dataProfile?.name); - setValue('address', dataProfile?.alamatBisnis); - setValue('state', parseInt(dataProfile.stateId.id)); - setValue('city', parseInt(dataProfile.city.id)); - setValue('district', parseInt(dataProfile.district.id)); - setValue('subDistrict', parseInt(dataProfile.subDistrict.id)); - setValue('zip', parseInt(dataProfile.zip)); - } catch (error) { - console.error('Error loading profile:', error); - } - }; + // useEffect(() => { + // console.log('MASUK SINI IMANUEL'); + // handleSubmit(onSubmitHandler); // Jalankan handler saat buttonSubmitClick berubah + // }, [buttonSubmitClick]); - loadProfile(); - }, [auth?.parentId]); + useImperativeHandle(ref, () => () => { + handleSubmit(onSubmitHandler)(); + }); - useEffect(() => { - const loadState = async () => { - let dataState = await stateApi({ tempo: false }); - dataState = dataState.map((state) => ({ - value: state.id, - label: state.name, - })); - setState(dataState); - }; - loadState(); - }, []); + const recaptchaRef = useRef(null); + const router = useRouter(); - const watchState = watch('state'); - useEffect(() => { + const auth = useAuth(); if (auth == false) { - return; + router.push(`/login?next=${encodeURIComponent('/daftar-merchant')}`); } - if (watchState) { - // setValue('city', ''); - const loadCities = async () => { - let dataCities = await cityApi({ stateId: watchState }); - dataCities = dataCities?.map((city) => ({ - value: city.id, - label: city.name, - })); - setCities(dataCities); + const dataBisnisType = [ + { value: 1, label: 'PT' }, + { value: 2, label: 'CV' }, + { value: 3, label: 'Perorangan' }, + ]; + const dataCategoryPerusahaan = [ + { value: 1, label: 'Principal (Pemegang merk/Produsen)' }, + { value: 2, label: 'Sole Distributor (Distributor Tunggal)' }, + { value: 3, label: 'Authorized Distributor (Distributor Resmi)' }, + { value: 4, label: 'Importer (Pengimpor Barang)' }, + { value: 5, label: 'Wholesaler (Pedagang Besar)' }, + ]; + + useEffect(() => { + const loadData = async () => { + try { + const data = await getMerchantApi(); + console.log('data', data); + if (data) { + reset({ + pejabatName: data.pejabatName ? data.pejabatName : '', + PICName: data.picMerchant || '', + PICPosition: data.picPosition || '', + address: data.address ? data.address : '', + state: data.state ? data.state : '', + city: data.city || '', + district: data.district || '', + subDistrict: data.subDistrict || '', + zip: parseInt(data.zip) || '', + email: data.emailCompany || '', + emailSales: data.emailSales || '', + emailFinance: data.emailFinance || '', + bank: data.bankName || '', + rekening: data.rekeningName || '', + accountNumber: data.accountNumber || '', + phone: data.phone || '', + mobile: data.mobile || '', + bisnisType: data.bisnisType ? parseInt(data.bisnisType) : null, + categoryPerusahaan: data.categoryPerusahaan + ? parseInt(data.categoryPerusahaan) + : null, + website: data.website || '', + }); + } + } catch (error) { + console.error('Error loading profile:', error); + handleIsError(true); // Jika ada error, panggil fungsi error handler + } }; - loadCities(); - } - }, [auth, watchState]); - const watchCity = watch('city'); - console.log('watchCity', watchCity); - useEffect(() => { - if (watchCity) { - // setValue('district', ''); - const loadDistricts = async () => { - let dataDistricts = await districtApi({ cityId: watchCity }); - dataDistricts = dataDistricts.map((district) => ({ - value: district.id, - label: district.name, - })); - setDistricts(dataDistricts); + loadData(); + }, [reset, handleIsError]); + + useEffect(() => { + const loadProfile = async () => { + try { + const dataProfile = await addressApi({ + id: auth.parentId ? auth.parentId : auth.partnerId, + }); + if (dataProfile.companyType == 'pkp') { + setIsPkp(true); + } + setValue('company', dataProfile?.name); + setValue('address', dataProfile?.alamatBisnis); + setValue('state', parseInt(dataProfile.stateId.id)); + setValue('city', parseInt(dataProfile.city.id)); + setValue('district', parseInt(dataProfile.district.id)); + setValue('subDistrict', parseInt(dataProfile.subDistrict.id)); + setValue('zip', parseInt(dataProfile.zip)); + } catch (error) { + console.error('Error loading profile:', error); + } }; - loadDistricts(); - } - }, [watchCity]); - const watchDistrict = watch('district'); - useEffect(() => { - if (watchDistrict) { - // setValue('subDistrict', ''); - const loadSubDistricts = async () => { - let dataSubDistricts = await subDistrictApi({ - districtId: watchDistrict, - }); - dataSubDistricts = dataSubDistricts.map((district) => ({ - value: district.id, - label: district.name, + loadProfile(); + }, [auth?.parentId]); + + useEffect(() => { + const loadState = async () => { + let dataState = await stateApi({ tempo: false }); + dataState = dataState.map((state) => ({ + value: state.id, + label: state.name, })); - setSubDistricts(dataSubDistricts); + setState(dataState); }; - loadSubDistricts(); - } - }, [watchDistrict]); + loadState(); + }, []); + + const watchState = watch('state'); + useEffect(() => { + if (auth == false) { + return; + } + if (watchState) { + // setValue('city', ''); + const loadCities = async () => { + let dataCities = await cityApi({ stateId: watchState }); + dataCities = dataCities?.map((city) => ({ + value: city.id, + label: city.name, + })); + setCities(dataCities); + }; + loadCities(); + } + }, [auth, watchState]); + + const watchCity = watch('city'); + console.log('watchCity', watchCity); + useEffect(() => { + if (watchCity) { + // setValue('district', ''); + const loadDistricts = async () => { + let dataDistricts = await districtApi({ cityId: watchCity }); + dataDistricts = dataDistricts.map((district) => ({ + value: district.id, + label: district.name, + })); + setDistricts(dataDistricts); + }; + loadDistricts(); + } + }, [watchCity]); + + const watchDistrict = watch('district'); + useEffect(() => { + if (watchDistrict) { + // setValue('subDistrict', ''); + const loadSubDistricts = async () => { + let dataSubDistricts = await subDistrictApi({ + districtId: watchDistrict, + }); + dataSubDistricts = dataSubDistricts.map((district) => ({ + value: district.id, + label: district.name, + })); + setSubDistricts(dataSubDistricts); + }; + loadSubDistricts(); + } + }, [watchDistrict]); - const watchsubDistrict = watch('subDistrict'); + const watchsubDistrict = watch('subDistrict'); - useEffect(() => { - let kelurahan = ''; - let kecamatan = ''; + useEffect(() => { + let kelurahan = ''; + let kecamatan = ''; - if (watchDistrict) { - // setValue('zip', ''); - for (const data in districts) { - if (districts[data].value == watchDistrict) { - kecamatan = districts[data].label.toLowerCase(); + if (watchDistrict) { + // setValue('zip', ''); + for (const data in districts) { + if (districts[data].value == watchDistrict) { + kecamatan = districts[data].label.toLowerCase(); + } } } - } - if (watchsubDistrict) { - for (const data in subDistricts) { - if (subDistricts[data].value == watchsubDistrict) { - kelurahan = subDistricts[data].label.toLowerCase(); + if (watchsubDistrict) { + for (const data in subDistricts) { + if (subDistricts[data].value == watchsubDistrict) { + kelurahan = subDistricts[data].label.toLowerCase(); + } } - } - const loadZip = async () => { - const response = await fetch( - `https://alamat.thecloudalert.com/api/cari/index/?keyword=${kelurahan}` - ); + const loadZip = async () => { + const response = await fetch( + `https://alamat.thecloudalert.com/api/cari/index/?keyword=${kelurahan}` + ); - let dataMasuk = []; // Array untuk menyimpan kode pos yang sudah diproses + let dataMasuk = []; // Array untuk menyimpan kode pos yang sudah diproses - const result = await response.json(); + const result = await response.json(); - // Filter dan map data - const dataZips = result.result - .filter((zip) => zip.kecamatan.toLowerCase() === kecamatan) // Filter berdasarkan kecamatan - .filter((zip) => { - // Pastikan zip.kodepos belum ada di dataMasuk - if (dataMasuk.includes(zip.kodepos)) { - return false; // Jika sudah ada, maka skip (tidak akan ditambahkan) - } else { - dataMasuk.push(zip.kodepos); // Tambahkan ke dataMasuk - return true; // Tambahkan zip ke hasil - } - }) - .map((zip) => ({ - value: parseInt(zip.kodepos), - label: zip.kodepos, - })); + // Filter dan map data + const dataZips = result.result + .filter((zip) => zip.kecamatan.toLowerCase() === kecamatan) // Filter berdasarkan kecamatan + .filter((zip) => { + // Pastikan zip.kodepos belum ada di dataMasuk + if (dataMasuk.includes(zip.kodepos)) { + return false; // Jika sudah ada, maka skip (tidak akan ditambahkan) + } else { + dataMasuk.push(zip.kodepos); // Tambahkan ke dataMasuk + return true; // Tambahkan zip ke hasil + } + }) + .map((zip) => ({ + value: parseInt(zip.kodepos), + label: zip.kodepos, + })); - setZips(dataZips); // Set hasil ke state - }; + setZips(dataZips); // Set hasil ke state + }; - loadZip(); - } - }, [watchsubDistrict, subDistricts]); - const onSubmitHandler = async (values) => { - console.log('data yang mau dikirim', values); - const toastId = toast.loading('Mengirimkan formulir merchant...'); - const data = { - ...values, - name_merchant: 'Form Merchant - ' + values.company, - pejabat_name: values.pejabatName, - pic_merchant: values.PICName, - pic_position: values.PICPosition, - address: values.address, - state: values.state, - city: values.city, - district: values.district, - subDistrict: values.subDistrict, - zip: values.zip, - bank_name: values.bank, - rekening_name: values.rekening, - account_number: values.accountNumber, - email_company: values.email, - email_sales: values.emailSales, - email_finance: values.emailFinance, - phone: values.phone, - mobile: values.mobile, - bisnis_type: values.bisnisType, - category_perusahaan: values.categoryPerusahaan, - website: values.website, - description: - 'Nama Perusahaan : ' + - values.company + - ' \r\n Alamat : ' + - values.address + - ' \r\n Kota : ' + - values.city + - ' \r\n Telepon: ' + - values.phone + - ' \r\n Email : ' + - values.email + - ' \r\n No Hp : ' + - values.mobile, + loadZip(); + } + }, [watchsubDistrict, subDistricts]); + const onSubmitHandler = async (values) => { + console.log('apakah ada error', errors); + console.log('data yang mau dikirim IMANUEL', values); + const toastId = toast.loading('Mengirimkan formulir merchant...'); + const data = { + name_merchant: 'Form Merchant - ' + values.company, + pejabat_name: values.pejabatName, + pic_merchant: values.PICName, + pic_position: values.PICPosition, + address: values.address, + state: values.state, + city: values.city, + district: values.district, + subDistrict: values.subDistrict, + zip: values.zip, + bank_name: values.bank, + rekening_name: values.rekening, + account_number: values.accountNumber, + email_company: values.email, + email_sales: values.emailSales, + email_finance: values.emailFinance, + phone: values.phone, + mobile: values.mobile, + bisnis_type: values.bisnisType, + category_perusahaan: values.categoryPerusahaan, + website: values.website, + description: + 'Nama Perusahaan : ' + + values.company + + ' \r\n Alamat : ' + + values.address + + ' \r\n Kota : ' + + values.city + + ' \r\n Telepon: ' + + values.phone + + ' \r\n Email : ' + + values.email + + ' \r\n No Hp : ' + + values.mobile, + }; + const create_leads = await createMerchantApi({ data }); + if (create_leads) { + toast.dismiss(toastId); + toast.success('Berhasil menambahkan data'); + isError(false); + reset(); + // router.push('/'); + } else { + toast.dismiss(toastId); + toast.error('Gagal menambahkan data'); + } }; - const create_leads = await createMerchantApi({ data }); - if (create_leads) { - toast.dismiss(toastId); - toast.success('Berhasil menambahkan data'); - isError(false); - reset(); - // router.push('/'); - } else { - toast.dismiss(toastId); - toast.error('Gagal menambahkan data'); - } - }; - // const DownLoadSurat = () => { - // download surat dari /public/file/Surat Pernyataan Nomor Rekening.docx - // }; + // const DownLoadSurat = () => { + // download surat dari /public/file/Surat Pernyataan Nomor Rekening.docx + // }; - if (!auth) { - return; - } - // Tetap di bagian atas, tidak boleh ada kondisi sebelum hook + if (!auth) { + return; + } + // Tetap di bagian atas, tidak boleh ada kondisi sebelum hook - const handleFileChange = async (event) => { - let fileBase64 = ''; - const file = event.target.files[0]; + const handleFileChange = async (event) => { + let fileBase64 = ''; + const file = event.target.files[0]; - if (file.size > 500000) { - try { - const toastId = toast.loading('mencoba mengompresi file...'); - // Compress image file - const options = { - maxSizeMB: 0.5, // Target size in MB - maxWidthOrHeight: 1920, // Adjust as needed - useWebWorker: true, - }; - const compressedFile = await imageCompression(file, options); - toast.success('berhasil mengompresi file', { duration: 4000 }); - // Convert compressed file to Base64 - fileBase64 = await getFileBase64(compressedFile); - } catch (error) { - toast.error('Gagal mengompresi file', { duration: 4000 }); + if (file.size > 500000) { + try { + const toastId = toast.loading('mencoba mengompresi file...'); + // Compress image file + const options = { + maxSizeMB: 0.5, // Target size in MB + maxWidthOrHeight: 1920, // Adjust as needed + useWebWorker: true, + }; + const compressedFile = await imageCompression(file, options); + toast.success('berhasil mengompresi file', { duration: 4000 }); + // Convert compressed file to Base64 + fileBase64 = await getFileBase64(compressedFile); + } catch (error) { + toast.error('Gagal mengompresi file', { duration: 4000 }); + } + } else { + // Convert file to Base64 + fileBase64 = await getFileBase64(file); } - } else { - // Convert file to Base64 - fileBase64 = await getFileBase64(file); - } - const fieldName = event.target.name; // Nama input file - setDetailFile((prev) => ({ - ...prev, - [fieldName]: file ? fileBase64 : '', // Tambahkan atau perbarui file di state - })); - setFileNames((prev) => ({ - ...prev, - [fieldName]: file ? file.name : '', // Tambahkan atau perbarui file di state - })); - }; - return ( - <> - setIsExample(false)} - > -
- Contoh SPPKP -
-
- -
-

- Informasi Perusahaan -

+ const fieldName = event.target.name; // Nama input file + setDetailFile((prev) => ({ + ...prev, + [fieldName]: file ? fileBase64 : '', // Tambahkan atau perbarui file di state + })); + setFileNames((prev) => ({ + ...prev, + [fieldName]: file ? file.name : '', // Tambahkan atau perbarui file di state + })); + }; -
-
-
-
- - - Isi detail perusahaan sesuai dengan nama yang terdaftar{' '} - -
-
- - - Format: PT. INDOTEKNIK DOTCOM GEMILANG - -
- {errors.company?.message} + return ( + <> + setIsExample(false)} + > +
+ Contoh SPPKP +
+
+ +
+

+ Informasi Perusahaan +

+ +
+ +
+
+ + {!isKonfirmasi && ( + + Isi detail perusahaan sesuai dengan nama yang terdaftar{' '} + + )}
-
-
-
-
- - - isi dengan nama pejabat yang berwewenang di perusahaan anda - -
-
- -
- {errors.pejabatName?.message} +
+ + + Format: PT. INDOTEKNIK DOTCOM GEMILANG + +
+ {errors.company?.message} +
-
-
-
- - - isi dengan nama sales / penanggung jawab - -
-
- -
- {errors.PICName?.message} +
+
+ + {!isKonfirmasi && ( + + isi dengan nama pejabat yang berwewenang di perusahaan + anda + + )}
-
-
-
-
- - - isi dengan jabatan sales / penanggung jawab - -
-
- -
- {errors.PICPosition?.message} +
+ +
+ {errors.pejabatName?.message} +
-
-
-
- - - Alamat sesuai dengan alamat perusahaan - +
+
+ + {!isKonfirmasi && ( + + isi dengan nama sales / penanggung jawab + + )} +
+
+ +
+ {errors.PICName?.message} +
+
-
-
+
+
+ + {!isKonfirmasi && ( + + isi dengan jabatan sales / penanggung jawab + + )} +
+
- {errors.address?.message} + {errors.PICPosition?.message}
-
-
- ( - - )} +
+
+
+ + {!isKonfirmasi && ( + + Alamat sesuai dengan alamat perusahaan + + )} +
+
+
+
- {errors.state?.message} + {errors.address?.message}
-
- ( - +
+
+ ( + + )} /> - )} - /> -
- {errors.city?.message} +
+ {errors.state?.message} +
+
+
+ ( + + )} + /> +
+ {errors.city?.message} +
+
-
-
- ( - +
+ ( + + )} /> - )} +
+ {errors.district?.message} +
+
+
+ ( + + )} + /> +
+ {errors.subDistrict?.message} +
+
+
+ ( + <> + {/* Jika zips tidak kosong, tampilkan dropdown */} + {zips.length < 0 ? ( + // Jika zips kosong, tampilkan input manual + + ) : ( + + )} + + )} + /> +
+ {errors.zip?.message} +
+
+
+
+
+
+
+
+ + {!isKonfirmasi && ( + + Isi detail data bank perusahaan anda + + )} +
+
+
+ + {!isKonfirmasi && ( + + Format: BCA, Mandiri, CIMB, BNI dll + + )}
- {errors.district?.message} + {errors.bank?.message}
-
- ( - - )} +
+ + {!isKonfirmasi && ( + + Format: John Doe + + )}
- {errors.subDistrict?.message} + {errors.rekening?.message}
-
- ( - <> - {/* Jika zips tidak kosong, tampilkan dropdown */} - {zips.length < 0 ? ( - // Jika zips kosong, tampilkan input manual - - ) : ( - - )} - - )} +
+ + {!isKonfirmasi && ( + + Format: 01234567896 + + )}
- {errors.zip?.message} + {errors.accountNumber?.message}
-
-
-
- - - Isi detail data bank perusahaan anda - -
-
-
+
+
+ +
+
- - Format: BCA, Mandiri, CIMB, BNI dll -
- {errors.bank?.message} + {errors.email?.message}
-
+
+
+
+ +
+
- Format: John Doe
- {errors.rekening?.message} + {errors.emailSales?.message}
-
+
+
+
+ +
+
- - Format: 01234567896 -
- {errors.accountNumber?.message} + {errors.emailFinance?.message}
-
-
-
- -
-
- -
- {errors.email?.message} +
+
+ + {!isKonfirmasi && ( + + Isi no telepon perusahaan yang sesuai + + )} +
+
+ +
+ {errors.phone?.message} +
-
-
-
- +
+
+ + {!isKonfirmasi && ( + + Isi no handphone perusahaan yang sesuai + + )} +
+
+ +
+ {errors.mobile?.message} +
+
-
- -
- {errors.emailSales?.message} + +
+
+ + {!isKonfirmasi && ( + + Pilih tipe bisnis yang sesuai + + )} +
+
+
+
+ ( + + )} + /> + +
+ {errors.bisnisType?.message} +
+
+
-
-
-
- +
+
+ + {!isKonfirmasi && ( + + Pilih kategori perusahaan yang sesuai + + )} +
+
+
+
+ ( + + )} + /> + +
+ {errors.categoryPerusahaan?.message} +
+
+
+
-
- -
- {errors.emailFinance?.message} + +
+
+ + {!isKonfirmasi && ( + + isi dengan website perusahaan anda + + )} +
+
+ +
+ {errors.website?.message} +
-
-
-
- - - Isi no telepon perusahaan yang sesuai - -
-
- + {/*
+ -
- {errors.phone?.message} -
+
*/}
-
-
-
- - - Isi no handphone perusahaan yang sesuai - +
+ {/* */} + {!isKonfirmasi && ( +
+ + *Pastikan data yang anda masukan sudah benar dan sesuai + + +
+ )}
-
- -
- {errors.mobile?.message} + + +
+
+ + +
+ {BannerMerchant && ( + + )} +

+ Form Merchant +

+
+ Lorem ipsum dolor sit amet consectetur. Commodo suspendisse at + enim magnis ut quisque rhoncus. Felis volutpat fringilla + sollicitudin ultricies. Enim non eget in lorem netus. Nisl + pharetra accumsan diam suspendisse. +
+

Informasi Perusahaan

+ +
+
+
+
+ + +
+ {errors.company?.message} +
+ + Isi detail perusahaan sesuai dengan nama yang terdaftar{' '} +
-
- -
-
- - - Pilih tipe bisnis yang sesuai - +
+
+ + +
+ {errors.PICName?.message} +
+ + Isi dengan nama sales / penanggung jawab + +
-
-
-
- ( - - )} - /> - -
- {errors.bisnisType?.message} +
+
+ + +
+ {errors.address?.message} +
+
+
+ ( + + )} + /> +
+ {errors.state?.message} +
+
+
+ ( + + )} + /> +
+ {errors.city?.message} +
+
+
+
+
+ ( + + )} + /> +
+ {errors.district?.message} +
+
+
+ ( + + )} + /> +
+ {errors.subDistrict?.message} +
+
+
+ ( + <> + {zips.length > 0 ? ( + + ) : ( + + )} + + )} + /> +
+ {errors.zip?.message} +
-
-
-
-
- - - Pilih kategori perusahaan yang sesuai + + Alamat sesuai dengan alamat perusahaan
-
-
-
- ( - - )} +
+ +
+
+ +
+ {errors.bank?.message} +
+
+
+ -
- {errors.categoryPerusahaan?.message} + {errors.rekening?.message} +
+
+
+ +
+ {errors.accountNumber?.message}
-
-
- -
-
- - isi dengan website perusahaan anda + Isi detail data bank perusahaan anda
-
+
+
- {errors.website?.message} + {errors.email?.message}
+ + Isi detail perusahaan sesuai dengan data yang terdaftar +
-
- -
- {/*
- + + -
*/} -
-
- {/* */} - -
- - *Pastikan data yang anda masukan sudah benar dan sesuai +
+ {errors.emailSales?.message} +
+ + Isi detail perusahaan sesuai dengan data yang terdaftar -
-
- - -
-
- - -
- {BannerMerchant && ( - - )} -

- Form Merchant -

-
- Lorem ipsum dolor sit amet consectetur. Commodo suspendisse at enim - magnis ut quisque rhoncus. Felis volutpat fringilla sollicitudin - ultricies. Enim non eget in lorem netus. Nisl pharetra accumsan diam - suspendisse. -
-

Informasi Perusahaan

- -
-
-
-
+
- {errors.company?.message} + {errors.emailFinance?.message}
- Isi detail perusahaan sesuai dengan nama yang terdaftar{' '} + Isi detail perusahaan sesuai dengan data yang terdaftar
-
-
-
- +
+
- {errors.PICName?.message} + {errors.phone?.message}
- Isi dengan nama sales / penanggung jawab + Isi detail perusahaan sesuai dengan data yang terdaftar
-
-
-
-
-
- -
-
- -
- {errors.bank?.message} -
-
-
- -
- {errors.rekening?.message} -
-
-
- -
- {errors.accountNumber?.message} -
+ {errors.mobile?.message}
+ + Isi detail perusahaan sesuai dengan data yang terdaftar +
- - Isi detail data bank perusahaan anda - -
-
- - -
- {errors.email?.message} -
- - Isi detail perusahaan sesuai dengan data yang terdaftar - -
-
- - -
- {errors.emailSales?.message} -
- - Isi detail perusahaan sesuai dengan data yang terdaftar - -
-
- - -
- {errors.emailFinance?.message} -
- - Isi detail perusahaan sesuai dengan data yang terdaftar - -
-
- - -
- {errors.phone?.message} -
- - Isi detail perusahaan sesuai dengan data yang terdaftar - -
-
- - -
- {errors.mobile?.message} -
- - Isi detail perusahaan sesuai dengan data yang terdaftar - -
-
- - -
- {errors.hargaTayang?.message} -
-
- -
- -
-
-
-
+
-
setIsExample(!isExample)} - className='h-fit rounded text-white p-2 flex flex-row items-center bg-red-500 hover:cursor-pointer hover:bg-red-400' - > - +
+ + { + handleFileChange(e); // Untuk update UI (opsional) + }} + aria-invalid={errors.npwp?.message} + /> + + {fileNames.npwp} + +
+ + Format: pdf, jpeg, jpg, png. max file size 2MB + -

Lihat Contoh

+
+ {errors.npwp?.message}
-
- - - - {fileNames.sppkp} +
+
+ +
setIsExample(!isExample)} + className='h-fit rounded text-white p-2 flex flex-row items-center bg-red-500 hover:cursor-pointer hover:bg-red-400' + > + + +

Lihat Contoh

+
+
+
+ + + + {fileNames.sppkp} + +
+ + Format: pdf, jpeg, jpg, png. max file size 2MB -
- - Format: pdf, jpeg, jpg, png. max file size 2MB - -
- {errors.sppkp?.message} +
+ {errors.sppkp?.message} +
-
-
- -
-
-
- -
-
-
-
- - -

- Download Template -

-
-
-
- - - - {fileNames.suratPernyataan} +
+
+ + +

+ Download Template +

+
+
+
+ + + + {fileNames.suratPernyataan} + +
+ + Format: pdf, jpeg, jpg, png. max file size 2MB -
- - Format: pdf, jpeg, jpg, png. max file size 2MB - -
- {errors.suratPernyataan?.message} +
+ {errors.suratPernyataan?.message} +
-
-
- -
-
-
- -
-
-
- -
- - - - {fileNames.pricelist} +
+ +
+ + + + {fileNames.pricelist} + +
+ + Format: pdf, jpeg, jpg, png. max file size 2MB -
- - Format: pdf, jpeg, jpg, png. max file size 2MB - -
- {errors.pricelist?.message} +
+ {errors.pricelist?.message} +
-
-
- {/*
+
+ {/*
*/} -
-
- -
- {/* +
+ {/* */} +
-
- - + + +
-
- - - ); -}; + + + ); + } +); + const validationSchema = Yup.object().shape({ company: Yup.string().required('Harus di-isi'), pejabatName: Yup.string().required('Harus di-isi'), -- cgit v1.2.3