diff --git a/frontend/src/calendar.jsx b/frontend/src/calendar.jsx index d77b041..02c9c87 100644 --- a/frontend/src/calendar.jsx +++ b/frontend/src/calendar.jsx @@ -92,11 +92,15 @@ export default function CalendarWidget() { const [loading, setLoading] = useState(false); const [selected, setSelected] = useState(null); // date object + const [errors, setErrors] = useState([]); + // Load all feeds const loadFeeds = async (feedList) => { if (!feedList.length) { setEvents([]); return; } setLoading(true); + setErrors([]); const all = []; + const errs = []; for (const f of feedList) { try { const res = await fetch(`/api/calendar/fetch?url=${encodeURIComponent(f.url)}`, { @@ -106,14 +110,18 @@ export default function CalendarWidget() { const text = await res.text(); const evs = parseIcal(text).map(e => ({ ...e, color: f.color, feedName: f.name })); all.push(...evs); + } else { + const d = await res.json().catch(()=>({error:'Unbekannter Fehler'})); + errs.push(`${f.name}: ${d.error}`); } - } catch {} + } catch(e) { errs.push(`${f.name}: ${e.message}`); } } setEvents(all); + setErrors(errs); setLoading(false); }; - useEffect(() => { if (isOpen) loadFeeds(feeds); }, [isOpen]); + useEffect(() => { if (isOpen && feeds.length > 0) loadFeeds(feeds); }, [isOpen]); // Calendar grid const days = useMemo(() => { @@ -135,15 +143,37 @@ export default function CalendarWidget() { return (
{/* Header */} - +
+ + {isOpen && feeds.length > 0 && ( + + )} +
{isOpen && (
+ {/* Fehler */} + {errors.length > 0 && ( +
+ {errors.map((e,i) => ( +
+ ✕ {e} +
+ ))} +
+ )} + {/* Monat Nav */}