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); updateFormPengiriman('everyWeekday', everyWeekday); validatePengiriman(); }; const handleEveryWeek = () => { setEveryWeek(!everyWeek); updateFormPengiriman('everyWeek', everyWeek); validatePengiriman(); }; const handleTukarInvoice = () => { setTukarInvoice(!tukarInvoice); updateFormPengiriman('tukarInvoice', tukarInvoice); validatePengiriman(); }; const handleEveryWeekdayPembayaran = () => { setEveryWeekdayPembayaran(!everyWeekdayPembayaran); updateFormPengiriman('everyWeekdayPembayaran', everyWeekdayPembayaran); validatePengiriman(); }; const handleEveryWeekPembayaran = () => { setEveryWeekPembayaran(!everyWeekPembayaran); updateFormPengiriman('everyWeekPembayaran', everyWeekPembayaran); validatePengiriman(); }; const handleTukarInvoicePembayaran = () => { setTukarInvoicePembayaran(!tukarInvoicePembayaran); updateFormPengiriman('tukarInvoicePembayaran', tukarInvoicePembayaran); validatePengiriman(); }; 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 (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]); const handleChangeSameAddress = () => { setSameAddress(!sameAddress); }; return ( <>

Pengiriman

{chekValid && (
{errorsPengiriman.PICName}
)}
{!isKonfirmasi && ( pastikan alamat yang anda isi sesuai dengan alamat kirim barang )}
{chekValid && (
{errorsPengiriman.streetPengiriman}
)}
( )} /> {chekValid && (
{errorsPengiriman.statePengiriman}
)}
( )} /> {chekValid && (
{errorsPengiriman.cityPengiriman}
)}
{chekValid && (
{errorsPengiriman.zip}
)}
{chekValid && (
{errorsPengiriman.invoicePic}
)}
{!isKonfirmasi && ( Pastikan alamat yang anda isi sesuai dengan alamat kirim invoice )}
Alamat invoice sama dengan alamat pengiriman
{!sameAddress && ( <>
{chekValid && (
{errorsPengiriman.streetInvoice}
)}
( )} /> {chekValid && (
{errorsPengiriman.stateInvoice}
)}
( )} /> {chekValid && (
{errorsPengiriman.cityInvoice}
)}
)}
{!isKonfirmasi && ( Pilih jika bisnis anda memiliki jadwal penukaran invoice )}
Setiap Minggu dihari
Setiap Bulan di minggu ke
Lainnya