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 (
<>
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}