import React, { useState, useEffect, useMemo, useRef } from 'react'; import { useForm } from 'react-hook-form'; import { usePengajuanTempoStoreSupplier, usePengajuanTempoStore, } 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'; import BottomPopup from '@/core/components/elements/Popup/BottomPopup'; const initialData = []; const Referensi = ({ chekValid, buttonSubmitClick, data }) => { const [changeConfirmation, setChangeConfirmation] = useState(false); const [selectedIndex, setSelectedIndex] = useState(null); 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, hasSavedata } = usePengajuanTempoStoreSupplier(); const { form } = usePengajuanTempoStore(); 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) => { updateHasSave(false); 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); if (value == '' && supplierData.supplier) { updateHasSave(true); } }; const handleNewSupplierChange = (e) => { updateHasSave(false); 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); if (value == '') { updateHasSave(true); } }; useEffect(() => { const isAllFieldsEmpty = Object.values(newSupplier).every( (value) => value === '' ); if (isAllFieldsEmpty) { updateHasSave(true); } else { updateHasSave(false); } }, [newSupplier]); const handleDeleteSupplier = () => { if (selectedIndex !== null) { // Logika untuk menghapus supplier const updatedSuppliers = supplierData.filter( (_, idx) => idx !== selectedIndex ); setSupplierData(updatedSuppliers); setChangeConfirmation(false); updateHasSave(false); } }; const handleAddNewSupplier = () => { // updateHasSave(false); if (Object.values(newSupplier).every((val) => val.trim() !== '')) { setSupplierData((prevData) => { const newData = [...prevData, newSupplier]; return newData; }); setNewSupplier({ supplier: '', pic: '', telepon: '', durasiTempo: '', creditLimit: '', }); } }; 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 (data) { setSupplierData(data); updateFormSupplier(data); } }, [buttonSubmitClick]); useEffect(() => { setOpenIndexes(supplierData.map((_, index) => index)); }, [supplierData]); const toggleOpen = (index) => { setOpenIndexes((prev) => prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index] ); }; const handleOpenConfirmation = (index) => { setSelectedIndex(index); setChangeConfirmation(true); }; return ( <> setChangeConfirmation(false)} title='Konfirmasi Hapus Data' >
Apakah anda yakin menghapus data?
{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' /> handleOpenConfirmation(index)} className='cursor-pointer' />
{/* handleDeleteSupplier(index)} /> */}
{/* */} {!hasSavedata && ( <> *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}

handleOpenConfirmation(index)} className='cursor-pointer' /> {openIndexes.includes(index) ? ( ) : ( )}
{openIndexes.includes(index) && (
{supplier.supplier}
{supplier.pic}
{supplier.telepon}
{formatHari(supplier.durasiTempo)}
{formatRupiah(supplier.creditLimit)}
)}
))}
{/*
*/} {/*

Tambah Data Baru

*/}
{!hasSavedata && ( <> *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;