import { Toaster as SonnerToast } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route, Outlet, Navigate, useLocation } from "react-router-dom";
import { useEffect } from "react";
import { AuthProvider, RequireAuth, useAuth } from "./lib/auth-context";
import ApiConnectionAlert from "./components/ApiConnectionAlert";
import QuickAccessWrapper from "./components/QuickAccessWrapper";
import Index from "./pages/Index";
import Login from "./pages/login";
import Dashboard from "./pages/dashboard";
import Projects from "./pages/projects";
import NewProject from "./pages/new-project";
import ProjectEdit from "./pages/project-edit";
import ProjectDetail from "./pages/project-detail";
import Teams from "./pages/teams";
import Backlog from "./pages/backlog";
import LandingPage from "./pages/LandingPage";
import Issues from "./pages/issues";
import NewIssue from "./pages/new-issue";
import IssueDetail from "./pages/issue-detail";
import IssueEdit from "./pages/issue-edit";
import Tasks from "./pages/tasks";
import TimeLogs from "./pages/time-logs";
import CalendarPage from "./pages/calendar";
import Reports from "./pages/reports";
import Messages from "./pages/messages";
import NotFound from "./pages/NotFound";
import Employees from "./pages/employees";
import EmployeeRegister from "./pages/employee-register";
import EmployeeDetail from "./pages/employee-detail";
import EmployeeEdit from "./pages/employee-edit/[id]";
import Roles from "./pages/roles";
import Permissions from "./pages/permissions";
import RolePermissions from "./pages/role-permissions";
import Features from "./pages/features";
import RoleFeatures from "./pages/role-features";
import Deliverables from "./pages/deliverables";
import NewDeliverable from "./pages/new-deliverable";
import DeliverablePage from "./pages/deliverable";
import DeliverableEdit from "./pages/deliverable-edit";
import Attendance from "./pages/attendance";
import { ThemeProvider } from "@/components/ThemeProvider";
import TaskForm from "@/pages/task-form";
import Settings from "@/pages/settings";
import Register from "@/pages/register";
import PrivateRoute from "@/components/PrivateRoute";
import Layout from "@/components/layout/layout";
import NewTaskPage from "@/pages/new-task";
import EditTaskPage from "@/pages/edit-task";
import TaskDetailPage from "@/pages/task-detail";
import DeliverableDetails from "@/pages/deliverable-details";
import Leaves from "@/pages/leaves";
import LeavesAdmin from "@/pages/leaves-admin";
import LeaveTypes from "@/pages/leave-types";
import LeaveBalances from "@/pages/leave-balances";
import MonthlyLeaveReport from "@/pages/monthly-leave-report";
import TodosPage from "@/pages/todos";
import Holidays from "@/pages/holidays";
// Bug Module Imports
import Bugs from "@/pages/bugs";
import BugDetailPage from "@/pages/bug-detail";
import NewBug from "@/pages/new-bug";
import EditBug from "@/pages/edit-bug";
// Production Bug Module Imports
import ProductionBugs from "@/pages/production-bugs";
import ProductionBugDetailPage from "@/pages/production-bug-detail";
// Test Cases Module Imports
import TestCases from "@/pages/test-cases";
import TestCaseForm from "@/pages/test-case-form";
import TestCaseDetailPage from "@/pages/test-case-detail";
import EditTestCase from "@/pages/edit-test-case";
// Appraisal Module Imports
import AppraisalCycles from "@/pages/appraisal/cycles";
import AssessmentAreas from "@/pages/appraisal/assessment-areas";
import Competencies from "@/pages/appraisal/competencies";
import MyAppraisals from "@/pages/appraisal/my-appraisals";
import AppraisalView from "@/pages/appraisal/appraisal-view";
import ManagerDashboard from "@/pages/appraisal/manager-dashboard";
import RoleQuestions from "@/pages/appraisal/role-questions";
import HrRemarks from "@/pages/appraisal/hr-remarks";
import ManagementRemarks from "@/pages/appraisal/management-remarks";
// Meeting Room Booking Module Imports
import MeetingRoomsPage from "@/pages/meeting-room/rooms";
import BookRoomPage from "@/pages/meeting-room/book";
import BookingsPage from "@/pages/meeting-room/bookings";
import EditBookingPage from "@/pages/meeting-room/edit-booking";
import BookingDetailPage from "@/pages/meeting-room/booking-detail";
import RoomDetailPage from "@/pages/meeting-room/room-detail";
// Communication Trail Module Import
import Communications from "@/pages/communications";
import ForgotPassword from "@/pages/forgot-password";
import ResetPassword from "@/pages/reset-password";
import EmployeeDetailsEdit from "./pages/employee-details-edit";
import MyProfile from "@/pages/my-profile";
// Employee Projects Module Imports
import EmployeeProjects from "./pages/employee-projects";
import EmployeeProjectsList from "./pages/employee-projects-list";
import ResourceAllocation from "./pages/resource-allocation";
// Asset Management Module Imports
import Assets from "./pages/asset-management/Assets";
import AssetDetails from "./pages/asset-management/AssetDetails";
import SystemDetails from "./pages/asset-management/SystemDetails";
import Assignments from "./pages/asset-management/Assignments";
import AssetRequestsPage from "./pages/asset-requests";
import AdminAssetRequestManagement from "./pages/admin/asset-request-management";
// Download App Page
import DownloadApp from "@/pages/download-app";
// Gantt Chart
import GanttChart from "@/pages/gantt-chart";
// PMP (Project Management Plan)
import PMPPage from "@/pages/pmp";
// Health Dashboard
import HealthDashboard from "./pages/health-dashboard";
// Import the date picker fix styles
import "./styles/date-picker-fix.css";
const queryClient = new QueryClient();
// Client redirect component to ensure client users only access production bugs
const ClientRedirect = () => {
const { userData } = useAuth();
const location = useLocation();
if (userData?.roleName?.toLowerCase() === "client") {
const isFromDashboard = location.pathname === "/" || location.pathname === "";
// If coming from dashboard, store this in session storage
if (isFromDashboard) {
sessionStorage.setItem('from-dashboard', 'true');
}
return ;
}
return ;
};
const App = () => {
// Handle mobile-specific navigation issues
useEffect(() => {
// Fix for initial render issue - ensure the correct route is loaded
const path = window.location.pathname;
if (path === "/" || path === "") {
console.log("Initial app load at root path");
}
// Fix for Capacitor web view
const handleError = (event: ErrorEvent) => {
console.error("App error:", event.error);
};
window.addEventListener('error', handleError);
return () => {
window.removeEventListener('error', handleError);
};
}, []);
return (
} />
}>
} />
}>
}>
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
} />
);
};
export default App;