import React, { useState } from "react" import "./App.css" import { BrowserRouter as Router, Routes, Route, useLocation, useNavigate } from "react-router-dom" import { Provider, useDispatch, useSelector } from "react-redux" import store from "./store/store" import { ToastContainer } from "react-toastify" import "react-toastify/dist/ReactToastify.css" import { motion, AnimatePresence } from "framer-motion" import { setUser, setLoading, logout } from "./store/slices/authSlice"; import { useEffect } from "react"; import { useLogoutHandler } from "./hooks/useLogoutHandler"; import Header from "./components/Header" import MenuBar from "./components/MenuBar" import Footer from "./components/Footer" import Carousel from "./components/Carousel" import ItemSection from "./components/ItemSection" import LoadingScreen from "./components/LoadingScreen" import ScrollToTop from "./components/ScrollToTop" import LiveChat from "./components/LiveChat" import AIChatAssistant from "./components/AIChatAssistant" import Home from "./pages/Home" import ProductDetail from "./pages/ProductDetail" import ProductList from "./pages/ProductList" import CartPage from "./pages/CartPage" import LoginPage from "./pages/LoginPage" import RegisterPage from "./pages/RegisterPage" import ProfilePage from "./pages/ProfilePage" import CheckoutPage from "./pages/CheckoutPage" import WishlistPage from "./pages/WishlistPage" import OrderPage from "./pages/OrderPage" import AdminLoginPage from "./pages/AdminLoginPage" import AdminDashboard from "./pages/AdminDashboard" import FloatingElements from "./components/FloatingElements" import ParticleBackground from "./components/ParticleBackground" function AppContent() { const [isLoading, setIsLoading] = useState(true) const [showLiveChat, setShowLiveChat] = useState(false) const [showAIAssistant, setShowAIAssistant] = useState(false) const location = useLocation() const navigate = useNavigate() const dispatch = useDispatch(); const { isLoggedIn, userData } = useSelector((state) => state.auth); const authLoading = useSelector((state) => state.auth.loading); useLogoutHandler(); useEffect(() => { const hydrateAuth = async () => { dispatch(setLoading(true)); try { const existingUserData = localStorage.getItem('userData'); const existingToken = localStorage.getItem('token'); if (existingUserData && existingToken) { try { const userData = JSON.parse(existingUserData); if (userData._id && userData.email) { dispatch(setUser(userData)); dispatch(setLoading(false)); return; } } catch (e) { console.error('Error parsing stored user data:', e); localStorage.removeItem('userData'); localStorage.removeItem('token'); } } dispatch(setLoading(false)); } catch (e) { console.error('Auth hydration error:', e); localStorage.removeItem('userData'); localStorage.removeItem('token'); dispatch(setLoading(false)); } }; hydrateAuth(); }, [dispatch]); const shouldHidePublicSections = [ "/login", "/register", "/cart", "/checkout", "/search", "/productlist", "/profile", "/wishlist", "/orders" ].includes(location.pathname.toLowerCase()) || location.pathname.startsWith("/product/"); const hideHeader = location.pathname.startsWith("/admin/"); React.useEffect(() => { const timer = setTimeout(() => setIsLoading(false), 2000) return () => clearTimeout(timer) }, [setIsLoading]) useEffect(() => { if (!authLoading && !isLoggedIn) { const protectedRoutes = ['/profile', '/wishlist', '/orders', '/checkout', '/cart']; if (protectedRoutes.includes(location.pathname)) { window.location.href = '/'; } } }, [isLoggedIn, authLoading, location.pathname]); if (isLoading || authLoading) { return } return (
{} {!hideHeader && (
setShowLiveChat(true)} onOpenAIAssistant={() => setShowAIAssistant(true)} /> )} {} {!hideHeader && !shouldHidePublicSections && ( <>
)} {} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> { } {!(location.pathname.toLowerCase() === "/profile") && } { }
) } function App() { return ( ) } export default App