67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
/**
|
|
* 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<void>}
|
|
*/
|
|
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();
|
|
});
|
|
|
|
// Jalankan inisialisasi aplikasi saat DOM siap
|
|
document.addEventListener('DOMContentLoaded', initApp);
|
|
|