import React, { useEffect, useState } from 'react'
import style from '@styles/Project.module.scss'
import type {ProjectTech, Category, ProjectProps } from '../untils/ProjectProps'
interface ProjectCardProps {
project: ProjectProps;
onOpenDetails: (id: string) => void;
}
const ProjectCardTech: React.FC<{ technology: ProjectTech[] }> = ({ technology }) => (
// TECHNOLOGIES_USED
{technology.map((tech, index) => (
{tech.name}
))}
)
const CategoryBadge: React.FC<{ category: Category[] }> = ({ category }) => (
< div className={style.categoryBadgeContainer} >
{
category.map((cat, index) => (
{cat.shortName}
))}
)
const ProjectLinks: React.FC<{ links: { github?: string; demo?: string }, id: string, onOpenDetails: (id: string) => void }> = ({ links, id, onOpenDetails }) => (
{links.github && (
View Code
)}
{links.demo && (
Live Demo
)}
)
export const ProjectCard: React.FC = ({ project, onOpenDetails }) => {
const [, setHovered] = useState(false);
useEffect(() => {
const createEmbers = () => {
const embersContainer = document.querySelectorAll(`.${style.cardImgTop}`);
embersContainer.forEach((container) => {
for (let i = 0; i < 5; i++) {
const ember = document.createElement('div');
ember.className = style.emberParticle;
ember.style.left = `${Math.random() * 100}%`;
ember.style.bottom = '0';
ember.style.animationDuration = `${Math.random() * 2 + 3}s`;
ember.style.animationDelay = `${Math.random() * 3}s`;
container.appendChild(ember);
}
});
};
createEmbers();
}, []);
if (project.featured) {
return (
setHovered(true)}
onMouseLeave={() => setHovered(false)}
>
Featured
{project.title}
{project.description}
)
}
return (
setHovered(true)}
onMouseLeave={() => setHovered(false)}>
{project.title}
{project.description}
)
};