import React from 'react'; import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from 'react-query'; import { Toaster } from 'react-hot-toast'; import { AuthProvider } from './contexts/AuthContext'; import { useAuth } from './hooks/useAuth'; // Layout components import Layout from './components/Layout/Layout'; import AuthLayout from './components/Layout/AuthLayout'; // Auth pages import Login from './pages/Auth/Login'; import Register from './pages/Auth/Register'; import ForgotPassword from './pages/Auth/ForgotPassword'; // Main app pages import Dashboard from './pages/Dashboard/Dashboard'; import Properties from './pages/Properties/Properties'; import PropertyDetail from './pages/Properties/PropertyDetail'; import Equipment from './pages/Equipment/Equipment'; import Products from './pages/Products/Products'; import Applications from './pages/Applications/Applications'; import ApplicationPlan from './pages/Applications/ApplicationPlan'; import ApplicationLog from './pages/Applications/ApplicationLog'; import History from './pages/History/History'; import Weather from './pages/Weather/Weather'; import Mowing from './pages/Mowing/Mowing'; import Profile from './pages/Profile/Profile'; // Admin pages import AdminDashboard from './pages/Admin/AdminDashboard'; import AdminUsers from './pages/Admin/AdminUsers'; import AdminProducts from './pages/Admin/AdminProducts'; import AdminEquipment from './pages/Admin/AdminEquipment'; import AdminProperties from './pages/Admin/AdminProperties'; // Error pages import NotFound from './pages/Error/NotFound'; import Unauthorized from './pages/Error/Unauthorized'; // Loading component import LoadingSpinner from './components/UI/LoadingSpinner'; // Create a client for React Query const queryClient = new QueryClient({ defaultOptions: { queries: { retry: (failureCount, error) => { // Don't retry on 401 (unauthorized) or 403 (forbidden) if (error?.response?.status === 401 || error?.response?.status === 403) { return false; } return failureCount < 2; }, staleTime: 5 * 60 * 1000, // 5 minutes cacheTime: 10 * 60 * 1000, // 10 minutes }, }, }); // Protected Route component const ProtectedRoute = ({ children, adminOnly = false }) => { const { user, loading } = useAuth(); if (loading) { return (