// ChemiFactory MES - System Settings Frontend Logic const API_SETTINGS = "/settings"; let allSettings = []; // DOM 준비 상태와 무관하게 theme.js 로딩 완료 대기 function waitForThemeAndInit() { // 최대 2초 동안 AppTheme 대기 let attempts = 0; const maxAttempts = 20; // 100ms * 20 = 2초 const checkReady = () => { attempts++; if (window.AppTheme) { // AppTheme 준비 완료, 테마 선택기 초기화 initThemeSelector(); } else if (attempts < maxAttempts) { // 아직 준비 안 됨, 100ms 후 재시도 setTimeout(checkReady, 100); } else { console.warn("[Setting] AppTheme not loaded after 2 seconds"); } }; checkReady(); } document.addEventListener("DOMContentLoaded", () => { fetchSettings(); document.getElementById("settings-form").addEventListener("submit", saveSettings); waitForThemeAndInit(); }); // --- 화면 테마 선택기 (theme.js의 전역 AppTheme 사용, 서버 DB와 무관) --- function initThemeSelector() { const cards = document.querySelectorAll(".theme-option-card"); if (!cards.length) { console.warn("[Theme Selector] No theme option cards found"); return; } if (!window.AppTheme) { console.error("[Theme Selector] AppTheme is not available"); return; } // 현재 저장된 테마에 active 표시 const applyActiveState = (theme) => { cards.forEach(card => { card.classList.toggle("active", card.dataset.themeValue === theme); }); }; // 초기 테마 상태 적용 const currentTheme = window.AppTheme.get(); applyActiveState(currentTheme); console.log("[Theme Selector] Initialized with theme:", currentTheme); cards.forEach(card => { const selectTheme = () => { const theme = card.dataset.themeValue; console.log("[Theme Selector] User selected theme:", theme); window.AppTheme.set(theme); // localStorage 저장 + 즉시 화면 적용 applyActiveState(theme); }; card.addEventListener("click", selectTheme); // 키보드 접근성 (Enter/Space) card.addEventListener("keydown", (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); selectTheme(); } }); }); } async function fetchSettings() { try { const res = await fetch(`${API_SETTINGS}/`); if (!res.ok) throw new Error("Failed to fetch settings"); allSettings = await res.json(); renderSettings(allSettings); } catch (err) { console.error(err); document.getElementById("settings-container").innerHTML = `