From 05e92fe4104c6f781574f191edc43283f5879a77 Mon Sep 17 00:00:00 2001 From: zadit biasa aja <75159257+insvrgent@users.noreply.github.com> Date: Sat, 28 Jun 2025 14:51:16 +0000 Subject: [PATCH] ok --- src/FormComponent.js | 267 +++++++++++++++++++++++++++++++++++++++++++ src/KTPScanner.js | 115 ++++++------------- src/Modal.js | 62 ++++++++++ src/index.js | 1 + 4 files changed, 364 insertions(+), 81 deletions(-) create mode 100644 src/FormComponent.js create mode 100644 src/Modal.js diff --git a/src/FormComponent.js b/src/FormComponent.js new file mode 100644 index 0000000..452cda9 --- /dev/null +++ b/src/FormComponent.js @@ -0,0 +1,267 @@ +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", +}; + +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 ( + handleChange(key, e.target.value, true)} + style={styles.input} + /> + ); + } + + if (key === "address") { + return ( +