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 (
Manage users, permissions, and view team reports
No users found
) : (| 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()} |
No time reports available for the selected date range
) : ( reports.map((teamReport) => (| User Email | Role | Total Sessions | Total Time |
|---|---|---|---|
| {userReport.userEmail} | {userReport.memberRole} | {userReport.totalSessions} | {formatDuration(userReport.totalDurationMs)} |