import React, { useState, useEffect } from 'react'; import { useParams, useNavigate, useLocation } from 'react-router-dom'; import { EmployeeProjectDetail } from '../types'; import { Button } from '../components/ui/button'; import { getEmployeeProjectDetailsByEmployeeId, createEmployeeProjectDetail, updateEmployeeProjectDetail } from '../services/employeeProjectDetailApi'; import { getEmployeeById } from '../services/employeeApi'; import EmployeeProjectList from '../components/employee-projects/EmployeeProjectList'; import { ArrowLeft, User } from 'lucide-react'; import { toast } from 'sonner'; import Header from '@/components/layout/header'; import Sidebar from '@/components/layout/sidebar'; import { useIsMobile } from '@/hooks/use-mobile'; const EmployeeProjects: React.FC = () => { const { id } = useParams<{ id: string }>(); const employeeId = parseInt(id || '0'); const navigate = useNavigate(); const location = useLocation(); const isMobile = useIsMobile(); const [isSidebarOpen, setIsSidebarOpen] = useState(!isMobile); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [projects, setProjects] = useState([]); const [employeeName, setEmployeeName] = useState(''); // Close sidebar on mobile when route changes useEffect(() => { if (isMobile) { setIsSidebarOpen(false); } }, [location, isMobile]); // Update sidebar state when screen size changes useEffect(() => { setIsSidebarOpen(!isMobile); }, [isMobile]); const toggleSidebar = () => { setIsSidebarOpen(!isSidebarOpen); }; const fetchProjects = async () => { setLoading(true); setError(null); try { if (employeeId) { const fetchedProjects = await getEmployeeProjectDetailsByEmployeeId(employeeId); setProjects(fetchedProjects); // Fetch employee details to display name console.log(`Fetching employee details for ID: ${employeeId}`); const employeeResponse = await getEmployeeById(employeeId); console.log('Employee response:', employeeResponse); if (employeeResponse.success && employeeResponse.data) { const name = `${employeeResponse.data.firstName} ${employeeResponse.data.lastName}`; console.log(`Setting employee name to: ${name}`); setEmployeeName(name); } else { console.log('Employee data not available or response not successful'); } } } catch (err) { console.error('Error fetching employee projects:', err); setError('Failed to load projects. Please try again.'); toast.error('Failed to load projects'); } finally { setLoading(false); } }; useEffect(() => { if (employeeId) { fetchProjects(); } else { setError('Invalid employee ID'); setLoading(false); } }, [employeeId]); const handleAddProject = async (data: Partial) => { try { await createEmployeeProjectDetail({ ...data, employeeId }); toast.success('Project added successfully'); fetchProjects(); // Refresh the list after adding return Promise.resolve(); } catch (error) { console.error('Error adding project:', error); toast.error('Failed to add project'); return Promise.reject(error); } }; const handleEditProject = async (projectId: number, data: Partial) => { try { await updateEmployeeProjectDetail(projectId, { ...data, employeeId }); toast.success('Project updated successfully'); fetchProjects(); // Refresh the list after editing return Promise.resolve(); } catch (error) { console.error('Error updating project:', error); toast.error('Failed to update project'); return Promise.reject(error); } }; return (

Projects History

{employeeName && (
{employeeName}
)}
{loading ? (
) : error ? (
{error}
) : ( // Log to confirm employee name is available before rendering component ((logValue) => { console.log('About to render EmployeeProjectList with employeeName:', logValue); return ( ); })(employeeName) )}
); }; export default EmployeeProjects;