All files / src App.tsx

100% Statements 92/92
100% Branches 5/5
100% Functions 1/1
100% Lines 92/92

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 1071x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x   5x 5x   5x 1x 1x   4x 4x 4x 4x   5x     5x 5x     5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x   5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x     5x 5x 5x     5x 5x 5x 5x   5x  
import { Routes, Route, Navigate } from 'react-router-dom';
import { useAuth } from './contexts/AuthContext';
import { GoogleMapsProvider } from './components/GoogleMapsProvider';
import { DiscoverViewModeProvider } from './contexts/DiscoverViewModeContext';
import LandingPage from './views/auth/LandingPage';
import LoginView from './views/auth/LoginView';
import RegisterView from './views/auth/RegisterView';
import ForgotPasswordView from './views/auth/ForgotPasswordView';
import AppShell from './components/AppShell';
import ProtectedRoute from './components/ProtectedRoute';
import AdminRoute from './components/AdminRoute';
import DiscoverPage from './views/discover/DiscoverPage';
import CreateEventPage from './views/events/CreateEventPage';
import EditEventPage from './views/events/EditEventPage';
import EventDetailPage from './views/events/EventDetailPage';
import MyEventsPage from './views/events/MyEventsPage';
import InvitationsPage from './views/invitations/InvitationsPage';
import NotificationsPage from './views/notifications/NotificationsPage';
import TicketsPage from './views/tickets/TicketsPage';
import TicketDetailPage from './views/tickets/TicketDetailPage';
import FavoritesPage from './views/favorites/FavoritesPage';
import ProfilePage from './views/profile/ProfilePage';
import PublicProfilePage from './views/profile/PublicProfilePage';
import NotFoundView from './views/fallback/NotFoundView';
import BackofficeLayout from './views/backoffice/BackofficeLayout';
import UsersAdminPage from './views/backoffice/UsersAdminPage';
import EventsAdminPage from './views/backoffice/EventsAdminPage';
import EventReportsAdminPage from './views/backoffice/EventReportsAdminPage';
import CategoriesAdminPage from './views/backoffice/CategoriesAdminPage';
import ParticipationsAdminPage from './views/backoffice/ParticipationsAdminPage';
import TicketsAdminPage from './views/backoffice/TicketsAdminPage';
import InvitationsAdminPage from './views/backoffice/InvitationsAdminPage';
import JoinRequestsAdminPage from './views/backoffice/JoinRequestsAdminPage';
import CommentsAdminPage from './views/backoffice/CommentsAdminPage';
import RatingsAdminPage from './views/backoffice/RatingsAdminPage';
import FavoritesAdminPage from './views/backoffice/FavoritesAdminPage';
import BadgesAdminPage from './views/backoffice/BadgesAdminPage';
import PushDevicesAdminPage from './views/backoffice/PushDevicesAdminPage';
import NotificationsAdminPage from './views/backoffice/NotificationsAdminPage';
 
export default function App() {
  const { isLoading, token } = useAuth();
 
  if (isLoading) {
    return null;
  }
 
  return (
    <GoogleMapsProvider>
      <DiscoverViewModeProvider>
        <Routes>
          {/* Landing page */}
          <Route path="/" element={token ? <Navigate to="/discover" replace /> : <LandingPage />} />
 
          {/* App shell wraps all main pages (public + protected) */}
          <Route element={<AppShell />}>
            <Route path="/discover" element={<DiscoverPage />} />
 
            {/* Protected routes — require auth */}
            <Route path="/events/create" element={<ProtectedRoute><CreateEventPage /></ProtectedRoute>} />
            <Route path="/events/:id/edit" element={<ProtectedRoute><EditEventPage /></ProtectedRoute>} />
            <Route path="/events/:id" element={<EventDetailPage />} />
            <Route path="/my-events" element={<ProtectedRoute><MyEventsPage /></ProtectedRoute>} />
            <Route path="/invitations" element={<ProtectedRoute><InvitationsPage /></ProtectedRoute>} />
            <Route path="/notifications" element={<ProtectedRoute><NotificationsPage /></ProtectedRoute>} />
            <Route path="/tickets" element={<ProtectedRoute><TicketsPage /></ProtectedRoute>} />
            <Route path="/tickets/:ticketId" element={<ProtectedRoute><TicketDetailPage /></ProtectedRoute>} />
            <Route path="/favorites" element={<ProtectedRoute><FavoritesPage /></ProtectedRoute>} />
            <Route path="/profile" element={<ProtectedRoute><ProfilePage /></ProtectedRoute>} />
            <Route path="/users/:userId" element={<PublicProfilePage />} />
            <Route
              path="/backoffice"
              element={<AdminRoute><BackofficeLayout /></AdminRoute>}
            >
              <Route index element={<Navigate to="/backoffice/users" replace />} />
              <Route path="users" element={<UsersAdminPage />} />
              <Route path="events" element={<EventsAdminPage />} />
              <Route path="event-reports" element={<EventReportsAdminPage />} />
              <Route path="categories" element={<CategoriesAdminPage />} />
              <Route path="participations" element={<ParticipationsAdminPage />} />
              <Route path="tickets" element={<TicketsAdminPage />} />
              <Route path="invitations" element={<InvitationsAdminPage />} />
              <Route path="join-requests" element={<JoinRequestsAdminPage />} />
              <Route path="comments" element={<CommentsAdminPage />} />
              <Route path="ratings" element={<RatingsAdminPage />} />
              <Route path="favorites" element={<FavoritesAdminPage />} />
              <Route path="badges" element={<BadgesAdminPage />} />
              <Route path="push-devices" element={<PushDevicesAdminPage />} />
              <Route path="notifications" element={<NotificationsAdminPage />} />
            </Route>
            <Route path="/admin-panel" element={<Navigate to="/backoffice" replace />} />
            <Route path="/admin-panel/*" element={<Navigate to="/backoffice" replace />} />
          </Route>
 
          {/* Auth pages (no shell) */}
          <Route path="/login" element={<LoginView />} />
          <Route path="/register" element={<RegisterView />} />
          <Route path="/forgot-password" element={<ForgotPasswordView />} />
 
          {/* Fallback */}
          <Route path="*" element={<NotFoundView />} />
        </Routes>
      </DiscoverViewModeProvider>
    </GoogleMapsProvider>
  );
}