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'; const initialData = []; const Referensi = ({ chekValid, buttonSubmitClick }) => { const { register, formState: { errors }, handleSubmit, watch, setValue, control, } = useForm({ resolver: yupResolver(validationSchema), defaultValues, }); const { formSupplier, updateFormSupplier } = 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); }; 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); // if (Object.values(updatedSupplier).every((val) => val.trim() !== '')) { // setSupplierData((prevData) => { // const newData = [...prevData, updatedSupplier]; // return newData; // }); // setNewSupplier({ // supplier: '', // pic: '', // telepon: '', // durasiTempo: '', // creditLimit: '', // }); // } }; const handleAddNewSupplier = () => { // Pastikan semua field sudah diisi sebelum menambahkan supplier baru if (Object.values(newSupplier).every((val) => val.trim() !== '')) { setSupplierData((prevData) => { const newData = [...prevData, newSupplier]; return newData; }); // Reset newSupplier setelah menambahkan 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; }); // Reset newSupplier setelah menambahkan setNewSupplier({ supplier: '', pic: '', telepon: '', durasiTempo: '', creditLimit: '', }); } }; 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(() => { // setSupplierData((prevData) => { // const newData = [...prevData, newSupplier]; // return newData; // }); // updateFormSupplier(supplierData); // }, [buttonSubmitClick]); 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]); return ( <>

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
{/* */} ); }; 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;