import React, { useState, useEffect } from 'react'; import { useAuth } from '../context/AuthContext'; import teamService from '../services/teamService'; import './Admin.css'; const Admin = () => { const { user, userTeams, loadUserTeams } = useAuth(); // User Management State const [users, setUsers] = useState([]); const [userLoading, setUserLoading] = useState(false); const [userError, setUserError] = useState(''); // Permission Management State const [selectedUser, setSelectedUser] = useState(null); const [selectedTeam, setSelectedTeam] = useState(null); const [permissionLoading, setPermissionLoading] = useState(false); const [permissionError, setPermissionError] = useState(''); // Time Reports State const [reports, setReports] = useState([]); const [reportLoading, setReportLoading] = useState(false); const [reportError, setReportError] = useState(''); const [reportStartDate, setReportStartDate] = useState(getDateString(new Date(Date.now() - 30 * 24 * 60 * 60 * 1000))); const [reportEndDate, setReportEndDate] = useState(getDateString(new Date())); // Load all users on mount useEffect(() => { fetchUsers(); }, []); // Load initial reports useEffect(() => { loadTeamReports(); }, []); // Helper function to format dates function getDateString(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } // ============ USER MANAGEMENT ============ const fetchUsers = async () => { setUserLoading(true); setUserError(''); try { const allUsers = await teamService.getAllUsers(); setUsers(allUsers); } catch (error) { console.error('Error fetching users:', error); setUserError('Failed to load users'); } finally { setUserLoading(false); } }; // ============ PERMISSION MANAGEMENT ============ const loadTeamMembers = async (teamId) => { try { const members = await teamService.getTeamMembers(teamId); console.log('Team members:', members); } catch (error) { console.error('Error loading team members:', error); } }; const updateMemberRole = async (teamId, userId, newRole) => { if (!selectedTeam || !selectedUser) { setPermissionError('Please select a team and user first'); return; } setPermissionLoading(true); setPermissionError(''); try { await teamService.updateMemberRole(teamId, userId, newRole); setPermissionError(''); // Reload teams to reflect changes await loadUserTeams(user.id); alert('Permission updated successfully'); setSelectedUser(null); setSelectedTeam(null); } catch (error) { console.error('Error updating member role:', error); setPermissionError('Failed to update permissions'); } finally { setPermissionLoading(false); } }; // ============ TIME REPORTS ============ const loadTeamReports = async () => { setReportLoading(true); setReportError(''); try { const startDate = new Date(reportStartDate); const endDate = new Date(reportEndDate); endDate.setHours(23, 59, 59, 999); const reportsData = await teamService.getAllTeamReports(startDate, endDate); setReports(reportsData); } catch (error) { console.error('Error loading reports:', error); setReportError('Failed to load time reports'); } finally { setReportLoading(false); } }; const handleReportDateChange = () => { loadTeamReports(); }; // ============ RENDER ============ return (

Admin Panel

Manage users, permissions, and view team reports

{/* USER MANAGEMENT SECTION */}

User Management

{userError &&
{userError}
}
{users.length === 0 ? (

No users found

) : ( {users.map((usr) => ( ))}
Email Full Name Company Global Role Created At
{usr.email || 'N/A'} {usr.fullName || 'N/A'} {usr.company || 'N/A'} {usr.globalRole} {new Date(usr.createdAt).toLocaleDateString()}
)}
{/* PERMISSION MANAGEMENT SECTION */}

Permission Management

{permissionError &&
{permissionError}
}
{/* TIME REPORTS SECTION */}

Team Time Reports

setReportStartDate(e.target.value)} /> to setReportEndDate(e.target.value)} />
{reportError &&
{reportError}
}
{reports.length === 0 ? (

No time reports available for the selected date range

) : ( reports.map((teamReport) => (

{teamReport.teamName}

{teamReport.userReports.map((userReport, idx) => ( ))}
User Email Role Total Sessions Total Time
{userReport.userEmail} {userReport.memberRole} {userReport.totalSessions} {formatDuration(userReport.totalDurationMs)}
Team Total Time: {formatDuration(teamReport.totalDurationMs)}
)) )}
); }; // Helper function to format duration in milliseconds function formatDuration(ms) { if (!ms || ms === 0) return '0h 0m'; const hours = Math.floor(ms / (1000 * 60 * 60)); const minutes = Math.floor((ms % (1000 * 60 * 60)) / (1000 * 60)); if (hours === 0) return `${minutes}m`; return `${hours}h ${minutes}m`; } export default Admin;