import { useState, useEffect } from "react"; import { Link } from "wouter"; import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; import { ArrowLeft, TrendingUp, Code, Star, Eye, Heart, Share2, Loader2 } from "lucide-react"; import { supabase } from "@/lib/supabase"; import { useAuth } from "@/lib/auth"; interface CodeSnippet { id: string; creator_id: string; title: string; code: string; description?: string; language: string; category: string; creator: string; likes: number; views: number; tags: string[]; created_at?: Date; } export default function CodeGallery() { const { user } = useAuth(); const [snippets, setSnippets] = useState([]); const [selectedSnippet, setSelectedSnippet] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { fetchSnippets(); }, []); const fetchSnippets = async () => { try { const { data, error } = await supabase .from('code_gallery') .select('*') .eq('is_public', true) .order('created_at', { ascending: false }); if (!error && data) { setSnippets(data.map(s => ({ ...s, creator: s.creator_id, tags: Array.isArray(s.tags) ? s.tags : [] }))); if (data.length > 0) setSelectedSnippet(data[0] as any); } } catch (err) { console.error('Error fetching snippets:', err); } finally { setLoading(false); } }; return (
{/* Header */}

Code Gallery

{/* Snippet List */}

Popular Snippets

{snippets.map((snippet) => ( ))}
{/* Selected Snippet Preview */} {selectedSnippet && (
{/* Title & Creator */}

{selectedSnippet.title}

by {selectedSnippet.creator}

{/* Language & Category */}
{selectedSnippet.language.toUpperCase()} {selectedSnippet.category}
{/* Tags */}
{selectedSnippet.tags.map((tag) => ( #{tag} ))}
{/* Code Block */}
{selectedSnippet.code}
{/* Stats & Actions */}
{selectedSnippet.views} views
{selectedSnippet.likes} likes
)}
); }