"use client"; import { useState, useEffect } from "react"; import { v4 as uuidv4 } from "uuid"; import { Tabs, TabsContent } from "@/shared/components/ui/tabs"; import FormMultiSelect from "@/shared/components/forms/form-multi-select"; const satupetaCategory = [ "Batas Wilayah", "Kependudukan", "Lingkungan Hidup", "Pemerintah Desa", "Pendidikan", "Sosial", "Pendidikan SD", "Pariwisata Kebudayaan", "Kesehatan", "Ekonomi", "Kemiskinan", "Infrastruktur" ] const satupetaCategoryId = [ "019a0997-5b42-7c34-9ab8-35b4765ecb39", "0196c80b-e680-7dca-9b90-b5ebe65de70d", "0196c80c-855f-77f9-abd0-0c8a30b8c2f5", "0196c80c-f805-76a8-82c7-af50b794871b", "0196c80d-228d-7e1e-9116-78ba912b812c", "0196c80d-3f05-7750-ab2a-f58655fef6ea", "019936a6-4a5b-719f-8d88-d2df0af5aa20", "0196c80c-c4fc-7ea6-afc0-3672a1b44b5b", "0196c80c-61d8-7616-9abc-550a89283a57", "0196c809-a0b0-79fb-b597-422d716fdce8", "0196c80b-bb09-7424-9cd5-e3ec4946c7af", "0196c80b-8710-7577-bc28-3ce66a02f56f" ] export const getInitialMetadata = (initialValues: any = {}) => { const today = new Date().toISOString().split('T')[0]; function getIndexCategoryId(value: string) { return satupetaCategory.indexOf(value); } return { title: initialValues.title || "", abstract: initialValues.abstract || "", keywords: initialValues.keyword ? (Array.isArray(initialValues.keyword) ? initialValues.keyword.join(', ') : initialValues.keyword) : "", topicCategory: initialValues.metadata_category || "", mapsetCategory: satupetaCategoryId[getIndexCategoryId(initialValues.mapset_category)] || "", dateCreated: today, status: "completed", language: "eng", organization: "PUPR", contactName: "Dimas", contactEmail: "pu@gmail.com", contactPhone: "08222222222", // ๐ŸŒ Distribusi downloadLink: "", serviceLink: "", format: "", license: "Copyright", // ๐Ÿงญ Referensi Spasial crs: "EPSG:4326", geometryType: "", xmin: "", xmax: "", ymin: "", ymax: "", // ๐Ÿงพ Metadata Umum metadataStandard: "ISO 19115:2003/19139", metadataVersion: "1.0", metadataUUID: "", // Nanti di-generate di useEffect agar tidak hydration error metadataDate: "", charset: "utf8", rsIdentifier: "WGS 1984", // Override dengan apapun yang ada di initialValues jika key-nya cocok // ...initialValues }; }; export default function MetadataForm({ onChange, initialValues = {} }: { onChange: (val: any) => void, initialValues?: any }) { const [formData, setFormData] = useState(initialValues); // Generate UUID saat mount (Client Side Only) // useEffect(() => { // if (!formData.metadataUUID) { // setFormData((prev: any) => { // const updated = { // ...prev, // metadataUUID: uuidv4(), // metadataDate: new Date().toISOString().split("T")[0], // }; // // Penting: Kabari parent tentang update UUID ini // onChange(updated); // return updated; // }); // } // }, []); useEffect(() => { // Cek jika UUID belum ada (hanya saat mount) if (!formData.metadataUUID) { const generatedUUID = uuidv4(); const generatedDate = new Date().toISOString().split("T")[0]; // 1. Siapkan data baru const updatedData = { ...formData, // Menggunakan state saat ini metadataUUID: generatedUUID, metadataDate: generatedDate, }; // 2. Update State Lokal setFormData((prev: any) => ({ ...prev, metadataUUID: generatedUUID, metadataDate: generatedDate, })); // 3. Update State Parent (PENTING: Dilakukan terpisah di sini, BUKAN di dalam setFormData) onChange(updatedData); } }, []); const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; const updated = { ...formData, [name]: value }; setFormData(updated); onChange(updated); }; return (
{/* Identifikasi Kontak */}