import React, { useState, useEffect, useMemo, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { usePengajuanTempoStoreSupplier } from '../../../../src-migrate/modules/register/stores/usePengajuanTempoStore'; import * as Yup from 'yup'; import { yupResolver } from '@hookform/resolvers/yup'; import { PlusCircleIcon } from '@heroicons/react/24/outline'; import useDevice from '@/core/hooks/useDevice'; import { Trash2Icon } from 'lucide-react'; import { ChevronDownIcon, ChevronUpIcon } from '@heroicons/react/24/outline'; const initialData = []; const Referensi = ({ chekValid, buttonSubmitClick }) => { const { isDesktop, isMobile } = useDevice(); const [openIndexes, setOpenIndexes] = useState([]); const { register, formState: { errors }, handleSubmit, watch, setValue, control, } = useForm({ resolver: yupResolver(validationSchema), defaultValues, }); const { formSupplier, updateFormSupplier, updateHasSave } = usePengajuanTempoStoreSupplier(); const [formData, setFormData] = useState([ { supplier: '', pic: '', telepon: '', durasiTempo: '', creditLimit: '', }, ]); const [buttonSubmit, setButtonSubmit] = useState(false); const [supplierData, setSupplierData] = useState(initialData); const [newSupplier, setNewSupplier] = useState({ supplier: '', pic: '', telepon: '', durasiTempo: '', creditLimit: '', }); const onChangeInput = (e, index) => { const { name, value } = e.target; let formattedValue = value; if (name === 'durasiTempo') { formattedValue = value.replace(/\s*Hari\s*/g, ''); } else if (name === 'creditLimit') { formattedValue = value.replace(/^Rp\s*/, ''); } const editData = supplierData.map((item, i) => i === index ? { ...item, [name]: formattedValue } : item ); setSupplierData(editData); updateHasSave(false); }; const handleNewSupplierChange = (e) => { const { name, value } = e.target; let formattedValue = value; if (name === 'durasiTempo') { formattedValue = value.replace(/\s*Hari\s*/g, ''); } else if (name === 'creditLimit') { formattedValue = value.replace(/^Rp\s*/, ''); } const updatedSupplier = { ...newSupplier, [name]: formattedValue }; setNewSupplier(updatedSupplier); updateHasSave(false); }; const handleAddNewSupplier = () => { if (Object.values(newSupplier).every((val) => val.trim() !== '')) { setSupplierData((prevData) => { const newData = [...prevData, newSupplier]; return newData; }); setNewSupplier({ supplier: '', pic: '', telepon: '', durasiTempo: '', creditLimit: '', }); } updateHasSave(false); }; useEffect(() => { handleAddNewSupplier(); updateFormSupplier(supplierData); setButtonSubmit(!buttonSubmit); }, [buttonSubmitClick]); const simpanData = () => { setButtonSubmit(!buttonSubmit); if (Object.values(newSupplier).every((val) => val.trim() !== '')) { setSupplierData((prevData) => { const newData = [...prevData, newSupplier]; return newData; }); setNewSupplier({ supplier: '', pic: '', telepon: '', durasiTempo: '', creditLimit: '', }); } updateHasSave(true); }; const formatRupiah = (value) => { if (!value) return ''; const numberString = value.replace(/[^0-9]/g, ''); return numberString ? 'Rp ' + new Intl.NumberFormat('id-ID').format(numberString) : ''; }; const formatHari = (value) => { if (!value) return ''; const numberString = value.replace(/[^0-9]/g, ''); return numberString ? numberString.replace(/Hari/g, '') + ' Hari' : ''; }; useEffect(() => { updateFormSupplier(supplierData); }, [buttonSubmit]); const getFromLocalStorage = (key) => { const itemStr = localStorage.getItem(key); if (!itemStr) return null; const item = JSON.parse(itemStr); return item; }; useEffect(() => { const cachedData = getFromLocalStorage('Referensi'); if (cachedData) { setSupplierData(cachedData); updateFormSupplier(cachedData); } }, [buttonSubmitClick]); useEffect(() => { setOpenIndexes(supplierData.map((_, index) => index)); }, [supplierData]); const toggleOpen = (index) => { setOpenIndexes((prev) => prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index] ); }; return ( <> {isDesktop && (

Referensi Supplier / Rekanan Bisnis Perusahaan{' '} (Opsional)

Data yang anda berikan hanya untuk bahan referensi internal kami untuk memberikan anda credit limit dan durasi tempo

{supplierData.map((supplier, index) => ( ))}
Nama Supplier / Rekanan PIC Telepon Durasi Tempo Credit Limit
onChangeInput(e, index)} className='form-input border px-4 py-2' placeholder='Type Supplier' /> onChangeInput(e, index)} placeholder='Type PIC' /> onChangeInput(e, index)} placeholder='Type Telepon' /> onChangeInput(e, index)} placeholder='Type Durasi Tempo' /> onChangeInput(e, index)} placeholder='Type Credit Limit' />
*Klik simpan sebelum lanjut ke tahap selanjutnya
)} {isMobile && (

Referensi Supplier / Rekanan Bisnis Perusahaan{' '} (Opsional)

Data yang anda berikan hanya untuk bahan referensi internal kami untuk memberikan anda credit limit dan durasi tempo

Daftar Nama Supplier

{supplierData.map((supplier, index) => (
toggleOpen(index)} >

{supplier.supplier}

{openIndexes.includes(index) ? ( ) : ( )}
{openIndexes.includes(index) && (
{supplier.supplier}
{supplier.pic}
{supplier.telepon}
{formatHari(supplier.durasiTempo)}
{formatRupiah(supplier.creditLimit)}
)}
))}

Tambah Data Baru

*Klik simpan sebelum lanjut ke tahap selanjutnya
)} ); }; const validationSchema = Yup.object().shape({ supplier: Yup.string().required('Harus di-isi'), pic: Yup.string().required('Harus di-isi'), telepon: Yup.string().required('Harus di-isi'), durasiTempo: Yup.string().required('Harus di-isi'), creditLimit: Yup.string().required('Harus di-isi'), }); const defaultValues = { supplier: '', pic: '', telepon: '', durasiTempo: '', creditLimit: '', }; export default Referensi;