This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

semble / src / webapp / features / collections / components / collectionNavItem / CollectionNavItem.tsx
1.7 kB 59 lines
1import { useNavbarContext } from '@/providers/navbar'; 2import { Badge, NavLink } from '@mantine/core'; 3import Link from 'next/link'; 4import { usePathname } from 'next/navigation'; 5import styles from './CollectionNavItem.module.css'; 6import { isMarginUri } from '@/lib/utils/margin'; 7import MarginLogo from '@/components/MarginLogo'; 8import { CollectionAccessType } from '@semble/types'; 9 10interface Props { 11 name: string; 12 url: string; 13 cardCount: number; 14 accessType?: CollectionAccessType; 15 uri?: string; 16} 17 18export default function CollectionNavItem(props: Props) { 19 const { toggleMobile } = useNavbarContext(); 20 const pathname = usePathname(); 21 const isActive = pathname === props.url; 22 const isMargin = isMarginUri(props.uri); 23 const isOpenCollection = props.accessType === CollectionAccessType.OPEN; 24 25 return ( 26 <NavLink 27 component={Link} 28 href={props.url} 29 label={props.name} 30 active={isActive} 31 color="gray" 32 classNames={{ 33 root: isActive 34 ? `${styles.navLink} ${isOpenCollection ? styles.navLinkActiveGreen : styles.navLinkActive}` 35 : isOpenCollection 36 ? `${styles.navLink} ${styles.navLinkGreen}` 37 : styles.navLink, 38 }} 39 onClick={toggleMobile} 40 leftSection={isMargin ? <MarginLogo size={16} /> : undefined} 41 rightSection={ 42 props.cardCount > 0 ? ( 43 <Badge 44 className={ 45 isActive 46 ? isOpenCollection 47 ? styles.badgeActiveGreen 48 : styles.badgeActive 49 : styles.badge 50 } 51 circle 52 > 53 {props.cardCount} 54 </Badge> 55 ) : null 56 } 57 /> 58 ); 59}