diff options
| author | it-fixcomart <it@fixcomart.co.id> | 2025-01-22 10:06:37 +0700 |
|---|---|---|
| committer | it-fixcomart <it@fixcomart.co.id> | 2025-01-22 10:06:37 +0700 |
| commit | 238c675eecaf6f4f953d87c4b0a128bfa139cff4 (patch) | |
| tree | 640980c3effdf2c96c280d7cad4ab98d33d07de9 /src/lib/merchant/components/InformasiVendor.jsx | |
| parent | 898c82a908d604862596e477bd66ecc15fe3af0c (diff) | |
<iman> update merchant
Diffstat (limited to 'src/lib/merchant/components/InformasiVendor.jsx')
| -rw-r--r-- | src/lib/merchant/components/InformasiVendor.jsx | 984 |
1 files changed, 164 insertions, 820 deletions
diff --git a/src/lib/merchant/components/InformasiVendor.jsx b/src/lib/merchant/components/InformasiVendor.jsx index f86cf3c9..d00f27ed 100644 --- a/src/lib/merchant/components/InformasiVendor.jsx +++ b/src/lib/merchant/components/InformasiVendor.jsx @@ -52,45 +52,9 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { resolver: yupResolver(validationSchema), defaultValues, }); - 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 [categoryProduk, setCategoryProduk] = useState([]); - const [zips, setZips] = useState([]); const [isExample, setIsExample] = useState(false); - const [BannerMerchant, setBannerMerchant] = useState(); - const [isPkp, setIsPkp] = useState(false); - const recaptchaRef = useRef(null); const router = useRouter(); const auth = useAuth(); @@ -102,11 +66,7 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { { value: 2, label: 'Barang Dikirimkan' }, { value: 3, label: 'Tukar Faktur' }, ]; - const dataBisnisType = [ - { value: 1, label: 'PT' }, - { value: 2, label: 'CV' }, - { value: 3, label: 'Perorangan' }, - ]; + const dataTempo = [ { value: 24, label: 'Tempo 14 Hari' }, { value: 25, label: 'Tempo 30 Hari' }, @@ -114,29 +74,6 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { { value: 31, label: 'Tempo 90 Hari' }, ]; - 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)' }, - ]; - - const category_produk = [ - { id: 2040, name: 'Pengaman, Kesehatan & Keamanan' }, - { id: 2097, name: 'Perkakas Tangan, Listrik & Pneumatic' }, - { id: 2161, name: 'Mesin Industrial' }, - { id: 2222, name: 'Mesin Pertanian & Perkebunan' }, - { id: 2246, name: 'Mesin Pembersih & Janitorial' }, - { id: 2273, name: 'Cairan Berbahan Kimia' }, - { id: 2315, name: 'Perlengkapan Pengukuran & Pengujian' }, - { id: 2354, name: 'Peralatan Listrik & Elektronik' }, - { id: 2394, name: 'Perlengkapan Logistik & Gudang' }, - { id: 2420, name: 'Peralatan Kantor & Stationery' }, - { id: 2445, name: 'Komponen & Aksesoris' }, - { id: 2477, name: 'Peralatan Horeca & Food Service' }, - ]; - const midIndex = Math.ceil(categoryProduk.length / 2); const firstColumn = categoryProduk.slice(0, midIndex); const secondColumn = categoryProduk.slice(midIndex); @@ -146,7 +83,6 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { const loadData = async () => { const data = await getMerchantApi(); if (data) { - console.log('data vendor', data); reset({ hargaTayang: data.hargaTayang || '', categoryProduk: data.categoryProduk || '', @@ -170,7 +106,6 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { }); const handleKreditLimitChange = (e) => { - console.log('e', e); let value = e.target?.value ? e.target.value : e; // Hapus semua karakter non-numeric @@ -195,17 +130,11 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { // form.categoryProduk ? form.categoryProduk.split(',').map(Number) : [] // Parse string menjadi array angka // [] // Parse string menjadi array angka ); - console.log( - 'kategori produk', - watch('categoryProduk').split(',').map(Number) - ); - console.log('selectedIds', selectedIds); const handleCheckboxChange = (id) => { const updatedSelected = selectedIds.includes(id) ? selectedIds.filter((selectedId) => selectedId !== id) : [...selectedIds, id]; - console.log('updatedSelected', updatedSelected); setSelectedIds(updatedSelected); // Mengubah array kembali menjadi string yang dipisahkan oleh koma @@ -219,13 +148,14 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { }; useEffect(() => { - window.scrollTo({ - top: 0, - behavior: 'smooth', - }); + if (!isKonfirmasi) { + window.scrollTo({ + top: 0, + behavior: 'smooth', + }); + } }, []); - console.log('categoryProduk', categoryProduk); useEffect(() => { const loadCategories = async () => { let dataCategories = await odooApi('GET', '/api/v1/category/tree'); @@ -233,157 +163,12 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { id: category.id, name: category.name, })); - console.log('formattedCategories', formattedCategories); // Simpan hasil ke state setCategoryProduk(formattedCategories); }; loadCategories(); }, []); - 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); - } - }; - - loadProfile(); - }, [auth?.parentId]); - - 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 == 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'); - - 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'); - - 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 (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}` - ); - - let dataMasuk = []; // Array untuk menyimpan kode pos yang sudah diproses - - 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, - })); - - setZips(dataZips); // Set hasil ke state - }; - - loadZip(); - } - }, [watchsubDistrict, subDistricts]); - console.log('errors', errors); const onSubmitHandler = async (values) => { const toastId = toast.loading('Mengirimkan formulir merchant...'); const data = { @@ -416,43 +201,6 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { 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]; - - 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); - } - 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 - })); - }; - console.log("watch('isPengajuanTempo')", watch('kreditLimit')); return ( <> @@ -743,25 +491,9 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { </DesktopView> <MobileView> <div className='container flex flex-col items-star py-4'> - {BannerMerchant && ( - <ImageBanner - src={BannerMerchant} - alt='FORM MERCHANT' - width={1000} - height={160} - className='w-full mt-6' - /> + {!isKonfirmasi && ( + <h2 className='font-semibold mb-6 text-xl'>Informasi Vendor</h2> )} - <h1 className='text-h-sm md:text-title-sm font-semibold mb-6 text-center'> - Form Merchant - </h1> - <div className='text-center mb-6'> - 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. - </div> - <h2 className='font-semibold mb-6'>Informasi Perusahaan</h2> <div className='w-full mt-4'> <form @@ -771,583 +503,189 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { <div className='w-full flex flex-col'> <div className='w-full'> <label className='form-label text-nowrap'> - Nama Perusahaan + Harga Tayang (HET){' '} + <span className=' opacity-60'>(Opsional)</span> </label> <input - {...register('company')} - placeholder='Format: PT. INDOTEKNIK DOTCOM GEMILANG' - type='text' + {...register('hargaTayang')} + placeholder='Jelaskan detail HET yang anda miliki' + type='textarea' className='form-input' /> <div className='text-caption-2 text-danger-500 mt-1'> - {errors.company?.message} + {errors.hargaTayang?.message} </div> - <span className='opacity-65 text-xs'> - Isi detail perusahaan sesuai dengan nama yang terdaftar{' '} - </span> </div> </div> - <div className='w-full flex flex-col'> - <div className='w-full'> - <label className='form-label text-nowrap'>Nama PIC</label> - <input - {...register('PICName')} - placeholder='Masukkan Nama PIC ' - type='text' - className='form-input' - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.PICName?.message} + <div + className={`flex flex-col gap-2 justify-between ${ + isKonfirmasi ? 'items-start' : 'items-start' + }`} + > + <label className='form-label '> + Tipe Kategori Produk yang Digunakan + </label> + <div className='flex flex-col justify-between gap-2 '> + <div className='flex flex-col gap-2'> + {firstColumn.map((item) => ( + <Checkbox + size='sm' + colorScheme='red' + key={item.id} + onChange={() => handleCheckboxChange(item.id)} + isChecked={isChecked(item.id)} + > + {item.name} + </Checkbox> + ))} + </div> + <div className='flex flex-col gap-2'> + {secondColumn.map((item) => ( + <Checkbox + size='sm' + colorScheme='red' + key={item.id} + isChecked={isChecked(item.id)} + onChange={() => handleCheckboxChange(item.id)} + > + {item.name} + </Checkbox> + ))} </div> - <span className='opacity-65 text-xs'> - Isi dengan nama sales / penanggung jawab - </span> + </div> + + <div className='text-caption-2 text-danger-500 mt-1'> + {errors.categoryProduk?.message} </div> </div> <div className='w-full flex flex-col'> <div className='w-full'> - <label className='form-label text-nowrap'> - Alamat Perusahaan - </label> + <label className='form-label text-nowrap'>Merk Dagang</label> <input - {...register('address')} - placeholder='Masukkan alamat lengkap perusahaan' + {...register('merkDagang')} + placeholder='Merk 1, Merk 2, Merk 3' type='text' className='form-input' /> <div className='text-caption-2 text-danger-500 mt-1'> - {errors.address?.message} - </div> - <div className='flex flex-row w-full justify-between gap-2'> - <div className='provinsi w-full'> - <Controller - name='state' - control={control} - render={(props) => ( - <HookFormSelect - {...props} - options={state} - placeholder='Provinsi' - /> - )} - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.state?.message} - </div> - </div> - <div className='kab w-full'> - <Controller - name='city' - control={control} - render={(props) => ( - <HookFormSelect - {...props} - options={cities} - disabled={!watchState} - placeholder='Kab/Kota' - /> - )} - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.city?.message} - </div> - </div> - </div> - <div className='flex flex-row w-full justify-between gap-2'> - <div className='kec w-full'> - <Controller - name='district' - control={control} - render={(props) => ( - <HookFormSelect - {...props} - options={districts} - disabled={!watchState || !watchCity} - placeholder='Kecamatan' - /> - )} - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.district?.message} - </div> - </div> - <div className='kel w-full'> - <Controller - name='subDistrict' - control={control} - render={(props) => ( - <HookFormSelect - {...props} - options={subDistricts} - disabled={!watchDistrict} - placeholder='Kelurahan' - /> - )} - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.subDistrict?.message} - </div> - </div> - <div className='zip w-full'> - <Controller - name='zip' - control={control} - render={(props) => ( - <> - {zips.length > 0 ? ( - <HookFormSelect - {...props} - options={zips} - disabled={!watchsubDistrict} - placeholder='Zip' - /> - ) : ( - <input - {...register('zip')} - placeholder='Kode Pos' - type='number' - className='form-input' - disabled={!watchsubDistrict} - /> - )} - </> - )} - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.zip?.message} - </div> - </div> - </div> - </div> - <span className='opacity-65 text-xs'> - Alamat sesuai dengan alamat perusahaan - </span> - </div> - <div className='w-full flex flex-col'> - <label className='form-label text-nowrap'>Data Bank</label> - <div className='w-full flex flex-row gap-2'> - <div> - <input - {...register('bank')} - placeholder='Nama bank' - type='text' - className='form-input' - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.bank?.message} - </div> - </div> - <div> - <input - {...register('rekening')} - placeholder='Nama Rekening' - type='text' - className='form-input' - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.rekening?.message} - </div> - </div> - <div> - <input - {...register('accountNumber')} - placeholder='Nomor Rekening Bank' - type='number' - className='form-input' - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.accountNumber?.message} - </div> + {errors.merkDagang?.message} </div> </div> - <span className='opacity-65 text-xs'> - Isi detail data bank perusahaan anda - </span> </div> <div className='w-full flex flex-col'> <label className='form-label text-nowrap'> - Email Perusahaan + Apakah anda memiliki Form Pengajuan Tempo? </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> - <span className='opacity-65 text-xs'> - Isi detail perusahaan sesuai dengan data yang terdaftar - </span> - </div> - <div className='w-full flex flex-col'> - <label className='form-label text-nowrap'>Email Sales</label> - <input - {...register('emailSales')} - placeholder='contoh@email.com' - type='email' - className='form-input' - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.emailSales?.message} + <div className='flex gap-x-4'> + <RadioGroup + onChange={handleCheckboxPortalChange} + value={watch('isPengajuanTempo')} + > + <Stack direction='row'> + <Radio colorScheme='red' value='ada'> + Ya, ada + </Radio> + <Radio colorScheme='red' value='tidak'> + Tidak ada + </Radio> + </Stack> + </RadioGroup> </div> - <span className='opacity-65 text-xs'> - Isi detail perusahaan sesuai dengan data yang terdaftar - </span> - </div> - <div className='w-full flex flex-col'> - <label className='form-label text-nowrap'>Email Finance</label> - <input - {...register('emailFinance')} - placeholder='contoh@email.com' - type='email' - className='form-input' - /> <div className='text-caption-2 text-danger-500 mt-1'> - {errors.emailFinance?.message} + {errors.isPengajuanTempo?.message} </div> - <span className='opacity-65 text-xs'> - Isi detail perusahaan sesuai dengan data yang terdaftar - </span> - </div> - <div className='w-full flex flex-col'> - <label className='form-label text-nowrap'> - No. Telepon Perusahaan - </label> - <input - {...register('phone')} - placeholder='Format: 08123456789 / (021) 123 4567' - type='tel' - className='form-input' - /> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.phone?.message} - </div> - <span className='opacity-65 text-xs'> - Isi detail perusahaan sesuai dengan data yang terdaftar - </span> </div> + <div className='w-full flex flex-col'> - <label className='form-label text-nowrap'>No. Handphone</label> - <input - {...register('mobile')} - placeholder='Masukkan nomor handphone' - type='tel' - className='form-input' + <label className='form-label text-nowrap'>Durasi Tempo</label> + <Controller + name='tempoDuration' + control={control} + render={(props) => ( + <HookFormSelect + {...props} + options={dataTempo} + placeholder={'Pilih Durasi Tempo'} + /> + )} /> + <div className='text-caption-2 text-danger-500 mt-1'> - {errors.mobile?.message} + {errors.tempoDuration?.message} </div> - <span className='opacity-65 text-xs'> - Isi detail perusahaan sesuai dengan data yang terdaftar - </span> + {!isKonfirmasi && ( + <span className='text-xs opacity-60'> + Pilih durasi tempo yang anda inginkan + </span> + )} </div> <div className='w-full flex flex-col'> <label className='form-label text-nowrap'> - Harga Tayang (HET){' '} - <span className=' opacity-60'>(Opsional)</span> + Jumlah Kredit Limit </label> <input - {...register('hargaTayang')} - placeholder='Masukkan Harga Tayang (HET)' + value={kreditLimitFormat} + onChange={handleKreditLimitChange} + placeholder='Masukkan jumlah kredit limit' type='text' className='form-input' /> <div className='text-caption-2 text-danger-500 mt-1'> - {errors.hargaTayang?.message} - </div> - </div> - - <div className='w-full flex flex-col gap-2'> - <label className='form-label text-nowrap'> - NPWP{' '} - {!isPkp && <span className=' opacity-60'>(Opsional)</span>} - </label> - <div className='flex flex-row items-start justify-start gap-2'> - <label - htmlFor='npwp' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.npwp ? 'Ubah Dokumen' : 'Upload Dokumen'} - </label> - <input - {...register('npwp')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='npwp' - onChange={(e) => { - handleFileChange(e); // Untuk update UI (opsional) - }} - aria-invalid={errors.npwp?.message} - /> - <span className=' text-gray-600 line-clamp-2'> - {fileNames.npwp} - </span> - </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> - - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.npwp?.message} - </div> - </div> - <div className='w-full flex flex-col gap-2 items-start '> - <div className='flex flex-row w-full justify-between items-center '> - <label className='form-label text-nowrap'> - SPPKP{' '} - {!isPkp && <span className=' opacity-60'>(Opsional)</span>} - </label> - <div - onClick={() => 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' - > - <EyeIcon className={`w-4 mr-2 `} /> - - <p className='font-light text-xs '>Lihat Contoh</p> - </div> - </div> - <div className='flex flex-row items-start justify-start gap-2'> - <label - htmlFor='sppkp' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.sppkp ? 'Ubah Dokumen' : 'Upload Dokumen'} - </label> - <input - {...register('sppkp')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='sppkp' - onChange={handleFileChange} - aria-invalid={errors.sppkp?.message} - /> - <span className=' text-gray-600 line-clamp-2'> - {fileNames.sppkp} - </span> - </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> - - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.sppkp?.message} - </div> - </div> - - <div className='w-full flex flex-col gap-2'> - <label className='form-label text-nowrap'> - KTP Dirut/Direktur{' '} - {isPkp && <span className=' opacity-60'>(Opsional)</span>} - </label> - <div className='flex flex-row items-start justify-start gap-2 '> - <label - htmlFor='dokumenKtpDirut' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.dokumenKtpDirut - ? 'Ubah Dokumen' - : 'Upload Dokumen'} - </label> - <input - {...register('dokumenKtpDirut')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='dokumenKtpDirut' - onChange={handleFileChange} - aria-invalid={errors.dokumenKtpDirut?.message} - /> - <span className=' text-gray-600 line-clamp-2'> - {fileNames.dokumenKtpDirut} - </span> + {errors.kreditLimit?.message} </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> - - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.dokumenKtpDirut?.message} - </div> - </div> - - <div className='w-full flex flex-col gap-2'> - <label className='form-label text-nowrap'> - Kartu Nama <span className=' opacity-60'>(Opsional)</span>{' '} - </label> - <div className='flex flex-row items-start justify-start gap-2'> - <label - htmlFor='kartuNama' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.kartuNama ? 'Ubah Dokumen' : 'Upload Dokumen'} - </label> - <input - {...register('kartuNama')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='kartuNama' - onChange={handleFileChange} - aria-invalid={errors.kartuNama?.message} - /> - <span className=' text-gray-600 line-clamp-2'> - {fileNames.kartuNama} - </span> - </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> - - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.kartuNama?.message} - </div> - </div> - - <div className='w-full flex flex-col gap-2 items-start '> - <div className='flex flex-row w-full justify-between items-center'> - <label className='form-label text-wrap'> - Surat Pernyataan Nomor Rekening{' '} - <span className=' opacity-60'>(Opsional)</span> - </label> - <a - href='/file/Surat Pernyataan Nomor Rekening.docx' - download='Surat Pernyataan Nomor Rekening.docx' - className='h-fit rounded text-white p-2 flex flex-row items-center bg-red-500 hover:cursor-pointer hover:bg-red-400' - > - <p className='font-light text-xs text-nowrap'> - Download Template - </p> - </a> - </div> - <div className='flex flex-row items-start justify-start gap-2'> - <label - htmlFor='suratPernyataan' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.suratPernyataan - ? 'Ubah Dokumen' - : 'Upload Dokumen'} - </label> - <input - {...register('suratPernyataan')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='suratPernyataan' - onChange={handleFileChange} - aria-invalid={errors.suratPernyataan?.message} - /> - <span className=' text-gray-600 line-clamp-2'> - {fileNames.suratPernyataan} + {!isKonfirmasi && ( + <span className='opacity-65 text-xs'> + isi dengan kredit limit perusahaan anda </span> - </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> - - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.suratPernyataan?.message} - </div> + )} </div> - <div className='w-full flex flex-col gap-2 items-start '> + <div className='w-full flex flex-col'> <label className='form-label text-nowrap'> - Foto Gudang / Kantor Bagian Depan + {' '} + Waktu Pengiriman </label> - <div className='flex flex-row items-start justify-start gap-2'> - <label - htmlFor='fotoKantor' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.fotoKantor ? 'Ubah Dokumen' : 'Upload Dokumen'} - </label> - <input - {...register('fotoKantor')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='fotoKantor' - onChange={handleFileChange} - aria-invalid={errors.fotoKantor?.message} - /> - <span className='mt-2 text-gray-600 line-clamp-2'> - {fileNames.fotoKantor} - </span> - </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> + <div className='w-full flex flex-row gap-2'> + <div className='w-1/3'> + <input + {...register('waktuPengiriman')} + placeholder='Masukkan waktu pengiriman' + type='text' + className='form-input' + /> + <div className='text-caption-2 text-danger-500 mt-1'> + {errors.waktuPengiriman?.message} + </div> + </div> + <div className='w-2/3 '> + <div className='flex flex-row items-center gap-2'> + <label className=' text-nowrap text-sm opacity-70 italic'> + terhitung sejak + </label> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.fotoKantor?.message} + <Controller + name='terhitungSejak' + control={control} + render={(props) => ( + <HookFormSelect + {...props} + options={dataTerhitungSejak} + placeholder={'waktu pengiriman'} + /> + )} + /> + </div> + <div className='text-caption-2 text-danger-500 mt-1'> + {errors.terhitungSejak?.message} + </div> + </div> </div> - </div> - <div className='w-full flex flex-col gap-2 items-start '> - <label className='form-label text-nowrap'> - Data Produk (Item Name, Gambar, Deskripsi){' '} - <span className=' opacity-60'>(Opsional)</span>{' '} - </label> - <div className='flex flex-row items-start justify-start gap-2'> - <label - htmlFor='dataProduk' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.dataProduk ? 'Ubah Dokumen' : 'Upload Dokumen'} - </label> - <input - {...register('dataProduk')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='dataProduk' - onChange={handleFileChange} - aria-invalid={errors.dataProduk?.message} - /> - <span className='mt-2 text-gray-600 line-clamp-2'> - {fileNames.dataProduk} + {!isKonfirmasi && ( + <span className='opacity-65 text-xs'> + isi dengan waktu pengiriman anda </span> - </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> - - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.fotoKantor?.message} - </div> + )} </div> - <div className='w-full flex flex-col gap-2 items-start '> - <label className='form-label text-nowrap'>Pricelist</label> - <div className='flex flex-row items-start justify-start gap-2'> - <label - htmlFor='pricelist' - className='cursor-pointer min-w-40 text-center bg-gray-200 hover:bg-gray-300 text-gray-700 py-2 px-4 rounded' - > - {fileNames.pricelist ? 'Ubah Dokumen' : 'Upload Dokumen'} - </label> - <input - {...register('pricelist')} - type='file' - className='form-input hidden' - accept='.pdf,.png,.jpg,.jpeg' - id='pricelist' - onChange={handleFileChange} - aria-invalid={errors.pricelist?.message} - /> - <span className='mt-2 text-gray-600 line-clamp-2'> - {fileNames.pricelist} - </span> - </div> - <span className='text-xs opacity-60 text-red-500'> - Format: pdf, jpeg, jpg, png. max file size 2MB - </span> - <div className='text-caption-2 text-danger-500 mt-1'> - {errors.pricelist?.message} - </div> - </div> <div className=''> {/* <div> <ReCAPTCHA @@ -1356,23 +694,29 @@ const InformasiVendor = forwardRef(({ handleIsError, isKonfirmasi }, ref) => { /> </div> */} </div> - <div className='flex justify-end mb-4'> - <Button - colorScheme='red' - className='w-full md:w-fit' - type='submit' - > - Daftar Merchant{' '} - {/* {<ChevronRightIcon className='w-5' color='white' />} */} - </Button> - <div> - {/* <button - type='submit' - className='btn-yellow w-full md:w-fit mt-6 ml-0 md:ml-auto' - > - Simpan - </button> */} - </div> + <div className='flex justify-center w-full '> + {/* <Button + colorScheme='red' + className='w-full md:w-fit' + type='submit' + > + Daftar Merchant{' '} + {<ChevronRightIcon className='w-5' color='white' />} + </Button> */} + {!isKonfirmasi && ( + <div className='w-full'> + <span className='text-xs opacity-60'> + *Pastikan data yang anda masukan sudah benar dan sesuai + </span> + <button + type='submit' + className='btn-light bg-red-500 rounded-lg text-white w-full py-2 px-4 md:w-fit mt-2 ml-0 md:ml-auto flex justify-center hover:bg-red-400' + > + <span className={` `}>Langkah Selanjutnya</span> + {<ChevronRightIcon className='w-5' />} + </button> + </div> + )} </div> </form> <PageContent path='/daftar-merchant' /> |
