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 && (
Data yang anda berikan hanya untuk bahan referensi internal kami untuk memberikan anda credit limit dan durasi tempo
Data yang anda berikan hanya untuk bahan referensi internal kami untuk memberikan anda credit limit dan durasi tempo
{supplier.supplier}