From 72689e10ad4391785bd6c618468dc507d2f00e27 Mon Sep 17 00:00:00 2001 From: foxixus Date: Sun, 10 Aug 2025 22:20:58 +0000 Subject: [PATCH] Fix favourites --- src/app/favorites/page.tsx | 22 ++++++++++++---------- src/components/Providers.tsx | 25 +++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/app/favorites/page.tsx b/src/app/favorites/page.tsx index 5e03ec0..713bbde 100644 --- a/src/app/favorites/page.tsx +++ b/src/app/favorites/page.tsx @@ -4,8 +4,7 @@ import { useEffect, useState } from 'react'; import Link from 'next/link'; import Image from 'next/image'; import { useRouter } from 'next/navigation'; -import { favoritesAPI } from '@/lib/favoritesApi'; -import { getImageUrl } from '@/lib/neoApi'; +import { neoApi, getImageUrl } from '@/lib/neoApi'; import { Loader2, HeartCrack } from 'lucide-react'; interface Favorite { @@ -25,19 +24,22 @@ export default function FavoritesPage() { const fetchFavorites = async () => { const token = localStorage.getItem('token'); if (!token) { - router.push('/login'); + router.replace('/login'); return; } try { - const response = await favoritesAPI.getFavorites(); + const response = await neoApi.get('/api/v1/favorites'); setFavorites(response.data); - } catch (error) { + } catch (error: any) { console.error('Failed to fetch favorites:', error); - localStorage.removeItem('token'); - localStorage.removeItem('userName'); - localStorage.removeItem('userEmail'); - router.push('/login'); + // Редиректим только при явном 401 + if (error?.response?.status === 401) { + localStorage.removeItem('token'); + localStorage.removeItem('userName'); + localStorage.removeItem('userEmail'); + router.replace('/login'); + } } finally { setLoading(false); } @@ -117,4 +119,4 @@ export default function FavoritesPage() { ); -} +} \ No newline at end of file diff --git a/src/components/Providers.tsx b/src/components/Providers.tsx index 45a2869..ec621e8 100644 --- a/src/components/Providers.tsx +++ b/src/components/Providers.tsx @@ -2,6 +2,27 @@ import { ThemeProvider } from 'styled-components'; import { theme } from '@/styles/theme'; -export function Providers({ children }: { children: React.ReactNode }) { - return {children}; +import { useEffect } from 'react'; +import { neoApi } from '@/lib/neoApi'; + +function TokenBootstrap() { + useEffect(() => { + try { + const token = localStorage.getItem('token'); + if (token) { + neoApi.defaults.headers.common['Authorization'] = `Bearer ${token}`; + window.dispatchEvent(new Event('auth-changed')); + } + } catch {} + }, []); + return null; } + +export function Providers({ children }: { children: React.ReactNode }) { + return ( + <> + + {children} + + ); +} \ No newline at end of file