va-tracker/src/ui/App.tsx

162 lines
5.2 KiB
TypeScript

// import React, { useEffect } from "react";
// import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom";
// import { useDispatch, useSelector } from "react-redux";
// import { AppDispatch, RootState } from "./store";
// import { loadUserFromStorage } from "./store/userSlice";
// import Login from "./pages/Login";
// import Dashboard from "./pages/Dashboard";
// import Projects from "./pages/Projects/Projects";
// import DashboardLayout from "./layout/DashboardLayout";
// import ProtectedRoute from "./routes/ProtectedRoute";
// import PublicRoute from "./routes/PublicRoute";
// import { ThemeToggle } from "./helper/ThemeToggle";
// import LeaveAndAdjustments from "./pages/LeaveAndAdjustments/LeaveAndAdjustments";
// import Timesheets from "./pages/Timesheets/Timesheets";
// import Settings from "./pages/Settings/Settings";
// import HelpSupport from "./pages/HelpSupport/HelpSupport";
// const App: React.FC = () => {
// const theme = ThemeToggle();
// const dispatch = useDispatch<AppDispatch>();
// // ✅ Get user directly from Redux
// const user = useSelector((state: RootState) => state.user.user);
// useEffect(() => {
// document.documentElement.setAttribute("data-theme", theme);
// }, [theme]);
// // ✅ Load user from localStorage into Redux when app starts
// useEffect(() => {
// dispatch(loadUserFromStorage());
// }, [dispatch]);
// console.log("App.tsx → user:", user);
// return (
// <BrowserRouter>
// <Routes>
// {/* Public Route */}
// <Route
// path="/login"
// element={
// <PublicRoute user={user}>
// <Login />
// </PublicRoute>
// }
// />
// {/* Protected Routes */}
// <Route
// path="/dashboard"
// element={
// <ProtectedRoute user={user}>
// <DashboardLayout />
// </ProtectedRoute>
// }
// >
// <Route index element={<Dashboard />} />
// <Route path="projects" element={<Projects />} />
// <Route path="leave-adjustments" element={<LeaveAndAdjustments />} />
// <Route path="timesheet" element={<Timesheets />} />
// <Route path="settings" element={<Settings />} />
// <Route path="help-support" element={<HelpSupport />} />
// </Route>
// {/* Default Redirect */}
// <Route
// path="*"
// element={<Navigate to={user ? "/dashboard" : "/login"} replace />}
// />
// </Routes>
// </BrowserRouter>
// );
// };
// export default App;
import React, { useEffect } from "react";
import { HashRouter as Router, Route, Routes, Navigate } from "react-router-dom";
import { useDispatch, useSelector } from "react-redux";
import { AppDispatch, RootState } from "./store";
import { loadUserFromStorage } from "./store/userSlice";
import Login from "./pages/Login";
import Dashboard from "./pages/Dashboard";
import Projects from "./pages/Projects/Projects";
import DashboardLayout from "./layout/DashboardLayout";
import ProtectedRoute from "./routes/ProtectedRoute";
import PublicRoute from "./routes/PublicRoute";
import LeaveAndAdjustments from "./pages/LeaveAndAdjustments/LeaveAndAdjustments";
import Timesheets from "./pages/Timesheets/Timesheets";
import Settings from "./pages/Settings/Settings";
import HelpSupport from "./pages/HelpSupport/HelpSupport";
import Vpn from "./pages/Vpn/Vpn";
import Schedule from "./pages/Schedule/Schedule";
import PaysSlips from "./pages/PaySlips/PaysSlips";
import ApplyLeaveAndAdjustmentsTime from "./pages/LeaveAndAdjustments/ApplyLeaveAndAdjustmentsTime";
const App: React.FC = () => {
const dispatch = useDispatch<AppDispatch>();
// ✅ Get user directly from Redux
const user = useSelector((state: RootState) => state.user.user);
useEffect(() => {
dispatch(loadUserFromStorage());
}, [dispatch]);
console.log("App.tsx → user:", user);
return (
<Router>
<Routes>
{/* Public Route */}
<Route
path="/login"
element={
<PublicRoute user={user}>
<Login />
</PublicRoute>
}
/>
{/* Protected Routes */}
<Route
path="/dashboard"
element={
<ProtectedRoute user={user}>
<DashboardLayout />
</ProtectedRoute>
}
>
<Route index element={<Dashboard />} />
<Route path="projects" element={<Projects />} />
<Route path="leave-adjustments" element={<LeaveAndAdjustments />} />
<Route path="leave-adjustments/apply" element={<ApplyLeaveAndAdjustmentsTime/>} />
<Route path="timesheet" element={<Timesheets />} />
<Route path="settings" element={<Settings />} />
<Route path="vpn" element={<Vpn />} />
<Route path="help-support" element={<HelpSupport />} />
<Route path="schedule" element={<Schedule/>} />
<Route path="pays-slips" element={<PaysSlips/>} />
</Route>
{/* Default Redirect */}
<Route
path="*"
element={<Navigate to={user ? "/dashboard" : "/login"} replace />}
/>
</Routes>
</Router>
);
};
export default App;