From 6040fa238d5fe048364ae9ff45d807817edc0f38 Mon Sep 17 00:00:00 2001 From: JaiPandey425 Date: Wed, 5 Nov 2025 15:48:29 +0530 Subject: [PATCH] leave and adjustments --- src/electron/main.ts | 2 + src/ui/App.tsx | 61 +- .../{ThemeToggle.jsx => ThemeToggle.tsx} | 2 +- ...ashboardLayout.jsx => DashboardLayout.tsx} | 22 +- src/ui/pages/Dashboard.jsx | 530 ----------------- src/ui/pages/Dashboard.tsx | 343 +++++++++++ .../LeaveAndAdjustments.tsx | 546 ++++++++++++++++++ src/ui/pages/{Login.jsx => Login.tsx} | 43 +- .../Projects/{Projects.jsx => Projects.tsx} | 0 src/ui/routes/ProtectedRoute.jsx | 12 - src/ui/routes/ProtectedRoute.tsx | 14 + src/ui/routes/PublicRoute.jsx | 12 - src/ui/routes/PublicRoute.tsx | 14 + 13 files changed, 997 insertions(+), 604 deletions(-) rename src/ui/helper/{ThemeToggle.jsx => ThemeToggle.tsx} (91%) rename src/ui/layout/{DashboardLayout.jsx => DashboardLayout.tsx} (88%) delete mode 100644 src/ui/pages/Dashboard.jsx create mode 100644 src/ui/pages/Dashboard.tsx create mode 100644 src/ui/pages/LeaveAndAdjustments/LeaveAndAdjustments.tsx rename src/ui/pages/{Login.jsx => Login.tsx} (84%) rename src/ui/pages/Projects/{Projects.jsx => Projects.tsx} (100%) delete mode 100644 src/ui/routes/ProtectedRoute.jsx create mode 100644 src/ui/routes/ProtectedRoute.tsx delete mode 100644 src/ui/routes/PublicRoute.jsx create mode 100644 src/ui/routes/PublicRoute.tsx diff --git a/src/electron/main.ts b/src/electron/main.ts index de4a9cb..8e2a535 100644 --- a/src/electron/main.ts +++ b/src/electron/main.ts @@ -16,6 +16,8 @@ app.on('ready', async () => { // disables default system frame (dont do this if you want a proper working menu bar) frame: process.platform === 'darwin' ? false : true, }); + + if (isDev()) { mainWindow.loadURL('http://localhost:5123'); } else { diff --git a/src/ui/App.tsx b/src/ui/App.tsx index a477a30..60436b6 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -1,25 +1,40 @@ -import React, { useEffect, useState } from 'react' -import { BrowserRouter, Route, Routes, Navigate } from 'react-router-dom' -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 React, { useEffect, useState } from "react"; +import { BrowserRouter, Route, Routes, Navigate } from "react-router-dom"; +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"; -const App = () => { - const theme = ThemeToggle() - const [user, setUser] = useState(null) +// ✅ Define User type (customize based on your structure) +interface User { + email: string; + password: string; +} +const App: React.FC = () => { + const theme = ThemeToggle(); + const [user, setUser] = useState(null); + + // ✅ Apply theme useEffect(() => { - document.documentElement.setAttribute('data-theme', theme) - }, [theme]) + document.documentElement.setAttribute("data-theme", theme); + }, [theme]); + // ✅ Load user from localStorage useEffect(() => { - const storedUser = localStorage.getItem('user') - if (storedUser) setUser(JSON.parse(storedUser)) - }, []) + const storedUser = localStorage.getItem("user"); + if (storedUser) { + try { + setUser(JSON.parse(storedUser)); + } catch (err) { + console.error("Invalid user in localStorage", err); + } + } + }, []); return ( @@ -45,13 +60,17 @@ const App = () => { > } /> } /> + } /> {/* Default Redirect */} - } /> + } + /> - ) -} + ); +}; -export default App +export default App; diff --git a/src/ui/helper/ThemeToggle.jsx b/src/ui/helper/ThemeToggle.tsx similarity index 91% rename from src/ui/helper/ThemeToggle.jsx rename to src/ui/helper/ThemeToggle.tsx index d66fb8b..050d963 100644 --- a/src/ui/helper/ThemeToggle.jsx +++ b/src/ui/helper/ThemeToggle.tsx @@ -11,7 +11,7 @@ export const ThemeToggle = () => { setTheme(darkQuery.matches ? "dark" : "light"); // Listen for changes - const handleChange = (e) => { + const handleChange = (e: MediaQueryListEvent) => { setTheme(e.matches ? "dark" : "light"); }; diff --git a/src/ui/layout/DashboardLayout.jsx b/src/ui/layout/DashboardLayout.tsx similarity index 88% rename from src/ui/layout/DashboardLayout.jsx rename to src/ui/layout/DashboardLayout.tsx index 99909e8..4ed9e76 100644 --- a/src/ui/layout/DashboardLayout.jsx +++ b/src/ui/layout/DashboardLayout.tsx @@ -1,8 +1,19 @@ import React, { useState, useEffect } from 'react' import { Outlet, NavLink, useNavigate, useLocation } from 'react-router-dom' -import { Bell, Menu, LogOut, User, Settings, Home, FolderKanban, X } from 'lucide-react' +import { Bell, Menu, LogOut, User, Settings, Home, FolderKanban, X, CalendarDays } from 'lucide-react' -const DashboardLayout = ({ user, setUser }) => { + +interface User { + email: string; + password: string; +} + +interface DashboardLayoutProps { + user: User | null; + setUser: React.Dispatch>; +} + +const DashboardLayout: React.FC = ({ setUser }) => { const [isSidebarOpen, setSidebarOpen] = useState(true) const [isMobile, setIsMobile] = useState(window.innerWidth < 768) const navigate = useNavigate() @@ -36,6 +47,7 @@ const DashboardLayout = ({ user, setUser }) => { const menuItems = [ { label: 'Dashboard', path: '/dashboard', icon: , exact: true }, { label: 'Projects', path: '/dashboard/projects', icon: }, + { label: 'Leave & Adjustments', path: '/dashboard/leave-adjustments', icon: }, ] return ( @@ -44,7 +56,7 @@ const DashboardLayout = ({ user, setUser }) => {