// Fetch Wilayah dari API Database fetch("/api/layanan/wilayah") .then((response) => response.json()) .then((data) => populateFilters(data)) .catch((error) => console.error("Gagal load wilayah dari database:", error) ); function populateFilters(data) { populateSelect("kabkota", data.kabkota); populateSelect("kecamatan", data.kecamatan); populateSelect("kelurahan", data.kelurahan); } function populateSelect(id, options) { const select = document.getElementById(id); if (!select) return; // Add default option let defaultOption = '"; select.innerHTML = defaultOption + options .map( (opt) => ` ` ) .join(""); } // Fetch Layanan dari API Database document.addEventListener("DOMContentLoaded", function () { fetch("/api/layanan/data") .then((response) => response.json()) .then((data) => { initializeLayanan(data); setupUIHandlers(); }) .catch((error) => console.error("Gagal load layanan dari database:", error) ); }); function initializeLayanan(data) { renderHeader(data.header); renderTabs(data.tabs); renderContents(data.contents); changeTab("amdal"); } // Data Header function renderHeader(header) { const headerContainer = document.querySelector("#layanan-header"); if (!headerContainer) return; headerContainer.innerHTML = `

${header.title}

${header.subtitle}

`; } // Data Tabs function renderTabs(tabs) { const tabsContainer = document.querySelector("#layanan-tabs"); if (!tabsContainer) return; tabsContainer.innerHTML = tabs .map( (tab) => ` ` ) .join(""); } // Data Contents function renderContents(contents) { const contentsContainer = document.querySelector("#layanan-contents"); if (!contentsContainer) return; contentsContainer.innerHTML = Object.entries(contents) .map(([key, items]) => { if (key === "audit") { return ` `; } else { return ` `; } }) .join(""); } function renderStandardItem(item, index) { return `
${item.no_registrasi} ${item.pemrakarsa}

${item.title}

${item.description}

${item.periode}
`; } function renderAuditTable(items) { return `
${items .map( (item) => ` ` ) .join("")}
No Nama PT Judul Aksi
${item.no} ${item.company} ${item.title}
`; } function setupUIHandlers() { // Toggle filter section const filterButton = document.getElementById("filter-button"); if (filterButton) { filterButton.addEventListener("click", function () { const filterSection = document.getElementById("filter-section"); if (filterSection) filterSection.classList.toggle("hidden"); }); } // Clear filter inputs const clearButton = document.getElementById("clear-filter"); if (clearButton) { clearButton.addEventListener("click", function () { document.getElementById("kabkota").value = ""; document.getElementById("kecamatan").value = ""; document.getElementById("kelurahan").value = ""; const searchInput = document.querySelector( 'input[placeholder="Search"]' ); if (searchInput) searchInput.value = ""; // Reload original data loadOriginalData(); }); } // Apply filter const applyFilterButton = document.querySelector(".bg-blue-600"); if (applyFilterButton) { applyFilterButton.addEventListener("click", function () { applyFilters(); }); } // Search input const searchInput = document.querySelector('input[placeholder="Search"]'); if (searchInput) { let searchTimeout; searchInput.addEventListener("input", function () { clearTimeout(searchTimeout); searchTimeout = setTimeout(() => { applyFilters(); }, 500); // Debounce 500ms }); } // Handle "Berikan Tanggapan" button clicks document.addEventListener("click", function (e) { if (e.target && e.target.classList.contains("berikan-tanggapan-btn")) { const itemId = e.target.getAttribute("data-item-id"); const itemTitle = e.target.getAttribute("data-item-title"); const itemDescription = e.target.getAttribute( "data-item-description" ); const itemPeriode = e.target.getAttribute("data-item-periode"); if (itemId) { // Fetch detail from API fetch(`/api/layanan/detail/${itemId}`) .then((response) => response.json()) .then((data) => { showFeedbackForm(data); }) .catch((error) => { console.error("Error fetching detail:", error); // Fallback to basic data showFeedbackForm({ nama_kegiatan: itemTitle, deskripsi_kegiatan: itemDescription, periode: itemPeriode, }); }); } else { // Fallback for old data structure showFeedbackForm({ nama_kegiatan: itemTitle, deskripsi_kegiatan: itemDescription, periode: itemPeriode, }); } } }); } // Function to show the feedback form function showFeedbackForm(detailData) { const contentsContainer = document.querySelector("#layanan-contents"); if (!contentsContainer) return; // Keep tabs visible, just reset their state const tabButtons = document.querySelectorAll(".tab-btn"); tabButtons.forEach((button) => { button.classList.remove("bg-blue-900", "text-white"); button.classList.add("bg-white", "border", "border-gray-300"); }); // Render the feedback form contentsContainer.innerHTML = `
${renderInformasiRencanaKegiatan(detailData)} ${renderSaranPendapatForm()}
`; } // Function to render "Informasi Rencana Kegiatan" section function renderInformasiRencanaKegiatan(data) { return `

Informasi Rencana Kegiatan

${ data.no_registrasi || "-" }
${ data.jenis_dokumen || "-" }
${data.nama_kegiatan || "-"}
${ data.bidang_usaha || "-" }
${ data.skala_besaran || "-" }
${ data.lokasi_kegiatan || "-" }
${ data.kewenangan || "-" }
${ data.pemrakarsa || "-" }
${ data.provinsi_kota || "-" }
${data.deskripsi_kegiatan || "-"}
${data.dampak_potensial || "-"}

Peta Lokasi Kegiatan

${ data.latitude && data.longitude ? `

${data.latitude}, ${data.longitude}

` : "" }
${data.deskripsi_lokasi || "-"}
${data.periode || "-"}
`; } // Function to render "Saran, Pendapat dan Tanggapan Kegiatan" form function renderSaranPendapatForm() { return `

Saran, Pendapat, dan Tanggapan untuk Kegiatan

Data wajib diisi
Data wajib diisi
Data wajib diisi
Data wajib diisi
Khawatir
Harapan
(Ukuran Maks 1 MB)
`; } // Function to go back to the main list function goBackToList() { // Re-render the original content from database fetch("/api/layanan/data") .then((response) => response.json()) .then((data) => { renderContents(data.contents); changeTab("amdal"); // Default to AMDAL tab }) .catch((error) => console.error("Gagal load layanan dari database:", error) ); } // Tab switching function function changeTab(tabName) { const contentSections = document.querySelectorAll(".tab-content"); contentSections.forEach((section) => { section.classList.add("hidden"); }); const tabButtons = document.querySelectorAll(".tab-btn"); tabButtons.forEach((button) => { button.classList.remove("bg-blue-900", "text-white"); button.classList.add("bg-white", "border", "border-gray-300"); }); const selectedTab = document.getElementById("tab-" + tabName); if (selectedTab) { selectedTab.classList.remove("bg-white", "border", "border-gray-300"); selectedTab.classList.add("bg-blue-900", "text-white"); } const selectedContent = document.getElementById("content-" + tabName); if (selectedContent) { selectedContent.classList.remove("hidden"); } } // Handle tab click - check if we need to return to table view first function handleTabClick(tabName) { // Check if we're currently in feedback form view const contentsContainer = document.querySelector("#layanan-contents"); const isFeedbackForm = contentsContainer && !contentsContainer.querySelector(".tab-content"); if (isFeedbackForm) { // Return to table view first, then switch to the clicked tab fetch("/api/layanan/data") .then((response) => response.json()) .then((data) => { renderContents(data.contents); changeTab(tabName); }) .catch((error) => console.error("Gagal load layanan dari database:", error) ); } else { // Normal tab switching changeTab(tabName); } } // Star rating functionality document.addEventListener("click", function (e) { if (e.target && e.target.classList.contains("rating-star")) { const rating = parseInt(e.target.getAttribute("data-rating")); const stars = document.querySelectorAll(".rating-star"); stars.forEach((star, index) => { if (index < rating) { star.classList.remove("text-gray-300"); star.classList.add("text-yellow-400"); } else { star.classList.remove("text-yellow-400"); star.classList.add("text-gray-300"); } }); } }); // Map tab ID to document type function mapTabToDocumentType(tabId) { const mapping = { amdal: "AMDAL", "ukl-upl": "UKL-UPL", addendum: "Addendum", audit: "AUDIT", }; return mapping[tabId] || "AMDAL"; } // Apply filters function function applyFilters() { const searchValue = document.querySelector('input[placeholder="Search"]')?.value || ""; const kabkotaValue = document.getElementById("kabkota")?.value || ""; const kecamatanValue = document.getElementById("kecamatan")?.value || ""; const kelurahanValue = document.getElementById("kelurahan")?.value || ""; // Get current active tab const activeTab = document.querySelector(".tab-btn.bg-blue-900"); const activeTabId = activeTab ? activeTab.id.replace("tab-", "") : "amdal"; const params = new URLSearchParams({ search: searchValue, kabkota: kabkotaValue, kecamatan: kecamatanValue, kelurahan: kelurahanValue, jenis_dokumen: mapTabToDocumentType(activeTabId), }); fetch(`/api/layanan/filter?${params}`) .then((response) => response.json()) .then((data) => { renderContents(data); changeTab(activeTabId); }) .catch((error) => { console.error("Error applying filters:", error); }); } // Load original data function function loadOriginalData() { fetch("/api/layanan/data") .then((response) => response.json()) .then((data) => { renderContents(data.contents); changeTab("amdal"); }) .catch((error) => console.error("Gagal load layanan dari database:", error) ); }