Barazo default frontend
barazo.forum
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}