import { CsharpOriginal, JavaOriginal, PythonOriginal, JavascriptOriginal, KotlinOriginal, COriginal, GoOriginal, RubyOriginal, SwiftOriginal, CplusplusOriginal, } from "devicons-react"; import { Card, CardContent, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { cn } from "@/lib/utils"; import { Snippet } from "@prisma/client"; import { Badge } from "@/components/ui/badge"; import { ScrollArea } from "@/components/ui/scroll-area"; const colors = { green: "bg-green-50", gray: "bg-gray-50", red: "bg-red-50", yellow: "bg-yellow-50", purple: "bg-purple-50", blue: "bg-blue-50", orange: "bg-orange-50", } as const; const languageIcons = { c: { icon: COriginal, color: colors.green }, cpp: { icon: CplusplusOriginal, color: colors.gray }, java: { icon: JavaOriginal, color: colors.red }, python: { icon: PythonOriginal, color: colors.yellow }, javascript: { icon: JavascriptOriginal, color: colors.yellow }, csharp: { icon: CsharpOriginal, color: colors.purple }, go: { icon: GoOriginal, color: colors.blue }, ruby: { icon: RubyOriginal, color: colors.red }, swift: { icon: SwiftOriginal, color: colors.orange }, kotlin: { icon: KotlinOriginal, color: colors.blue }, } as const; type Language = keyof typeof languageIcons; interface SnippetCardProps extends React.ComponentProps { snippet: Snippet; } export function SnippetCard({ snippet, className, ...props }: SnippetCardProps) { const languageInfo = languageIcons[snippet.language as Language]; const createdAt = new Date(snippet.createdAt); const updatedAt = new Date(snippet.updatedAt); const isUpdated = createdAt.getTime() !== updatedAt.getTime(); const renderLanguageBadge = () => (
{languageInfo?.icon && } {snippet.language}
); const renderTimestamp = () => ( {isUpdated ? "updatedAt: " : "createdAt: "} {isUpdated ? updatedAt.toLocaleString() : createdAt.toLocaleString()} ); return ( {snippet.title} {renderLanguageBadge()}
            {snippet.code}
          
{renderTimestamp()}
); }