import React, { useState, useEffect, useContext } from 'react'; import { pb } from '../../lib/pocketbase'; import TimeList from '../TimeEntry/TimeList'; import BalanceCard from '../TimeEntry/BalanceCard'; import { LanguageContext } from '../../contexts/LanguageContext'; const SupervisorDashboard = ({ user }) => { const { t } = useContext(LanguageContext); const [employees, setEmployees] = useState([]); const [selectedEmployeeId, setSelectedEmployeeId] = useState(null); const [employeeEntries, setEmployeeEntries] = useState([]); useEffect(() => { const loadEmployees = async () => { try { // Find users who have assigned ME as supervisor const result = await pb.collection('users').getList(1, 50, { filter: `supervisor = "${user.id}"`, }); setEmployees(result.items); } catch (err) { console.error("Error loading employees", err); } }; if (user.is_supervisor) { loadEmployees(); } }, [user.id, user.is_supervisor]); useEffect(() => { if (selectedEmployeeId) { const loadEntries = async () => { try { const result = await pb.collection('time_entries').getList(1, 50, { filter: `user = "${selectedEmployeeId}"`, sort: '-date', }); setEmployeeEntries(result.items); } catch (err) { console.error("Error loading employee entries", err); } }; loadEntries(); } else { setEmployeeEntries([]); } }, [selectedEmployeeId]); if (!user.is_supervisor) return null; return (

{t('sup.title')}

{/* Employee List */}

{t('sup.my_team')}

{employees.length === 0 ? (

{t('sup.no_employees')}

) : (
    {employees.map(emp => (
  • ))}
)}
{/* Employee Details */}
{selectedEmployeeId ? (

{t('dash.employee_viewing')}: {employees.find(e => e.id === selectedEmployeeId)?.name || 'Employee'}

{ // Trigger reload of this employee's entries // We can just toggle selectedEmployeeId momentarily or just use another state? // Better: add a refresh dependency to the effect. // Actually, let's keep it simple: just re-set the ID to trigger effect? No that's ugly. // Let's just re-fetch in place or add a version state. // For now, if supervisor deletes, we might want to refresh. // But Wait, does supervisor have permission to delete? // User said "delete a time entry owned by the user". // Assuming supervisor can too, or we just rely on PB permissions. // I'll add a simple force refresh mechanism. const currentId = selectedEmployeeId; setSelectedEmployeeId(null); setTimeout(() => setSelectedEmployeeId(currentId), 50); }} />
) : (
{t('sup.select_prompt')}
)}
); }; export default SupervisorDashboard;