-
+
@@ -417,11 +398,10 @@ const LeaveAndAdjustments: React.FC = () => {
{/* Adjustment Submissions Tab */}
{activeTab === 'adjustment' && (
+
+ {/* Header */}
-
-
Time Adjustments
-
-
+
Time Adjustments
+ {/* Table */}
- | Date |
- Logged Hours |
- Actions |
+ Date |
+ Logged Hours |
+ Actions |
{adjustmentData.map((entry) => (
-
- |
- {new Date(entry.date).toLocaleDateString('en-US', {
- weekday: 'short',
- year: 'numeric',
- month: 'short',
- day: 'numeric'
+ |
+ |
+ {new Date(entry.date).toLocaleDateString("en-US", {
+ weekday: "short",
+ year: "numeric",
+ month: "short",
+ day: "numeric",
})}
|
- {editingId === entry.id ? (
- setEditHours(e.target.value)}
- className="input input-bordered input-sm w-28 focus:input-primary"
- min="0"
- max="24"
- step="0.5"
- autoFocus
- />
- ) : (
-
- {entry.loggedHours} hours
-
- )}
+
+ {entry.loggedHours} hrs
+
|
- {editingId === entry.id ? (
-
-
-
-
- ) : (
-
|
))}
@@ -509,10 +467,21 @@ const LeaveAndAdjustments: React.FC = () => {
+ {/* No Data */}
{adjustmentData.length === 0 && (
-
-
+
+
No time entries found for this period
@@ -523,6 +492,50 @@ const LeaveAndAdjustments: React.FC = () => {
+ {/* View Status */}
+
+
View Status
+
+
+ {/* Table Head */}
+
+
+ | # |
+ Date |
+ Logged Hours |
+ Task |
+ Status |
+
+
+
+ {/* Table Body */}
+
+ {data.map((log, index) => (
+
+ | {index + 1} |
+ {log.date} |
+ {log.hours} hrs |
+ {log.task} |
+
+
+ {log.status}
+
+ |
+
+ ))}
+
+
+
+
+
);
};
diff --git a/src/ui/pages/Projects/Projects.tsx b/src/ui/pages/Projects/Projects.tsx
index 9abd0eb..fddada0 100644
--- a/src/ui/pages/Projects/Projects.tsx
+++ b/src/ui/pages/Projects/Projects.tsx
@@ -1,9 +1,87 @@
-import React from 'react'
+import React from "react";
-const Projects = () => {
+const projectsData = [
+ { id: 1, projectName: "Employee Tracker", clientName: "TechCorp Pvt Ltd", status: "Active", action: "Start Tracking" },
+ { id: 2, projectName: "Sales Dashboard", clientName: "BlueEdge Analytics", status: "Pending", action: "Start Tracking" },
+ { id: 3, projectName: "Inventory System", clientName: "LogiFlow Inc", status: "Completed", action: "View Report" },
+ { id: 4, projectName: "CRM Upgrade", clientName: "NextWave Solutions", status: "On Hold", action: "Resume" },
+ { id: 5, projectName: "Mobile App Redesign", clientName: "PixelFusion", status: "Active", action: "Start Tracking" },
+ { id: 6, projectName: "E-Commerce Backend", clientName: "ShopEasy", status: "Pending", action: "Start Tracking" },
+ { id: 7, projectName: "Finance Tracker", clientName: "MoneyWise", status: "Active", action: "Start Tracking" },
+ { id: 8, projectName: "Helpdesk Portal", clientName: "ServePro", status: "Completed", action: "View Report" },
+ { id: 9, projectName: "Marketing Automation", clientName: "AdBoost", status: "Active", action: "Start Tracking" },
+ { id: 10, projectName: "Data Pipeline", clientName: "CloudWave", status: "On Hold", action: "Resume" },
+ { id: 11, projectName: "Support Chatbot", clientName: "SmartServe", status: "Active", action: "Start Tracking" },
+ { id: 12, projectName: "Payroll System", clientName: "PeopleFirst HR", status: "Pending", action: "Start Tracking" },
+ { id: 13, projectName: "IoT Dashboard", clientName: "SensorGrid", status: "Completed", action: "View Report" },
+ { id: 14, projectName: "Security Portal", clientName: "SafeNet", status: "Active", action: "Start Tracking" },
+ { id: 15, projectName: "Social Media Tool", clientName: "Buzzify", status: "Pending", action: "Start Tracking" },
+ { id: 16, projectName: "AI Model Trainer", clientName: "NeuroTech", status: "On Hold", action: "Resume" },
+ { id: 17, projectName: "Project Tracker", clientName: "TaskFlow", status: "Active", action: "Start Tracking" },
+ { id: 18, projectName: "Booking Portal", clientName: "GoTravel", status: "Completed", action: "View Report" },
+ { id: 19, projectName: "Time Logger", clientName: "Clockify Pro", status: "Active", action: "Start Tracking" },
+ { id: 20, projectName: "Analytics Engine", clientName: "DataStream", status: "Pending", action: "Start Tracking" },
+];
+
+const Projects: React.FC = () => {
return (
-
Projects
- )
-}
+
+
+ Projects
+
-export default Projects
\ No newline at end of file
+
+
+ {/* Table Head */}
+
+
+ | # |
+ Project Name |
+ Client Name |
+ Status |
+ Action |
+
+
+
+ {/* Table Body */}
+
+ {projectsData.map((project) => (
+
+ | {project.id} |
+ {project.projectName} |
+ {project.clientName} |
+
+
+ {project.status}
+
+ |
+
+
+ Edit
+
+ |
+
+ ))}
+
+
+
+
+ );
+};
+
+export default Projects;
diff --git a/src/ui/pages/Settings/Settings.tsx b/src/ui/pages/Settings/Settings.tsx
new file mode 100644
index 0000000..6448ccd
--- /dev/null
+++ b/src/ui/pages/Settings/Settings.tsx
@@ -0,0 +1,109 @@
+import React from "react";
+import { User, Mail, Lock, Edit2, Shield, CalendarDays } from "lucide-react";
+
+interface UserProfile {
+ name: string;
+ email: string;
+ role: string;
+ employeeId: string;
+ joinDate: string;
+ department: string;
+ profileImage?: string;
+}
+
+const userData: UserProfile = {
+ name: "Jai Pandey",
+ email: "jai.pandey@vatechcorp.com",
+ role: "Frontend Developer",
+ employeeId: "EMP-1023",
+ joinDate: "2022-07-15",
+ department: "Engineering",
+ profileImage: "https://ui-avatars.com/api/?name=Jai+Pandey&background=random",
+};
+
+const Settings: React.FC = () => {
+ return (
+
+ {/* Header */}
+
+
+ Profile Settings
+
+
+ Edit Profile
+
+
+
+ {/* Profile Section */}
+
+ {/* Profile Picture */}
+
+
+
{userData.name}
+
{userData.role}
+
+
+
+
+ {/* Details Section */}
+
+
+
+ Email
+
+
{userData.email}
+
+
+
+
+ Role
+
+
{userData.role}
+
+
+
+
+ Employee ID
+
+
{userData.employeeId}
+
+
+
+
+ Joining Date
+
+
{userData.joinDate}
+
+
+
+
+ Department
+
+
{userData.department}
+
+
+
+
+ {/* Account Settings */}
+
+
Account Security
+
+
+
+ Password last changed on{" "}
+ Aug 12, 2024
+
+
+ Change Password
+
+
+
+
+ );
+};
+
+export default Settings;
diff --git a/src/ui/pages/Timesheets/Timesheets.tsx b/src/ui/pages/Timesheets/Timesheets.tsx
new file mode 100644
index 0000000..7bf0563
--- /dev/null
+++ b/src/ui/pages/Timesheets/Timesheets.tsx
@@ -0,0 +1,122 @@
+import React from "react";
+import { CalendarDays, Clock, FileText, CheckCircle, XCircle } from "lucide-react";
+
+interface TimesheetEntry {
+ id: number;
+ date: string;
+ project: string;
+ hours: number;
+ status: "Approved" | "Pending" | "Rejected";
+ remarks?: string;
+}
+
+const timesheetData: TimesheetEntry[] = [
+ { id: 1, date: "2025-10-28", project: "Employee Tracker", hours: 8, status: "Approved", remarks: "Full day" },
+ { id: 2, date: "2025-10-29", project: "CRM Upgrade", hours: 6, status: "Pending", remarks: "Client call delays" },
+ { id: 3, date: "2025-10-30", project: "Sales Dashboard", hours: 7, status: "Rejected", remarks: "Missing details" },
+ { id: 4, date: "2025-10-31", project: "Finance Tracker", hours: 9, status: "Approved", remarks: "Overtime" },
+ { id: 5, date: "2025-11-01", project: "AI Model Trainer", hours: 8, status: "Approved", remarks: "Normal day" },
+];
+
+const Timesheets: React.FC = () => {
+ const totalHours = timesheetData.reduce((acc, t) => acc + t.hours, 0);
+ const approvedCount = timesheetData.filter((t) => t.status === "Approved").length;
+
+ return (
+
+ {/* Header */}
+
+
+ {/* Summary Cards */}
+
+
+
+
+
Total Logged Hours
+
{totalHours} hrs
+
+
+
+
+
+
+
+
+
Approved Days
+
{approvedCount}
+
+
+
+
+
+
+
+
+
Pending Days
+
+ {timesheetData.length - approvedCount}
+
+
+
+
+
+
+
+ {/* Timesheet Table */}
+
+
+
+
+ | # |
+ Date |
+ Project |
+ Hours |
+ Status |
+ Remarks |
+
+
+
+ {timesheetData.map((entry) => (
+
+ | {entry.id} |
+ {entry.date} |
+ {entry.project} |
+ {entry.hours} hrs |
+
+
+ {entry.status}
+
+ |
+ {entry.remarks || "-"} |
+
+ ))}
+
+
+
+
+ {/* Footer Summary */}
+
+
+ Showing {timesheetData.length} entries
+
+
+ Last updated: {new Date().toLocaleDateString()}
+
+
+
+ );
+};
+
+export default Timesheets;