Files
nahodka-front/src/App.js
2026-08-12 23:28:35 +03:00

55 lines
2.0 KiB
JavaScript

// src/App.jsx
import { useEffect, useRef } from 'react';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { AuthProvider } from './context/AuthContext';
import { ThemeProvider } from './context/ThemeContext';
import { useAuthContext } from './context/AuthContext';
import { useUnread } from './context/UnreadContext';
import { useUnreadSocket } from './hooks/useUnreadSocket';
import LandingPage from './pages/NakhodkaLanding';
import MainFeed from './pages/MainFeed';
import ChatPage from './pages/ChatPage';
import ChatListPage from './pages/ChatListPage';
import ReviewsPage from './pages/ReviewsPage';
import './styles/chat.css';
function UnreadListener() {
const { user } = useAuthContext();
const { resetUnread } = useUnread();
const prevUserIdRef = useRef(user?.id);
// Сбрасываем накопленный unreadMap при смене пользователя (логин под другим
// аккаунтом или логаут → user становится null) — иначе счётчики непрочитанных
// от предыдущей сессии останутся висеть в бейдже до первого WS-обновления.
useEffect(() => {
if (prevUserIdRef.current !== user?.id) {
resetUnread();
prevUserIdRef.current = user?.id;
}
}, [user?.id, resetUnread]);
useUnreadSocket(user?.id);
return null;
}
function App() {
return (
<ThemeProvider>
<AuthProvider>
<UnreadListener />
<BrowserRouter>
<Routes>
<Route path="/" element={<LandingPage />} />
<Route path="/feed" element={<MainFeed />} />
<Route path="/reviews" element={<ReviewsPage />} />
<Route path="/chats" element={<ChatListPage />} />
<Route path="/chats/:chatId" element={<ChatPage />} />
<Route path="*" element={<LandingPage />} />
</Routes>
</BrowserRouter>
</AuthProvider>
</ThemeProvider>
);
}
export default App;