/* ============================================================ BAN YARO — Tierfutter-Rückrufe Seiten-Modul: RASFF EU Rückruf-Alarm für Heimtierfutter. ============================================================ */ window.Page_recalls = (() => { // ---------------------------------------------------------- // MODUL-STATE // ---------------------------------------------------------- let _container = null; let _appState = null; let _recalls = []; let _query = ''; // ---------------------------------------------------------- // INIT // ---------------------------------------------------------- async function init(container, appState) { _container = container; _appState = appState; _query = ''; await _render(); } // ---------------------------------------------------------- // REFRESH // ---------------------------------------------------------- async function refresh() { _recalls = []; _query = ''; await _render(); } // ---------------------------------------------------------- // RENDER // ---------------------------------------------------------- async function _render() { _container.innerHTML = `

Hinweis: Prüfe immer das Mindesthaltbarkeitsdatum und die Chargen-Nummer bevor du ein gemeldetes Produkt entsorgst oder zurückgibst.

${UI.skeleton(4)}
`; // Suchfeld-Handler _container.querySelector('#recalls-search').addEventListener('input', (e) => { _query = e.target.value.trim(); _renderList(); }); await _loadRecalls(); } // ---------------------------------------------------------- // DATEN LADEN // ---------------------------------------------------------- async function _loadRecalls() { try { const url = _query ? `/recalls?q=${encodeURIComponent(_query)}` : '/recalls'; _recalls = await API.get(url); } catch { _container.querySelector('#recalls-list').innerHTML = UI.emptyState({ icon: 'warning-circle', title: 'Rückrufe konnten nicht geladen werden', text: 'Bitte versuche es später erneut.', }); return; } _renderList(); } // ---------------------------------------------------------- // LISTE RENDERN // ---------------------------------------------------------- function _renderList() { const listEl = _container.querySelector('#recalls-list'); if (!listEl) return; const filtered = _query ? _recalls.filter(r => { const q = _query.toLowerCase(); return (r.titel || '').toLowerCase().includes(q) || (r.produkt || '').toLowerCase().includes(q) || (r.gefahr || '').toLowerCase().includes(q) || (r.herkunft || '').toLowerCase().includes(q); }) : _recalls; if (!filtered.length) { const today = new Date().toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }); listEl.innerHTML = UI.emptyState({ icon: UI.icon('check-circle'), title: 'Aktuell keine Rückrufe', text: `Letzte Prüfung: ${today}`, }); return; } listEl.innerHTML = filtered.map(r => _cardHtml(r)).join(''); } // ---------------------------------------------------------- // EINZELNE KARTE // ---------------------------------------------------------- function _cardHtml(r) { const datum = r.datum ? new Date(r.datum).toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }) : ''; const meta = [ r.herkunft ? `${UI.icon('globe-hemisphere-west')} ${UI.escape(r.herkunft)}` : '', datum ? `${UI.icon('calendar-blank')} ${datum}` : '', r.quelle ? `${UI.escape(r.quelle)}` : '', ].filter(Boolean).join(' · '); const linkHtml = r.url ? ` ${UI.icon('arrow-square-out')} Details auf RASFF ` : ''; return `
${UI.escape(r.produkt || r.titel)}
${r.gefahr ? `

${UI.escape(r.gefahr)}

` : ''}
${meta}
${linkHtml ? `
${linkHtml}
` : ''}
`; } // ---------------------------------------------------------- // PUBLIC API // ---------------------------------------------------------- return { init, refresh }; })();