/** * Main Entry Point Kelompok C4A. * Menghubungkan pengambilan data dengan rendering UI dan interaksi halaman. */ import { getStaffData, getSopData, getFaqData } from './data.js'; import { renderStaffCards, renderSopCards, renderFaqSection, initSopInteraction, initAnimations, initFaq, applySopFilter } from './ui.js'; // Cache data secara global untuk mendukung rendering UI let cachedStaffData = []; let cachedSopData = []; let cachedFaqData = []; /** * Menginisialisasi aplikasi dengan mengambil seluruh data secara pararel, * merender konten awal, serta mendaftarkan event listener interaksi UI. * @returns {Promise} */ async function initApp() { try { const [staffData, sopData, faqData] = await Promise.all([ getStaffData(), getSopData(), getFaqData() ]); cachedStaffData = staffData || []; cachedSopData = sopData || []; cachedFaqData = faqData || []; renderStaffCards(cachedStaffData); renderSopCards(cachedSopData); renderFaqSection(cachedFaqData); initSopInteraction(); initFaq(); // Memberikan sedikit waktu tunda (jeda) agar rendering DOM selesai sebelum memulai animasi. setTimeout(() => { initAnimations(); }, 100); } catch (error) { console.error('Terjadi kesalahan saat menginisialisasi aplikasi C4A:', error); } } // Re-render UI saat bahasa berubah (data tetap sama, hanya label UI yang berganti via t()) document.addEventListener('languageChanged', () => { renderStaffCards(cachedStaffData); renderSopCards(cachedSopData); renderFaqSection(cachedFaqData); initFaq(); applySopFilter(); // Re-inisialisasi observer agar elemen .reveal yang baru di-render mendapat class .visible setTimeout(() => { initAnimations(); }, 100); }); // Jalankan inisialisasi aplikasi saat DOM siap document.addEventListener('DOMContentLoaded', initApp);