ritesh19180's picture
Upload folder using huggingface_hub
d3ec6da verified
Raw
History Blame Contribute Delete
13.1 kB
import {
BrowserRouter,
Routes,
Route,
Navigate,
useLocation
} from "react-router-dom";
import React, { useEffect } from "react";
import { AnimatePresence } from "framer-motion";
import { NotFound } from "./components/ui/not-found-2";
import useTicketStore from "./store/ticketStore";
import Toaster from "./components/shared/Toaster";
import BugReportWidget from "./components/shared/BugReportWidget";
import useRealtimeNotifications from "./hooks/useRealtimeNotifications";
// Auth Components
import Login from "./pages/Login";
import ForgotPassword from "./pages/ForgotPassword";
import ResetPassword from "./pages/ResetPassword";
import Signup from "./pages/Signup";
import AdminSignup from "./pages/AdminSignup";
import AdminLobby from "./pages/AdminLobby";
import UserLobby from "./pages/UserLobby";
import LandingPage from "./pages/LandingPage";
import ContactSales from "./pages/ContactSales";
// Legacy components
import DuplicateDetection from "./user/pages/DuplicateDetection";
import AutoResolveChat from "./user/pages/AutoResolveChat";
import Resolved from "./user/pages/Resolved";
import TicketTracking from "./user/pages/TicketTracking";
// Layouts
import UserLayout from "./user/UserLayout";
import AdminLayout from "./admin/layout/AdminLayout";
// User Pages
import Dashboard from "./user/pages/Dashboard";
import CreateTicket from "./user/pages/CreateTicket";
import MyTickets from "./user/pages/MyTickets";
import TicketResult from "./user/pages/TicketResult";
import Profile from "./user/pages/Profile";
import TicketDetail from "./user/pages/TicketDetail";
import TicketProcessing from "./user/pages/AIProcessing"; // Renamed generic import just in case, but keeping AIProcessing
import AIProcessing from "./user/pages/AIProcessing";
import AIUnderstanding from "./user/pages/AIUnderstanding";
import Notifications from "./user/pages/Notifications";
import Help from "./user/pages/Help";
import DocsPortal from "./docs/pages/DocsPortal";
// New Showcase Pages
import ApiReference from "./pages/ApiReference";
import Changelog from "./pages/Changelog";
import StatusPage from "./pages/StatusPage";
import AboutUs from "./pages/AboutUs";
import Careers from "./pages/Careers";
import CookiePolicy from "./pages/legal/CookiePolicy";
// NEW Admin Pages (Refactored)
import AdminDashboard from "./admin/pages/AdminDashboard";
import AdminTickets from "./admin/pages/AdminTickets";
import AdminTicketDetail from "./admin/pages/AdminTicketDetail";
import AdminUsers from "./admin/pages/AdminUsers";
import AdminAnalytics from "./admin/pages/AdminAnalytics";
import AdminProfile from "./admin/pages/AdminProfile";
import AdminSettings from "./admin/pages/AdminSettings";
import MasterBugReports from "./master-admin/pages/MasterBugReports";
// Feature Pages
import AutoCategorizationFeature from "./pages/features/AutoCategorizationFeature";
import PriorityDetectionFeature from "./pages/features/PriorityDetectionFeature";
import SmartResolutionFeature from "./pages/features/SmartResolutionFeature";
// Legal Pages
import TermsOfService from "./pages/legal/TermsOfService";
import PrivacyPolicy from "./pages/legal/PrivacyPolicy";
import Security from "./pages/legal/Security";
import AdminProtectedRoute from "./components/shared/AdminProtectedRoute";
import MasterAdminProtectedRoute from "./components/shared/MasterAdminProtectedRoute";
import ProtectedRoute from "./components/shared/ProtectedRoute";
import useAuthStore from "./store/authStore";
import NotApproved from "./pages/NotApproved";
// Master Admin Components
import MasterAdminLogin from "./pages/MasterAdminLogin";
import MasterAdminLayout from "./master-admin/layout/MasterAdminLayout";
import MasterAdminDashboard from "./master-admin/pages/MasterAdminDashboard";
import PendingAdminRequests from "./master-admin/pages/PendingAdminRequests";
import AllCompanies from "./master-admin/pages/AllCompanies";
import AllAdmins from "./master-admin/pages/AllAdmins";
function TitleUpdater() {
const location = useLocation();
useEffect(() => {
const path = location.pathname;
let title = 'HELPDESK.AI';
// Admin Routes
if (path.startsWith('/admin/ticket/')) title = 'Ticket Detail | Admin';
else if (path.startsWith('/admin/dashboard')) title = 'Admin Dashboard';
else if (path.startsWith('/admin/tickets')) title = 'Admin Tickets';
else if (path.startsWith('/admin/users')) title = 'Manage Users | Admin';
else if (path.startsWith('/admin/analytics')) title = 'Analytics | Admin';
else if (path.startsWith('/admin/profile')) title = 'Admin Profile';
else if (path.startsWith('/admin/settings')) title = 'Settings | Admin';
// Master Admin Routes
else if (path.startsWith('/master-admin/dashboard')) title = 'Master Dashboard';
else if (path.startsWith('/master-admin/admin-requests')) title = 'Pending Requests | Master Admin';
else if (path.startsWith('/master-admin/companies')) title = 'Companies | Master Admin';
else if (path.startsWith('/master-admin/all-admins')) title = 'All Admins | Master Admin';
else if (path.startsWith('/master-admin/bug-reports')) title = 'System Bug Radar | Master Admin';
// User Routes
else if (path.startsWith('/ticket/')) title = 'Ticket Detail';
else if (path.startsWith('/ai-understanding')) title = 'AI Understanding';
else if (path.startsWith('/ai-processing')) title = 'AI Processing';
else if (path === '/dashboard') title = 'User Dashboard';
else if (path === '/create-ticket') title = 'Create Ticket';
else if (path === '/my-tickets') title = 'My Tickets';
else if (path === '/profile') title = 'User Profile';
else if (path === '/notifications') title = 'Notifications';
else if (path === '/docs') title = 'Documentation';
else if (path === '/api-reference') title = 'API Reference';
else if (path === '/changelog') title = 'Changelog';
else if (path === '/status') title = 'Status';
else if (path === '/about') title = 'About Us';
else if (path === '/careers') title = 'Careers';
else if (path === '/cookie-policy') title = 'Cookie Policy';
// Public / Lobby Routes
else if (path === '/login') title = 'Login';
else if (path === '/signup') title = 'Create Account';
else if (path === '/admin-signup') title = 'Admin Signup';
else if (path === '/user-lobby') title = 'User Lobby';
else if (path === '/admin-lobby') title = 'Admin Lobby';
else if (path === '/') title = 'Welcome';
document.title = title === 'HELPDESK.AI' ? title : `${title} | HELPDESK.AI`;
}, [location]);
return null;
}
// Scrolls to top on every route change
function ScrollToTop() {
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo({ top: 0, behavior: 'instant' });
}, [pathname]);
return null;
}
function AppLayout() {
const { user, profile } = useAuthStore();
// Initialize Global Realtime Notifications Listener
useRealtimeNotifications();
useEffect(() => {
if (!user) return;
const handleFocus = () => {
useTicketStore.persist.rehydrate();
};
window.addEventListener('focus', handleFocus);
return () => window.removeEventListener('focus', handleFocus);
}, [user]);
// ProtectedRoute handles the redirect to /login if user is not present
// but we still need to handle role-based navigation here
return (
<>
<Routes>
<Route path="/knowledge-check" element={<DuplicateDetection />} />
<Route path="/auto-resolve" element={<AutoResolveChat />} />
<Route path="/resolved" element={<Resolved />} />
{/* --- User Portal --- */}
<Route element={
profile?.role === 'master_admin' ? <Navigate to="/master-admin/dashboard" replace /> :
(profile?.role === 'admin' || profile?.role === 'super_admin') ? <Navigate to="/admin/dashboard" replace /> :
profile?.status === 'pending_approval' ? <Navigate to="/user-lobby" replace /> :
profile?.status === 'rejected' ? <Navigate to="/not-approved" replace /> :
<UserLayout />
}>
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/create-ticket" element={<CreateTicket />} />
<Route path="/my-tickets" element={<MyTickets />} />
<Route path="/ticket/:ticket_id" element={<TicketDetail />} />
<Route path="/ai-processing" element={<AIProcessing />} />
<Route path="/ai-understanding" element={<AIUnderstanding />} />
<Route path="/ticket-tracking" element={<TicketTracking />} />
<Route path="/ticket-result" element={<TicketResult />} />
<Route path="/profile" element={<Profile />} />
<Route path="/help" element={<Help />} />
<Route path="/notifications" element={<Notifications />} />
</Route>
{/* --- Admin Portal (Protected) --- */}
<Route element={<AdminProtectedRoute />}>
<Route element={<AdminLayout />}>
<Route path="/admin" element={<Navigate to="/admin/dashboard" replace />} />
<Route path="/admin/dashboard" element={<AdminDashboard />} />
<Route path="/admin/tickets" element={<AdminTickets />} />
<Route path="/admin/ticket/:ticket_id" element={<AdminTicketDetail />} />
<Route path="/admin/users" element={<AdminUsers />} />
<Route path="/admin/analytics" element={<AdminAnalytics />} />
<Route path="/admin/profile" element={<AdminProfile />} />
<Route path="/admin/settings" element={<AdminSettings />} />
</Route>
</Route>
<Route path="*" element={<NotFound />} />
</Routes>
</>
);
}
function App() {
const { initialize } = useAuthStore();
useEffect(() => {
initialize();
}, [initialize]);
const isDocsSubdomain = window.location.hostname.startsWith('docs.');
if (isDocsSubdomain) {
return (
<BrowserRouter>
<TitleUpdater />
<ScrollToTop />
<Toaster />
<BugReportWidget />
<Routes>
<Route path="/" element={<DocsPortal />} />
<Route path="/docs" element={<Navigate to="/" replace />} />
<Route path="/api-reference" element={<ApiReference />} />
<Route path="/changelog" element={<Changelog />} />
<Route path="/status" element={<StatusPage />} />
<Route path="*" element={<DocsPortal />} />
</Routes>
</BrowserRouter>
);
}
return (
<BrowserRouter>
<TitleUpdater />
<ScrollToTop />
<Toaster />
<BugReportWidget />
<Routes>
{/* Public */}
<Route path="/" element={<LandingPage />} />
<Route path="/login" element={<Login />} />
<Route path="/forgot-password" element={<ForgotPassword />} />
<Route path="/reset-password" element={<ResetPassword />} />
<Route path="/signup" element={<Signup />} />
<Route path="/admin-signup" element={<AdminSignup />} />
<Route path="/admin-lobby" element={<AdminLobby />} />
<Route path="/user-lobby" element={<UserLobby />} />
<Route path="/not-approved" element={<NotApproved />} />
<Route path="/contact-sales" element={<ContactSales />} />
<Route path="/docs" element={<DocsPortal />} />
<Route path="/api-reference" element={<ApiReference />} />
<Route path="/changelog" element={<Changelog />} />
<Route path="/status" element={<StatusPage />} />
<Route path="/about" element={<AboutUs />} />
<Route path="/careers" element={<Careers />} />
<Route path="/cookie-policy" element={<CookiePolicy />} />
{/* Feature Pages */}
<Route path="/features/categorization" element={<AutoCategorizationFeature />} />
<Route path="/features/priority" element={<PriorityDetectionFeature />} />
<Route path="/features/resolution" element={<SmartResolutionFeature />} />
{/* Legal Pages */}
<Route path="/terms" element={<TermsOfService />} />
<Route path="/privacy" element={<PrivacyPolicy />} />
<Route path="/security" element={<Security />} />
{/* Master Admin Portal */}
<Route path="/master-admin-login" element={<MasterAdminLogin />} />
<Route element={<MasterAdminProtectedRoute />}>
<Route element={<MasterAdminLayout />}>
<Route path="/master-admin/dashboard" element={<MasterAdminDashboard />} />
<Route path="/master-admin/admin-requests" element={<PendingAdminRequests />} />
<Route path="/master-admin/companies" element={<AllCompanies />} />
<Route path="/master-admin/all-admins" element={<AllAdmins />} />
<Route path="/master-admin/bug-reports" element={<MasterBugReports />} />
</Route>
</Route>
{/* Protected */}
<Route element={<ProtectedRoute />}>
<Route path="/*" element={<AppLayout />} />
</Route>
</Routes>
</BrowserRouter>
);
}
export default App;