Spaces:
Sleeping
Sleeping
import { buttonVariants } from "@/components/ui/button"; | |
import { | |
Card, | |
CardContent, | |
CardDescription, | |
CardFooter, | |
CardHeader, | |
CardTitle, | |
} from "@/components/ui/card"; | |
import { Facebook, Instagram, Linkedin } from "lucide-react"; | |
interface TeamProps { | |
imageUrl: string; | |
name: string; | |
position: string; | |
socialNetworks: SociaNetworkslProps[]; | |
} | |
interface SociaNetworkslProps { | |
name: string; | |
url: string; | |
} | |
const teamList: TeamProps[] = [ | |
{ | |
imageUrl: "https://i.pravatar.cc/150?img=35", | |
name: "Emma Smith", | |
position: "Product Manager", | |
socialNetworks: [ | |
{ name: "Linkedin", url: "http://linkedin.com" }, | |
{ | |
name: "Facebook", | |
url: "https://www.facebook.com/", | |
}, | |
{ | |
name: "Instagram", | |
url: "https://www.instagram.com/", | |
}, | |
], | |
}, | |
{ | |
imageUrl: "https://i.pravatar.cc/150?img=60", | |
name: "John Doe", | |
position: "Tech Lead", | |
socialNetworks: [ | |
{ name: "Linkedin", url: "http://linkedin.com" }, | |
{ | |
name: "Facebook", | |
url: "https://www.facebook.com/", | |
}, | |
{ | |
name: "Instagram", | |
url: "https://www.instagram.com/", | |
}, | |
], | |
}, | |
{ | |
imageUrl: "https://i.pravatar.cc/150?img=36", | |
name: "Ashley Ross", | |
position: "Frontend Developer", | |
socialNetworks: [ | |
{ name: "Linkedin", url: "http://linkedin.com" }, | |
{ | |
name: "Instagram", | |
url: "https://www.instagram.com/", | |
}, | |
], | |
}, | |
{ | |
imageUrl: "https://i.pravatar.cc/150?img=17", | |
name: "Bruce Rogers", | |
position: "Backend Developer", | |
socialNetworks: [ | |
{ name: "Linkedin", url: "http://linkedin.com" }, | |
{ | |
name: "Facebook", | |
url: "https://www.facebook.com/", | |
}, | |
], | |
}, | |
]; | |
export const Team = () => { | |
const socialIcon = (iconName: string) => { | |
switch (iconName) { | |
case "Linkedin": | |
return <Linkedin size="20" />; | |
case "Facebook": | |
return <Facebook size="20" />; | |
case "Instagram": | |
return <Instagram size="20" />; | |
} | |
}; | |
return ( | |
<section | |
id="team" | |
className="container py-24 sm:py-32" | |
> | |
<h2 className="text-3xl md:text-4xl font-bold"> | |
<span className="bg-gradient-to-b from-primary/60 to-primary text-transparent bg-clip-text"> | |
Our Dedicated{" "} | |
</span> | |
Crew | |
</h2> | |
<p className="mt-4 mb-10 text-xl text-muted-foreground"> | |
Lorem ipsum dolor sit amet consectetur, adipisicing elit. Veritatis | |
dolor pariatur sit! | |
</p> | |
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8 gap-y-10"> | |
{teamList.map( | |
({ imageUrl, name, position, socialNetworks }: TeamProps) => ( | |
<Card | |
key={name} | |
className="bg-muted/50 relative mt-8 flex flex-col justify-center items-center" | |
> | |
<CardHeader className="mt-8 flex justify-center items-center pb-2"> | |
<img | |
src={imageUrl} | |
alt={`${name} ${position}`} | |
className="absolute -top-12 rounded-full w-24 h-24 aspect-square object-cover" | |
/> | |
<CardTitle className="text-center">{name}</CardTitle> | |
<CardDescription className="text-primary"> | |
{position} | |
</CardDescription> | |
</CardHeader> | |
<CardContent className="text-center pb-2"> | |
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p> | |
</CardContent> | |
<CardFooter> | |
{socialNetworks.map(({ name, url }: SociaNetworkslProps) => ( | |
<div key={name}> | |
<a | |
href={url} | |
target="_blank" | |
className={buttonVariants({ | |
variant: "ghost", | |
size: "sm", | |
})} | |
> | |
<span className="sr-only">{name} icon</span> | |
{socialIcon(name)} | |
</a> | |
</div> | |
))} | |
</CardFooter> | |
</Card> | |
) | |
)} | |
</div> | |
</section> | |
); | |
}; | |