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 { Radio, RadioGroup, Stack, Checkbox } from '@chakra-ui/react'; import { usePengajuanTempoStorePengiriman } from '../../../../src-migrate/modules/register/stores/usePengajuanTempoStore'; const Pengiriman = ({ chekValid, buttonSubmitClick, isKonfirmasi }) => { const { control, watch, setValue } = useForm(); const { formPengiriman, errorsPengiriman, validatePengiriman, updateFormPengiriman, } = usePengajuanTempoStorePengiriman(); const [states, setState] = useState([]); const [cities, setCities] = useState([]); const [sameAddress, setSameAddress] = useState(false); const [everyWeekday, setEveryWeekday] = useState(false); const [everyWeek, setEveryWeek] = useState(false); const [tukarInvoice, setTukarInvoice] = useState(false); const [everyWeekdayPembayaran, setEveryWeekdayPembayaran] = useState(false); const [everyWeekPembayaran, setEveryWeekPembayaran] = useState(false); const [tukarInvoicePembayaran, setTukarInvoicePembayaran] = useState(false); const [selectedIds, setSelectedIds] = useState( formPengiriman.dokumenPengiriman ? formPengiriman.dokumenPengiriman.split(',').map(Number) : [] ); const [selectedIdsDokumenInvoice, setSelectedIdsselectedIdsDokumenInvoice] = useState( formPengiriman.dokumenPengirimanInvoice ? formPengiriman.dokumenPengirimanInvoice.split(',').map(Number) : [] ); const handleCheckboxChange = (id) => { const updatedSelected = selectedIds.includes(id) ? selectedIds.filter((selectedId) => selectedId !== id) : [...selectedIds, id]; setSelectedIds(updatedSelected); // Jika checkbox 'Lainnya' dipilih, aktifkan input custom updateFormPengiriman('dokumenPengiriman', updatedSelected.join(',')); validatePengiriman(); }; const handleCheckboxChangeDokumenPengirimanInvoice = (id) => { const updatedSelected = selectedIdsDokumenInvoice.includes(id) ? selectedIdsDokumenInvoice.filter((selectedId) => selectedId !== id) : [...selectedIdsDokumenInvoice, id]; setSelectedIdsselectedIdsDokumenInvoice(updatedSelected); // Jika checkbox 'Lainnya' dipilih, aktifkan input custom updateFormPengiriman('dokumenPengirimanInvoice', updatedSelected.join(',')); validatePengiriman(); }; useEffect(() => { if (formPengiriman.dokumenPengiriman) { setSelectedIds(formPengiriman.dokumenPengiriman.split(',').map(Number)); // Parse string menjadi array angka } }, [formPengiriman.dokumenPengiriman]); useEffect(() => { if (formPengiriman.dokumenPengirimanInvoice) { setSelectedIdsselectedIdsDokumenInvoice( formPengiriman.dokumenPengirimanInvoice.split(',').map(Number) ); // Parse string menjadi array angka } }, [formPengiriman.dokumenPengirimanInvoice]); // Fungsi untuk memeriksa apakah item sudah dipilih const isChecked = (id) => selectedIds.includes(id); const isCheckedInvoice = (id) => selectedIdsDokumenInvoice.includes(id); useEffect(() => { const loadState = async () => { let dataState = await stateApi(); dataState = dataState.map((state) => ({ value: state.id, label: state.name, })); setState(dataState); }; loadState(); }, []); const watchState = watch('statePengiriman'); useEffect(() => { updateFormPengiriman('cityPengiriman', ''); if (watchState) { updateFormPengiriman('statePengiriman', `${watchState}`); validatePengiriman(); 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('cityPengiriman'); useEffect(() => { if (watchCity) { updateFormPengiriman('cityPengiriman', `${watchCity}`); validatePengiriman(); } }, [watchCity]); const handleInputChange = (event) => { const { name, value } = event.target; updateFormPengiriman(name, value); validatePengiriman(); }; const handleEveryWeekday = () => { setEveryWeekday(!everyWeekday); }; const handleEveryWeek = () => { setEveryWeek(!everyWeek); }; const handleTukarInvoice = () => { setTukarInvoice(!tukarInvoice); }; const handleEveryWeekdayPembayaran = () => { setEveryWeekdayPembayaran(!everyWeekdayPembayaran); }; const handleEveryWeekPembayaran = () => { setEveryWeekPembayaran(!everyWeekPembayaran); }; const handleTukarInvoicePembayaran = () => { setTukarInvoicePembayaran(!tukarInvoicePembayaran); }; useEffect(() => { updateFormPengiriman('everyWeekday', everyWeekday); updateFormPengiriman('everyWeek', everyWeek); updateFormPengiriman('tukarInvoice', tukarInvoice); updateFormPengiriman('everyWeekdayPembayaran', everyWeekdayPembayaran); updateFormPengiriman('everyWeekPembayaran', everyWeekPembayaran); updateFormPengiriman('tukarInvoicePembayaran', tukarInvoicePembayaran); validatePengiriman(); }, [ everyWeekday, everyWeek, tukarInvoice, everyWeekdayPembayaran, everyWeekPembayaran, tukarInvoicePembayaran, ]); const isFormValid = useMemo( () => Object.keys(errorsPengiriman).length === 0, [errorsPengiriman] ); const PICNameRef = useRef(null); const streetPengirimanRef = useRef(null); const statePengirimanRef = useRef(null); const cityPengirimanRef = useRef(null); const zipRef = useRef(null); const invoicePicRef = useRef(null); const streetInvoiceRef = useRef(null); const stateInvoiceRef = useRef(null); const cityInvoiceRef = useRef(null); const everyWeekdayInputRef = useRef(null); const everyWeekInputRef = useRef(null); const dokumenPengirimanRef = useRef(null); const dokumenPengirimanInputRef = useRef(null); const dokumenPengirimanInvoiceRef = useRef(null); const dokumenPengirimanInvoiceInputRef = useRef(null); useEffect(() => { const loadIndustries = async () => { if (!isFormValid) { const options = { behavior: 'smooth', block: 'center', }; if (errorsPengiriman.PICName && PICNameRef.current) { PICNameRef.current.scrollIntoView(options); return; } if (errorsPengiriman.streetPengiriman && streetPengirimanRef.current) { streetPengirimanRef.current.scrollIntoView(options); return; } if (errorsPengiriman.statePengiriman && statePengirimanRef.current) { statePengirimanRef.current.scrollIntoView(options); return; } if (errorsPengiriman.cityPengiriman && cityPengirimanRef.current) { cityPengirimanRef.current.scrollIntoView(options); return; } if (errorsPengiriman.zip && zipRef.current) { zipRef.current.scrollIntoView(options); return; } if (errorsPengiriman.invoicePic && invoicePicRef.current) { invoicePicRef.current.scrollIntoView(options); return; } if (errorsPengiriman.streetInvoice && streetInvoiceRef.current) { streetInvoiceRef.current.scrollIntoView(options); return; } if (errorsPengiriman.stateInvoice && stateInvoiceRef.current) { stateInvoiceRef.current.scrollIntoView(options); return; } if (errorsPengiriman.cityInvoice && cityInvoiceRef.current) { cityInvoiceRef.current.scrollIntoView(options); return; } if ( errorsPengiriman.everyWeekdayInput && everyWeekdayInputRef.current ) { everyWeekdayInputRef.current.scrollIntoView(options); return; } if (errorsPengiriman.everyWeekInput && everyWeekInputRef.current) { everyWeekInputRef.current.scrollIntoView(options); return; } if ( errorsPengiriman.dokumenPengiriman && dokumenPengirimanRef.current ) { dokumenPengirimanRef.current.scrollIntoView(options); return; } if ( errorsPengiriman.dokumenInvoice && dokumenPengirimanInvoiceRef.current ) { dokumenPengirimanInvoiceRef.current.scrollIntoView(options); return; } if ( selectedIds && formPengiriman.dokumenPengirimanInput === '' && dokumenPengirimanInputRef.current ) { dokumenPengirimanInputRef.current.scrollIntoView(options); return; } if ( selectedIdsDokumenInvoice && formPengiriman.dokumenPengirimanInvoiceInput === '' && dokumenPengirimanInvoiceInputRef.current ) { dokumenPengirimanInvoiceInputRef.current.scrollIntoView(options); return; } } }; loadIndustries(); }, [buttonSubmitClick, chekValid]); useEffect(() => { validatePengiriman(); if (formPengiriman.isSameAddrees) { const isSame = formPengiriman.isSameAddrees; if (isSame == 'true') { setSameAddress(true); } else { setSameAddress(false); } } }, [buttonSubmitClick]); useEffect(() => { if (formPengiriman.isSameAddrees) { const isSame = formPengiriman.isSameAddrees; if (isSame == 'true') { setSameAddress(true); } else { setSameAddress(false); } } }, [formPengiriman.isSameAddrees]); useEffect(() => { if (sameAddress) { updateFormPengiriman('streetInvoice', formPengiriman.streetPengiriman); updateFormPengiriman('stateInvoice', formPengiriman.statePengiriman); updateFormPengiriman('cityInvoice', formPengiriman.cityPengiriman); } updateFormPengiriman('isSameAddrees', `${sameAddress}`); }, [sameAddress]); const getFromLocalStorage = (key) => { const itemStr = localStorage.getItem(key); if (!itemStr) return null; const item = JSON.parse(itemStr); return item; }; const cachedData = getFromLocalStorage('Pengiriman'); useEffect(() => { if (cachedData) { setValue('cityPengiriman', parseInt(cachedData?.cityPengiriman)); updateFormPengiriman('cityPengiriman', `${cachedData?.cityPengiriman}`); } if (cachedData?.statePengiriman) { setValue('statePengiriman', parseInt(cachedData?.statePengiriman)); } if (cachedData?.stateInvoice) { setValue('stateInvoice', parseInt(cachedData?.stateInvoice)); } if (cachedData?.cityInvoice) { setValue('cityInvoice', parseInt(cachedData?.cityInvoice)); } if (cachedData?.isSameAddrees) { updateFormPengiriman('isSameAddrees', `${cachedData?.isSameAddrees}`); } }, [cachedData?.cityPengiriman]); useEffect(() => { if (cachedData?.everyWeek) { updateFormPengiriman('everyWeek', cachedData?.everyWeek); setEveryWeek(cachedData?.everyWeek); } if (cachedData?.everyWeekday) { updateFormPengiriman('everyWeekday', cachedData?.everyWeekday); setEveryWeekday(cachedData?.everyWeekday); } if (cachedData?.tukarInvoice) { updateFormPengiriman('tukarInvoice', cachedData?.tukarInvoice); setTukarInvoice(cachedData?.tukarInvoice); } if (cachedData?.everyWeekPembayaran) { updateFormPengiriman( 'everyWeekPembayaran', cachedData?.everyWeekPembayaran ); setEveryWeekPembayaran(cachedData?.everyWeekPembayaran); } if (cachedData?.everyWeekdayPembayaran) { updateFormPengiriman( 'everyWeekdayPembayaran', cachedData?.everyWeekdayPembayaran ); setEveryWeekdayPembayaran(cachedData?.everyWeekdayPembayaran); } if (cachedData?.tukarInvoicePembayaran) { updateFormPengiriman( 'tukarInvoicePembayaran', cachedData?.tukarInvoicePembayaran ); setTukarInvoicePembayaran(cachedData?.tukarInvoicePembayaran); } }, [ cachedData?.everyWeek, cachedData?.everyWeekday, cachedData?.tukarInvoice, cachedData?.everyWeekdayPembayaran, cachedData?.everyWeekPembayaran, cachedData?.tukarInvoicePembayaran, ]); const handleChangeSameAddress = () => { setSameAddress(!sameAddress); }; return ( <>