diff --git a/index.html b/index.html index 730d787..265b152 100644 --- a/index.html +++ b/index.html @@ -9,14 +9,16 @@
- --> diff --git a/src/API/Index.ts b/src/API/Index.ts index 1874517..8332a0e 100644 --- a/src/API/Index.ts +++ b/src/API/Index.ts @@ -1,13 +1,17 @@ import axios, { AxiosError } from 'axios'; import refreshToken from '../services/retryToken'; + const api = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL, }); + export const protectedapi = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL, withCredentials: true, }); + export default api; + protectedapi.interceptors.response.use( (response) => { return response; @@ -21,9 +25,15 @@ protectedapi.interceptors.response.use( try { await refreshToken(); return protectedapi(originalRequest); - } catch (error) { - // window.location.href = '/signin'; - return Promise.reject(error); + } catch (refreshError) { + // Refresh failed - clear cookies and redirect to signin + document.cookie = 'access-token=; max-age=0; path=/;'; + document.cookie = 'refresh-token=; max-age=0; path=/;'; + document.cookie = 'session-token=; max-age=0; path=/;'; + document.cookie = 'id=; max-age=0; path=/;'; + + window.location.href = '/signin'; + return Promise.reject(refreshError); } } return Promise.reject(error); diff --git a/src/components/Pages/Home/HomeNavbar.tsx b/src/components/Pages/Home/HomeNavbar.tsx index c3800b0..40f9f1b 100644 --- a/src/components/Pages/Home/HomeNavbar.tsx +++ b/src/components/Pages/Home/HomeNavbar.tsx @@ -1,4 +1,4 @@ -import { Link as ReactLink } from 'react-router-dom'; +import { Link as ReactLink, useLocation, useNavigate } from 'react-router-dom'; import darklogo from '../../../assets/images/logo-dark.26900637.svg'; import lightlogo from '../../../assets/images/logo-light.5034df26.svg'; import { usethemeUtils } from '../../../context/ThemeWrapper'; @@ -7,14 +7,41 @@ import { useAuthSlice } from '../../../store/authslice/auth'; import LightModeOutlinedIcon from '@mui/icons-material/LightModeOutlined'; import DarkModeIcon from '@mui/icons-material/DarkModeOutlined'; import Profile from '../../UI/Profile'; +import { useCallback } from 'react'; +import ProblemAutocomplete from '../Problems/ProblemAutocomplete'; +import useProblemsAutocomplete from '../../../hooks/useProblemsAutocomplete'; +import { MappedSearchResult } from '../../../utils/elasticsearchMapper'; +import { useProblemsSearchSlice } from '../../../store/problemsSearchSlice'; export default function HomeNavbar() { const { colorMode, toggleColorMode } = usethemeUtils(); const isLogedIn = useAuthSlice((state) => state.isLogedIn); + const location = useLocation(); + const navigate = useNavigate(); + + // Use Zustand store for search state (synced across pages) + const searchQuery = useProblemsSearchSlice((state) => state.searchQuery); + const setSearchQuery = useProblemsSearchSlice((state) => state.setSearchQuery); + + const { topResults, isSearching } = useProblemsAutocomplete(searchQuery); + + // Handle autocomplete selection - navigate to problems list with search query maintained + const handleAutocompleteSelect = useCallback( + (_: MappedSearchResult) => { + // Keep the search query in store and navigate to problems list + navigate('/problems'); + }, + [navigate] + ); + + const handleSearchChange = useCallback((query: string) => { + setSearchQuery(query); + }, [setSearchQuery]); return ( -