vault-video-processor / src /features /discovery /components /featured-creators-section.tsx
dvijaykrishnan's picture
Deployment fix for HF
ceb943f
Raw
History Blame Contribute Delete
2.91 kB
// Story 7.3: Featured creators section component
'use client';
import Link from 'next/link';
import { ArrowRight } from 'lucide-react';
import { FeaturedCreatorCard } from './featured-creator-card';
import type { FeaturedCreator } from '../types/discovery.types';
interface FeaturedCreatorsSectionProps {
creators: FeaturedCreator[];
isLoading?: boolean;
}
export function FeaturedCreatorsSection({ creators, isLoading = false }: FeaturedCreatorsSectionProps) {
if (isLoading) {
return (
<section className="space-y-6">
<div className="flex items-center justify-between">
<h2 className="text-2xl font-bold">Featured Creators</h2>
</div>
<div className="grid grid-cols-2 gap-4 md:grid-cols-3 lg:grid-cols-5">
{[...Array(10)].map((_, i) => (
<div key={i} className="space-y-3">
<div className="aspect-square rounded-lg bg-muted animate-pulse" />
<div className="space-y-2">
<div className="h-4 bg-muted rounded animate-pulse" />
<div className="h-3 bg-muted rounded w-2/3 animate-pulse" />
</div>
</div>
))}
</div>
</section>
);
}
if (creators.length === 0) {
return (
<section className="space-y-6">
<div className="flex items-center justify-between">
<h2 className="text-2xl font-bold">Featured Creators</h2>
</div>
<div className="text-center py-12 text-muted-foreground">
<p>No featured creators available at this time.</p>
<p className="text-sm mt-2">Check back soon for new creators!</p>
</div>
</section>
);
}
return (
<section className="space-y-6">
{/* Section header */}
<div className="flex items-center justify-between">
<h2 className="text-2xl font-bold">Featured Creators</h2>
<Link
href="/creators"
className="flex items-center gap-1 text-sm text-primary hover:underline focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded"
>
View All Creators
<ArrowRight className="h-4 w-4" />
</Link>
</div>
{/* Creator grid - responsive layout with mobile carousel */}
<div className="grid grid-cols-2 gap-4 md:grid-cols-3 lg:grid-cols-5 md:overflow-x-visible overflow-x-auto snap-x snap-mandatory scrollbar-hide">
{creators.map((creator, index) => (
<div key={creator.id} className="snap-start">
<FeaturedCreatorCard
creator={creator}
priority={index < 5} // Prioritize first 5 for LCP
/>
</div>
))}
</div>
{/* Mobile carousel hint */}
<div className="md:hidden text-center text-xs text-muted-foreground mt-2">
Swipe to see more creators
</div>
</section>
);
}