import { Inertia } from "@inertiajs/inertia"; import React, { useState, useEffect } from "react"; const ModalInput = ({ fields, tableName, options, initialData, onClose, showPayments = false }) => { const [formData, setFormData] = useState({}); const [errors, setErrors] = useState({}); const [selectedPayments, setSelectedPayments] = useState([]); const [paymentDetails, setPaymentDetails] = useState({}); useEffect(() => { // console.log(initialData) setFormData(initialData || {}); setSelectedPayments([]); setPaymentDetails({}); }, [initialData]); const handleChange = (e) => { if (e.target.type === "file") { setFormData({ ...formData, [e.target.name]: e.target.files[0] }); } else { setFormData({ ...formData, [e.target.name]: e.target.value }); } }; // console.log(initialData) const handlePaymentChange = (e) => { const value = e.target.value; if (!selectedPayments.includes(value)) { setSelectedPayments([...selectedPayments, value]); const nominal = options.payment_nominal?.[value] || 0; const penalty = options.payment_penalty?.[value] || 0; setPaymentDetails({ ...paymentDetails, [value]: { range: 1, nominal, penalty, amount: nominal + penalty, }, }); } }; const handleRangeChange = (paymentType, newRange) => { setPaymentDetails((prevDetails) => { const validRange = newRange && !isNaN(newRange) ? Math.max(1, Number(newRange)) : 1; const currentDetails = prevDetails[paymentType] || { nominal: 0, penalty: 0 }; const newAmount = (currentDetails.nominal + currentDetails.penalty) * validRange; return { ...prevDetails, [paymentType]: { ...currentDetails, range: validRange, amount: newAmount, }, }; }); }; const handleRemovePayment = (paymentType) => { setSelectedPayments(selectedPayments.filter((p) => p !== paymentType)); const newDetails = { ...paymentDetails }; delete newDetails[paymentType]; setPaymentDetails(newDetails); }; const handleSubmit = (e) => { e.preventDefault() // console.log("tableName:", tableName); const formDataObj = new FormData() Object.keys(formData).forEach((key) => { if (key === 'foto' && !(formData[key] instanceof File)) { return } formDataObj.append(key, formData[key]) }) if (initialData) { Inertia.post(`/update${tableName}/${initialData.id}`, formDataObj, { forceFormData: true, onError: (errors) => setErrors(errors), onSuccess: () => { document.getElementById('modal_input').checked = false setFormData({}) setErrors({}) onClose({}) } }) } else { Inertia.post(`/add${tableName}`, formDataObj, { forceFormData: true, onError: (errors) => setErrors(errors), onSuccess: () => { document.getElementById('modal_input').checked = false setFormData({}) setErrors({}) } }) } } return (

{initialData ? "Edit Data" : "Tambah Data"}

{Object.keys(fields).map((field) => (
{errors[field] &&

{errors[field]}

}
))} {showPayments && (
{selectedPayments.map((paymentType) => (
))}
)}
); }; export default ModalInput