Files
solid-data/src/FormComponent.js
Vassshhh e30b1a8de8 ok
2025-08-01 16:45:33 +07:00

277 lines
7.5 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// import React, { useEffect, useState } from "react";
// const fieldLabels = {
// nik: "NIK",
// fullName: "Nama Lengkap",
// birthPlace: "Tempat Lahir",
// birthDate: "Tanggal Lahir",
// gender: "Jenis Kelamin",
// address: "Alamat",
// neighborhoodCode: "RT/RW",
// village: "Kelurahan/Desa",
// subDistrict: "Kecamatan",
// religion: "Agama",
// maritalStatus: "Status Perkawinan",
// occupation: "Pekerjaan",
// nationality: "Kewarganegaraan",
// validUntil: "Berlaku Hingga",
// issuedCity: "Kota Terbit",
// issuedDate: "Tanggal Terbit",
// phoneNumber: "No. HP",
// email: "Email",
// };
// function Modal({ isOpen, onClose, loading, fileTemp, onSave, onDelete }) {
// const [formData, setFormData] = useState({});
// const [step, setStep] = useState(0);
// // ❗Field yang disembunyikan, bisa diisi sesuai kebutuhan
// const disabledFields = [];
// useEffect(() => {
// if (fileTemp) {
// setFormData(Array.isArray(fileTemp) ? fileTemp[0] : fileTemp);
// setStep(0);
// } else {
// setFormData({});
// }
// }, [fileTemp]);
// if (!isOpen) return null;
// const handleChange = (key, newValue, isDate = false) => {
// setFormData((prev) => ({
// ...prev,
// [key]: isDate ? { ...prev[key], value: newValue } : newValue,
// }));
// };
// const formatDate = (value) => {
// if (!value) return "";
// const d = new Date(value);
// return isNaN(d) ? "" : d.toISOString().split("T")[0];
// };
// const renderInput = (key, value) => {
// if (value && typeof value === "object" && value.type === "dateTime") {
// return (
// <input
// type="date"
// value={formatDate(value.value)}
// onChange={(e) => handleChange(key, e.target.value, true)}
// style={styles.input}
// />
// );
// }
// if (key === "address") {
// return (
// <textarea
// rows={2}
// value={value || ""}
// onChange={(e) => handleChange(key, e.target.value)}
// style={{ ...styles.input, resize: "vertical" }}
// />
// );
// }
// return (
// <input
// type="text"
// value={value != null ? value : ""}
// onChange={(e) => handleChange(key, e.target.value)}
// style={styles.input}
// />
// );
// };
// // Langkah-langkah form (per halaman)
// const rawSteps = [
// ["nik", "fullName", "birthPlace", "birthDate"],
// ["gender", "address", "neighborhoodCode", "village", "subDistrict"],
// ["religion", "maritalStatus", "occupation"],
// [
// "nationality",
// "validUntil",
// "issuedCity",
// "issuedDate",
// "phoneNumber",
// "email",
// ],
// ];
// // Filter field yang disable/hide
// const steps = rawSteps.map((fields) =>
// fields.filter((key) => !disabledFields.includes(key))
// );
// // Filter langkah kosong
// const visibleSteps = steps.filter((step) => step.length > 0);
// return (
// <div style={styles.overlay} onClick={onClose}>
// <div style={styles.modal} onClick={(e) => e.stopPropagation()}>
// {loading ? (
// <div style={styles.spinnerContainer}>
// <div style={styles.spinner} />
// <style>{spinnerStyle}</style>
// </div>
// ) : (
// Object.keys(formData).length > 0 && (
// <>
// <h4>
// Verifikasi Data (Langkah {step + 1} dari {visibleSteps.length})
// </h4>
// <table style={styles.table}>
// <tbody>
// {visibleSteps[step].map((key) => (
// <tr key={key} style={styles.tableRow}>
// <td style={styles.tableLabel}>
// {fieldLabels[key] || key}
// </td>
// <td style={styles.tableInput}>
// {renderInput(key, formData[key])}
// </td>
// </tr>
// ))}
// </tbody>
// </table>
// <div
// style={{
// display: "flex",
// justifyContent: "space-between",
// marginTop: 10,
// }}
// >
// <button
// disabled={step === 0}
// onClick={() => setStep((s) => s - 1)}
// style={{
// ...styles.saveButton,
// opacity: step === 0 ? 0.5 : 1,
// }}
// >
// &lt; Sebelumnya
// </button>
// <button
// disabled={step === visibleSteps.length - 1}
// onClick={() => setStep((s) => s + 1)}
// style={{
// ...styles.saveButton,
// opacity: step === visibleSteps.length - 1 ? 0.5 : 1,
// }}
// >
// Selanjutnya &gt;
// </button>
// </div>
// <div style={styles.actions}>
// <button
// onClick={() => onSave(formData)}
// style={styles.saveButton}
// >
// Simpan ke Galeri
// </button>
// <button onClick={onDelete} style={styles.deleteButton}>
// Hapus
// </button>
// </div>
// </>
// )
// )}
// </div>
// </div>
// );
// }
// // Styles dan spinner animation
// const styles = {
// overlay: {
// position: "fixed",
// inset: 0,
// backgroundColor: "rgba(0,0,0,0.5)",
// display: "flex",
// justifyContent: "center",
// alignItems: "center",
// zIndex: 1000,
// },
// modal: {
// backgroundColor: "white",
// borderRadius: 8,
// padding: 20,
// minWidth: 350,
// maxWidth: "90vw",
// maxHeight: "80vh",
// overflowY: "auto",
// boxShadow: "0 2px 10px rgba(0,0,0,0.3)",
// },
// spinnerContainer: {
// textAlign: "center",
// padding: 40,
// },
// spinner: {
// border: "4px solid #f3f3f3",
// borderTop: "4px solid #3498db",
// borderRadius: "50%",
// width: 40,
// height: 40,
// animation: "spin 1s linear infinite",
// margin: "0 auto",
// },
// table: {
// width: "100%",
// borderCollapse: "collapse",
// },
// tableRow: {
// borderBottom: "1px solid #eee",
// },
// tableLabel: {
// padding: "8px 10px",
// fontWeight: "bold",
// width: "30%",
// verticalAlign: "top",
// textTransform: "capitalize",
// },
// tableInput: {
// padding: "8px 10px",
// },
// input: {
// padding: 6,
// borderRadius: 4,
// border: "1px solid #ccc",
// width: "100%",
// },
// actions: {
// marginTop: 20,
// textAlign: "right",
// },
// saveButton: {
// marginRight: 10,
// backgroundColor: "green",
// color: "white",
// border: "none",
// padding: "8px 14px",
// borderRadius: 4,
// cursor: "pointer",
// },
// deleteButton: {
// backgroundColor: "red",
// color: "white",
// border: "none",
// padding: "8px 14px",
// borderRadius: 4,
// cursor: "pointer",
// },
// };
// const spinnerStyle = `
// @keyframes spin {
// 0% { transform: rotate(0deg); }
// 100% { transform: rotate(360deg); }
// }
// `;
// export default Modal;