import React, { useState, useEffect } from 'react'; import * as Yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import { Controller, useForm } from 'react-hook-form'; import HookFormSelect from '@/core/components/elements/Select/HookFormSelect'; import odooApi from '~/libs/odooApi'; import stateApi from '@/lib/address/api/stateApi.js'; import cityApi from '@/lib/address/api/cityApi'; import { Radio, RadioGroup, Stack, Checkbox } from '@chakra-ui/react'; const informasiPerusahaan = ({}) => { const { register, handleSubmit, formState: { errors }, control, reset, watch, setValue, getValues, values, } = useForm({ resolver: yupResolver(validationSchema), defaultValues, }); const [industries, setIndustries] = useState([]); const [selectedCategory, setSelectedCategory] = useState(''); const [states, setState] = useState([]); const [cities, setCities] = useState([]); const [bersedia, setBersedia] = useState(true); const category_produk = [ { id: 1, name: 'Pengaman, Kesehatan & Keamanan' }, { id: 2, name: 'Perkakas Tangan, Listrik & Pneumatic' }, { id: 3, name: 'Mesin Industrial' }, { id: 4, name: 'Mesin Pertanian & Perkebunan' }, { id: 5, name: 'Mesin Pembersih & Janitorial' }, { id: 6, name: 'Cairan Berbahan Kimia' }, { id: 7, name: 'Perlengkapan Pengukuran & Pengujian' }, { id: 8, name: 'Peralatan Listrik & Elektronik' }, { id: 9, name: 'Perlengkapan Logistik & Gudang' }, { id: 10, name: 'Peralatan Kantor & Stationery' }, { id: 11, name: 'Komponen & Aksesoris' }, { id: 12, name: 'Peralatan Horeca & Food Service' }, ]; console.log('defaultValues', getValues()); 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(() => { setValue('city', ''); if (watchState) { const loadCities = async () => { let dataCities = await cityApi({ stateId: watchState }); dataCities = dataCities.map((city) => ({ value: city.id, label: city.name, })); setCities(dataCities); }; loadCities(); } }, [watchState, setValue]); useEffect(() => { const loadIndustries = async () => { const dataIndustries = await odooApi('GET', '/api/v1/partner/industry'); setIndustries( dataIndustries?.map((o) => ({ value: o.id, label: o.name, category: o.category, })) ); }; loadIndustries(); }, []); useEffect(() => { const selectedIndustryType = industries.find( (industry) => industry.value === watch('industry_id') ); if (selectedIndustryType) { // updateForm('industry_id', `${selectedIndustryType?.value}`); setSelectedCategory(selectedIndustryType.category); } }, [watch('industry_id'), industries]); const onSubmitHandler = async (values) => { setValue('bersedia', `${bersedia}`); console.log('values', values); }; const estimasiValue = watch('estimasi'); const tempoLimitValue = watch('tempoLimit'); // Memformat angka menjadi format rupiah const formatRupiah = (value) => { if (!value) return ''; const numberString = value.replace(/[^0-9]/g, ''); // Menghapus karakter non-digit return numberString ? 'Rp ' + new Intl.NumberFormat('id-ID').format(numberString) : ''; }; // Memperbarui nilai input dengan format rupiah const handleChange = (e) => { const value = e.target.value; const formattedValue = formatRupiah(value); setValue('estimasi', formattedValue); // Mengupdate nilai di react-hook-form }; const onChangeTempoDuration = (e) => { setValue('tempoDuration', `${e}`); // Mengupdate nilai di react-hook-form }; const onChangeTempoLimit = (e) => { setValue('tempoLimit', `${e}`); // Mengupdate nilai di react-hook-form }; const handleBersediaChange = () => { setBersedia(!bersedia); setValue('bersedia', `${bersedia}`); }; const [selectedIds, setSelectedIds] = useState([]); const handleCheckboxChange = (id) => { setSelectedIds((prevSelected) => prevSelected.includes(id) ? prevSelected.filter((selectedId) => selectedId !== id) : [...prevSelected, id] ); setValue('categoryProduk', `${selectedIds}`); }; const midIndex = Math.ceil(category_produk.length / 2); const firstColumn = category_produk.slice(0, midIndex); const secondColumn = category_produk.slice(midIndex); return ( <>

Informasi Perusahaan

isi detail perusahaan sesuai dengan nama yang terdaftar{' '}
Format: PT. INDOTEKNIK DOTCOM GEMILANG
{errors.name?.message}
isi detail perusahaan sesuai dengan nama yang terdaftar
( )} /> {selectedCategory && ( Kategori : {selectedCategory} )}
{errors.industry_id?.message}
alamat sesuai dengan alamat kantor pusat
{errors.street?.message}
( )} />
{errors.state?.message}
( )} />
{errors.city?.message}
{errors.zip?.message}
isi no telfon perusahaan yang sesuai
{errors.mobile?.message}
Isi detail data bank perusahaan anda
Format: BCA, Mandiri, CIMB, BNI dll
{errors.bankName?.message}
Format: John Doe
{errors.accountName?.message}
Format: 01234567896
{errors.accountNumber?.message}
isi no telfon perusahaan yang sesuai
value.replace(/^Rp\s*/, ''), // Menyimpan hanya angka })} placeholder='Isi estimasi pembelian produk pertahun' type='text' className='form-input' // padding untuk memberi ruang untuk "RP" value={formatRupiah(estimasiValue)} // Menampilkan nilai terformat onChange={handleChange} // Mengatur perubahan input />
{errors.estimasi?.message}
Pilih durasi tempo yang anda inginkan
7 Hari 14 Hari 30 Hari
Ajukan nilai limit yang anda mau
{/* Kolom 1 */} 5.000.000 10.000.000 15.000.000 20.000.000 {/* Kolom 2 */} 25.000.000 30.000.000 35.000.000
{ const value = e.target.value; const formattedValue = formatRupiah(value); setValue('tempoLimit', formattedValue); // Mengupdate nilai di react-hook-form }} />
{/* */}
{errors.tempoDuration?.message}
*Durasi dan limit dapat berbeda sesuaui dengan verifikasi oleh tim Indoteknik.com
Pilih produk bisa lebih dari 1
Saya bersedia Tidak bersedia
{errors.estimasi?.message}
Pilih produk bisa lebih dari 1
{firstColumn.map((item) => ( handleCheckboxChange(item.id)} > {item.name} ))}
{secondColumn.map((item) => ( handleCheckboxChange(item.id)} > {item.name} ))}
*Pastikan data yang anda masukan sudah benar dan sesuai
); }; const validationSchema = Yup.object().shape({ // email: Yup.string() // .email('Format harus seperti contoh@email.com') // .required('Harus di-isi'), name: Yup.string().required('Harus di-isi'), industry_id: Yup.string().required('Harus di-pilih'), street: Yup.string().required('Harus di-isi'), zip: Yup.string().required('Harus di-isi'), state: Yup.string().required('Harus di-pilih'), city: Yup.string().required('Harus di-pilih'), mobile: Yup.string().required('Harus di-isi'), bankName: Yup.string().required('Harus di-isi'), accountName: Yup.string().required('Harus di-isi'), accountNumber: Yup.string().required('Harus di-isi'), estimasi: Yup.string().required('Harus di-isi'), tempoDuration: Yup.string().required('Harus di-isi'), bersedia: Yup.string().required('Harus di-pilih'), }); const defaultValues = { // email: '', name: '', industry_id: '', street: '', state: '', city: '', zip: '', mobile: '', bankName: '', accountName: '', accountNumber: '', estimasi: '', tempoDuration: '', bersedia: '', }; export default informasiPerusahaan;