import React, { useState, useEffect, useMemo, useRef } from 'react';
import { Controller, set, 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 districtApi from '@/lib/address/api/districtApi';
import subDistrictApi from '@/lib/address/api/subDistrictApi';
import { Radio, RadioGroup, Stack, Checkbox } from '@chakra-ui/react';
import { usePengajuanTempoStore } from '../../../../src-migrate/modules/register/stores/usePengajuanTempoStore';
import useDevice from '@/core/hooks/useDevice';
import Divider from '@/core/components/elements/Divider/Divider';
import { getAuth } from '~/libs/auth';
import addressApi from '@/lib/address/api/addressApi';
import { toast } from 'react-hot-toast';
import BottomPopup from '@/core/components/elements/Popup/BottomPopup';
import { useRouter } from 'next/router';
const InformasiPerusahaan = ({
chekValid,
buttonSubmitClick,
isKonfirmasi,
}) => {
const auth = getAuth();
const router = useRouter();
const { isDesktop, isMobile } = useDevice();
const { control, watch, setValue, getValues } = useForm();
const { form, errors, validate, updateForm } = usePengajuanTempoStore();
const [states, setState] = useState([]);
const [cities, setCities] = useState([]);
const [districts, setDistricts] = useState([]);
const [subDistricts, setSubDistricts] = useState([]);
const [zips, setZips] = useState([]);
const [industries, setIndustries] = useState([]);
const [paymentTerm, setPaymentTerm] = useState([]);
const [selectedCategory, setSelectedCategory] = useState('');
const [bersedia, setBersedia] = useState(null);
const [changeConfirmation, setChangeConfirmation] = useState(false);
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 radioOptions = [
{ label: '5.000.000', value: '5000000' },
{ label: '10.000.000', value: '10000000' },
{ label: '15.000.000', value: '15000000' },
{ label: '20.000.000', value: '20000000' },
{ label: '25.000.000', value: '25000000' },
{ label: '30.000.000', value: '30000000' },
{ label: '35.000.000', value: '35000000' },
];
useEffect(() => {
const loadState = async () => {
let dataState = await stateApi({ tempo: true });
dataState = dataState.map((state) => ({
value: state.id,
label: state.name,
}));
setState(dataState);
};
loadState();
}, []);
const watchState = watch('state');
useEffect(() => {
if (watchState) {
updateForm('state', `${watchState}`);
validate();
const loadCities = async () => {
let dataCities = await cityApi({ stateId: watchState });
dataCities = dataCities.map((city) => ({
value: city.id,
label: city.name,
}));
setCities(dataCities);
};
loadCities();
}
}, [watchState]);
const watchCity = watch('city');
// Untuk memperbarui form.city
useEffect(() => {
if (watchCity && form.city !== `${watchCity}`) {
updateForm('city', `${watchCity}`);
validate();
}
}, [watchCity]);
// Untuk memuat distrik
useEffect(() => {
if (watchCity) {
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(() => {
setValue('subDistrict', '');
if (watchDistrict) {
updateForm('district', `${watchDistrict}`);
validate();
const loadSubDistricts = async () => {
let dataSubDistricts = await subDistrictApi({
districtId: watchDistrict,
});
dataSubDistricts = dataSubDistricts.map((district) => ({
value: district.id,
label: district.name,
}));
setSubDistricts(dataSubDistricts);
};
loadSubDistricts();
}
}, [watchDistrict, setValue]);
const watchsubDistrict = watch('subDistrict');
useEffect(() => {
let kelurahan = '';
let kecamatan = '';
if (watchDistrict) {
for (const data in districts) {
if (districts[data].value == watchDistrict) {
kecamatan = districts[data].label.toLowerCase();
}
}
}
if (watchsubDistrict) {
updateForm('subDistrict', `${watchsubDistrict}`);
validate();
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, setValue, subDistricts]);
const watchZip = watch('zip');
useEffect(() => {
if (watchZip) {
updateForm('zip', `${watchZip}`);
validate();
}
}, [watchZip]);
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('industryId')
);
if (selectedIndustryType) {
updateForm('industryId', `${selectedIndustryType?.value}`);
validate();
setSelectedCategory(selectedIndustryType.category);
}
}, [watch('industryId'), industries]);
useEffect(() => {
const loadPaymentTerm = async () => {
const dataPaymentTerm = [
{ id: 29, name: 'Tempo 7 Hari' },
{ id: 24, name: 'Tempo 14 Hari' },
{ id: 32, name: 'Tempo 21 Hari' },
{ id: 25, name: 'Tempo 30 Hari' },
];
setPaymentTerm(
dataPaymentTerm?.map((o) => ({
value: o.id,
label: o.name,
}))
);
};
loadPaymentTerm();
}, []);
useEffect(() => {
const selectedPaymentTerm = paymentTerm.find(
(industry) => industry.value === watch('tempoDuration')
);
if (selectedPaymentTerm) {
updateForm('tempoDuration', `${selectedPaymentTerm?.value}`);
validate();
}
}, [watch('tempoDuration'), paymentTerm]);
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)
: '';
};
const handleChange = (e) => {
const value = e.target.value;
const formattedValue = formatRupiah(value);
updateForm('estimasi', formattedValue.replace(/^Rp\s*/, ''));
validate();
};
const [isCustom, setIsCustom] = React.useState(false);
const [tempoLimitValueEx, setTempoLimitValueEx] = React.useState('');
const handleCheckboxBersediaChange = (value) => {
// if (value === 'bersedia') {
// setBersedia(true);
// } else if (value === 'tidakBersedia') {
// setBersedia(false);
// }
// updateForm('bersedia', `${value === 'bersedia'}`);
updateForm('bersedia', `${value}`);
validate();
};
const handleCheckboxPortalChange = (value) => {
// if (value === 'bersedia') {
// setBersedia(true);
// } else if (value === 'tidakBersedia') {
// setBersedia(false);
// }
// updateForm('bersedia', `${value === 'bersedia'}`);
updateForm('portal', `${value}`);
validate();
};
const [selectedIds, setSelectedIds] = useState(
form.categoryProduk ? form.categoryProduk.split(',').map(Number) : [] // Parse string menjadi array angka
);
const handleCheckboxChange = (id) => {
const updatedSelected = selectedIds.includes(id)
? selectedIds.filter((selectedId) => selectedId !== id)
: [...selectedIds, id];
setSelectedIds(updatedSelected);
// Mengubah array kembali menjadi string yang dipisahkan oleh koma
updateForm('categoryProduk', updatedSelected.join(','));
validate();
};
useEffect(() => {
if (form.categoryProduk) {
setSelectedIds(form.categoryProduk.split(',').map(Number)); // Parse string menjadi array angka
}
}, [form.categoryProduk]);
const isChecked = (id) => selectedIds.includes(id);
const handleInputChange = (event) => {
const { name, value } = event.target;
updateForm(name, value);
validate();
};
const midIndex = Math.ceil(category_produk.length / 2);
const firstColumn = category_produk.slice(0, midIndex);
const secondColumn = category_produk.slice(midIndex);
const isFormValid = useMemo(() => Object.keys(errors).length === 0, [errors]);
const nameRef = useRef(null);
const industry_idRef = useRef(null);
const streetRef = useRef(null);
const stateRef = useRef(null);
const cityRef = useRef(null);
const districtRef = useRef(null);
const subDistrictRef = useRef(null);
const zipRef = useRef(null);
const mobileRef = useRef(null);
const bankNameRef = useRef(null);
const accountNameRef = useRef(null);
const accountNumberRef = useRef(null);
const estimasiRef = useRef(null);
const tempoDurationRef = useRef(null);
const bersediaRef = useRef(null);
const portalRef = useRef(null);
const categoryProdukRef = useRef(null);
const tempoLimitRef = useRef(null);
useEffect(() => {
const options = {
behavior: 'smooth',
block: 'center',
};
const loadIndustries = async () => {
if (!isFormValid) {
if (errors.name && nameRef.current) {
nameRef.current.scrollIntoView(options);
return;
}
if (errors.industryId && industry_idRef.current) {
industry_idRef.current.scrollIntoView(options);
return;
}
if (errors.street && streetRef.current) {
streetRef.current.scrollIntoView(options);
return;
}
if (errors.state && stateRef.current) {
stateRef.current.scrollIntoView(options);
return;
}
if (errors.city && cityRef.current) {
cityRef.current.scrollIntoView(options);
return;
}
if (errors.district && districtRef.current) {
districtRef.current.scrollIntoView(options);
return;
}
if (errors.subDistrict && subDistrictRef.current) {
subDistrictRef.current.scrollIntoView(options);
return;
}
if (errors.zip && zipRef.current) {
zipRef.current.scrollIntoView(options);
return;
}
if (errors.mobile && mobileRef.current) {
mobileRef.current.scrollIntoView(options);
return;
}
if (errors.bankName && bankNameRef.current) {
bankNameRef.current.scrollIntoView(options);
return;
}
if (errors.accountName && accountNameRef.current) {
accountNameRef.current.scrollIntoView(options);
return;
}
if (errors.accountNumber && accountNumberRef.current) {
accountNumberRef.current.scrollIntoView(options);
return;
}
if (errors.estimasi && estimasiRef.current) {
estimasiRef.current.scrollIntoView(options);
return;
}
if (errors.tempoDuration && tempoDurationRef.current) {
tempoDurationRef.current.scrollIntoView(options);
return;
}
if (errors.bersedia && bersediaRef.current) {
bersediaRef.current.scrollIntoView(options);
return;
}
if (errors.portal && portalRef.current) {
portalRef.current.scrollIntoView(options);
return;
}
if (errors.categoryProduk && categoryProdukRef.current) {
categoryProdukRef.current.scrollIntoView(options);
return;
}
if (errors.tempoLimit && tempoLimitRef.current) {
tempoLimitRef.current.scrollIntoView(options);
return;
}
}
};
loadIndustries();
}, [buttonSubmitClick, chekValid]);
useEffect(() => {
if (form.industryId) {
setValue('industryId', parseInt(form.industryId));
}
if (form.state) {
setValue('state', parseInt(form.state));
}
if (form.district) {
setValue('district', parseInt(form.district));
}
if (form.subDistrict) {
setValue('subDistrict', parseInt(form.subDistrict));
}
if (form.zip) {
setValue('zip', parseInt(form.zip));
}
if (form.tempoDuration) {
setValue('tempoDuration', parseInt(form.tempoDuration));
}
if (form.tempoLimit) {
setValue('tempoLimit', form.tempoLimit);
}
if (form.tempoLimit) {
const isValueInOptions = radioOptions.some(
(option) => option.value === form.tempoLimit
);
if (isValueInOptions) {
setValue('tempoLimit', form.tempoLimit); // Set value dari radio options
setIsCustom(false); // Pastikan custom tidak aktif
} else {
setValue('tempoLimit', 'custom'); // Set value ke custom jika tidak termasuk dalam options
setIsCustom(true); // Aktifkan custom input
setTempoLimitValueEx(form.tempoLimit); // Set nilai input custom ke form.tempoLimit
}
}
}, [form]);
useEffect(() => {
if (form.city) {
setValue('city', parseInt(form.city));
}
}, [form.city]);
useEffect(() => {
const loadProfile = async () => {
try {
const dataProfile = await addressApi({ id: auth.parentId ? auth.parentId : auth.partnerId });
if (dataProfile.name) {
updateForm('name', dataProfile.name);
}
if (dataProfile.street) {
updateForm('street', dataProfile.street);
}
if (dataProfile.stateId.id) {
updateForm('state', `${dataProfile.stateId.id}`);
}
if (dataProfile.city.id) {
updateForm('city', `${dataProfile.city.id}`);
}
if (dataProfile.district.id) {
updateForm('district', `${dataProfile.district.id}`);
}
if (dataProfile.subDistrict.id) {
updateForm('subDistrict', `${dataProfile.subDistrict.id}`);
}
if (dataProfile.zip) {
updateForm('zip', dataProfile.zip);
}
if (dataProfile.mobile) {
updateForm('mobile', dataProfile.mobile.replace(/\D/g, ''));
} else {
setChangeConfirmation(true);
}
if (!dataProfile.email) {
setChangeConfirmation(true);
}
} catch (error) {
console.error('Error loading profile:', error);
} finally {
validate();
}
};
if (auth?.parentId || auth?.partnerId) {
loadProfile();
}
}, [auth?.parentId]);
useEffect(() => {
const loadProfile = async () => {
try {
const dataProfile = await addressApi({ id: auth.parentId });
setValue('industryId', parseInt(dataProfile.industryId));
setValue('state', parseInt(dataProfile.stateId.id));
setValue('city', parseInt(dataProfile.city.id));
setValue('district', parseInt(dataProfile.district.id));
setValue('subDistrict', parseInt(dataProfile.subDistrict.id));
} catch (error) {
console.error('Error loading profile:', error);
}
};
if (auth?.parentId) {
loadProfile();
}
}, [auth?.parentId, setValue]);
const handleLengkapiData = () => {
router.push('/my/profile');
};
return (
<>