// api.js let loaderTimeout = null; function showLoader() { const loader = document.getElementById('globalLoader'); if (!loader) return; clearTimeout(loaderTimeout); loader.classList.remove('d-none'); } function hideLoader() { const loader = document.getElementById('globalLoader'); if (!loader) return; loaderTimeout = setTimeout(() => { loader.classList.add('d-none'); }, 200); // задержка 0.2 сек } export async function apiRequest(url, payload = {}, method = 'POST') { method = typeof method === 'string' ? method.toUpperCase() : 'POST'; let finalUrl = url; let options = { method, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, credentials: 'same-origin' }; if (method === 'GET') { const params = new URLSearchParams(payload); finalUrl = `${url}?${params.toString()}`; } else { options.body = JSON.stringify(payload); } showLoader(); try { const res = await fetch(finalUrl, options); if (!res.ok) { const text = await res.text(); throw new Error(`HTTP ${res.status}: ${text}`); } return await res.json(); } finally { hideLoader(); } }