import React, { useState, useCallback, useMemo } from "react"; import ProjectCard from "./projectCard/ProjectCard"; import ProjectModal from "./projectModal/ProjectModal"; import styles from "./Projects.module.css"; function Projects({ title, data }) { const [selectedProject, setSelectedProject] = useState(null); const [activeFilter, setActiveFilter] = useState("All"); const [animatingOut, setAnimatingOut] = useState(false); const openModal = (project) => { setSelectedProject(project); }; const closeModal = useCallback(() => { setSelectedProject(null); }, []); const categories = useMemo(() => { const cats = new Set(data.map((project) => project.category)); return ["All", ...Array.from(cats)]; }, [data]); const filteredProjects = useMemo(() => { if (activeFilter === "All") return data; return data.filter((project) => project.category === activeFilter); }, [data, activeFilter]); const handleFilterClick = (category) => { if (category !== activeFilter) { setAnimatingOut(true); setTimeout(() => { setActiveFilter(category); setAnimatingOut(false); }, 300); // This should match the CSS animation duration } }; return (

{title}

{categories.map((category) => ( ))}
{filteredProjects.map((project) => ( ))}
{selectedProject && }
); } export default Projects;