Barazo default frontend barazo.forum
at main 62 lines 1.8 kB view raw
1/** 2 * NewTopicButton - Link to create a new topic. 3 * Header variant: shown in site header when authenticated. 4 * Category variant: shown in category pages, pre-fills category. 5 */ 6 7'use client' 8 9import Link from 'next/link' 10import { PencilSimpleLine } from '@phosphor-icons/react' 11import { useAuth } from '@/hooks/use-auth' 12import { cn } from '@/lib/utils' 13 14interface NewTopicButtonProps { 15 variant: 'header' | 'category' 16 categorySlug?: string 17 categoryName?: string 18 className?: string 19} 20 21export function NewTopicButton({ 22 variant, 23 categorySlug, 24 categoryName, 25 className, 26}: NewTopicButtonProps) { 27 const { isAuthenticated, isLoading } = useAuth() 28 29 if (isLoading || !isAuthenticated) { 30 return null 31 } 32 33 if (variant === 'category' && categorySlug && categoryName) { 34 return ( 35 <Link 36 href={`/new?category=${encodeURIComponent(categorySlug)}`} 37 className={cn( 38 'inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground transition-colors', 39 'hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', 40 className 41 )} 42 > 43 <PencilSimpleLine className="h-4 w-4" weight="bold" aria-hidden="true" /> 44 New in {categoryName} 45 </Link> 46 ) 47 } 48 49 return ( 50 <Link 51 href="/new" 52 className={cn( 53 'inline-flex items-center gap-1.5 rounded-md bg-primary px-3 py-1.5 text-sm font-medium text-primary-foreground transition-colors', 54 'hover:bg-primary-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', 55 className 56 )} 57 > 58 <PencilSimpleLine className="h-4 w-4" weight="bold" aria-hidden="true" /> 59 New Discussion 60 </Link> 61 ) 62}