@@ -95,7 +92,7 @@ function MovieCard({ movie, favIds, onToggleFav }) {
);
}
-// ββ Grid-Wrapper (now-playing / upcoming) βββββββββββββββββββββββββββββββββββββ
+// ββ Grid (now-playing / upcoming) βββββββββββββββββββββββββββββββββββββββββββββ
function MovieGrid({ endpoint, emptyText }) {
const [movies, setMovies] = useState([]);
const [favIds, setFavIds] = useState(new Set());
@@ -120,7 +117,7 @@ function MovieGrid({ endpoint, emptyText }) {
const toggleFav = async (movie, isFav) => {
try {
if (isFav) {
- await api(`/tools/media/favorites/${movie.id}`, { method: 'DELETE' });
+ await api(`/tools/media/favorites/${movie.id}`, { method:'DELETE' });
setFavIds(prev => { const s = new Set(prev); s.delete(movie.id); return s; });
} else {
await api('/tools/media/favorites', { body: {
@@ -137,14 +134,21 @@ function MovieGrid({ endpoint, emptyText }) {
};
if (loading) return
β³ LΓ€dtβ¦;
- if (error) return
β {error};
+ if (error) return
+ β {error}
+ {error.includes('Token') && (
+
+ β Einstellungen β Benutzer β TMDB API (KINO-FEATURE)
+
+ )}
+ ;
if (!movies.length) return
{emptyText};
return (
{movies.map(m => (
@@ -153,26 +157,20 @@ function MovieGrid({ endpoint, emptyText }) {
);
}
-// ββ Favoriten-Tab βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
+// ββ Favoriten βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
function FavoritenTab() {
const [favs, setFavs] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState('');
- const load = useCallback(async () => {
+ useEffect(() => {
setLoading(true); setError('');
- try {
- const data = await api('/tools/media/favorites');
- setFavs(data);
- } catch (e) { setError(e.message); }
- finally { setLoading(false); }
+ api('/tools/media/favorites').then(setFavs).catch(e => setError(e.message)).finally(() => setLoading(false));
}, []);
- useEffect(() => { load(); }, []);
-
const removeFav = async (tmdbId) => {
try {
- await api(`/tools/media/favorites/${tmdbId}`, { method: 'DELETE' });
+ await api(`/tools/media/favorites/${tmdbId}`, { method:'DELETE' });
setFavs(prev => prev.filter(f => f.tmdb_id !== tmdbId));
} catch (e) { alert(e.message); }
};
@@ -182,11 +180,7 @@ function FavoritenTab() {
if (!favs.length) return
Noch keine Favoriten β markiere Filme mit β€;
return (
-
+
{favs.map(f => (
{f.poster_path
?

- :
π¬
+ style={{ width:'100%', height:'100%', objectFit:'cover', display:'block' }} />
+ :
π¬
}
-
+
{f.title}
{f.release_date_de && (
-
+
π©πͺ {f.release_date_de}
)}