import { useEffect, useState } from 'react'; import { motion } from 'framer-motion'; import { Loader2, Code2 } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import PortfolioCard from './PortfolioCard'; import type { Project } from '../utils'; import { getAllProjects } from '../utils'; // Neuer Typ, der die originale Project-Schnittstelle erweitert type ProjectWithId = Project & { id: string }; const PortfolioGrid = () => { const { t, i18n } = useTranslation(); const [projects, setProjects] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const loadProjects = async () => { try { const projectsData = await getAllProjects(); // Ergänze das fehlende 'id'-Feld (verwende als Fallback den 'slug') const projectsDataWithId = projectsData.map((project) => ({ ...project, id: project.slug, })) as ProjectWithId[]; try { const localeModule = await import( `../../../i18n/locales/${i18n.language}/portfolio/index.ts` ); // Mische die Projekte mit lokalisierten Inhalten, sofern verfügbar const localizedProjects = projectsDataWithId.map((project) => { const localizedProject = localeModule.portfolio.projects[project.slug]; if (localizedProject) { return { ...project, ...localizedProject.meta, content: localizedProject.content, }; } return project; }); setProjects(localizedProjects); } catch { // Fallback: Verwende die Originaldaten, wenn keine Übersetzungen vorhanden sind console.warn( `Translations not found for ${i18n.language}, using default content` ); setProjects(projectsDataWithId); } } catch (error) { console.error('Error loading projects:', error); } finally { setLoading(false); } }; loadProjects(); }, [i18n.language]); const containerVariants = { hidden: {}, visible: { transition: { staggerChildren: 0.1, }, }, }; const itemVariants = { hidden: { opacity: 0, y: 20 }, visible: { opacity: 1, y: 0 }, }; if (loading) { return (

{t('portfolio.ui.loading', 'Loading projects...')}

); } if (projects.length === 0) { return (

{t('portfolio.ui.noProjects', 'No Projects Found')}

{t( 'portfolio.ui.noProjectsDescription', 'There are currently no projects to display. Check back later for updates.' )}

); } return (
{projects.map((project) => ( ))}
); }; export default PortfolioGrid;