brawlset/app/components/ui/navigation-bar.tsx

454 lines
21 KiB
TypeScript
Raw Normal View History

2024-11-18 23:03:05 +00:00
'use client'
import {
2024-11-19 15:04:41 +00:00
DropdownMenu,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuPortal,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
2024-11-18 23:03:05 +00:00
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { IconUserFilled } from "@tabler/icons-react"
import { IconChevronDown } from "@tabler/icons-react"
import { Black, Blue, Green, White, Red, Colorless } from "@/components/ui/mana-icons"
2025-01-27 11:40:17 +00:00
import { useEffect, useState } from 'react'
2024-11-18 23:03:05 +00:00
interface NavigationProps {
isLoggedIn: boolean,
username: string
}
2025-01-27 11:40:17 +00:00
interface bsetJsonObject {
name: string,
sanitized_name: string,
set_codes: string[],
icons: string[]
}
2024-11-18 23:03:05 +00:00
export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
2025-01-27 11:40:17 +00:00
const [bsetsList, setBsetsList] = useState<bsetJsonObject[]>([])
useEffect(() => {
fetch('/api/json/misc/bsets.json').then((res) => {
2025-01-27 11:40:17 +00:00
if(res.status == 200) {
res.json().then((data) => {
setBsetsList(data)
console.log(data)
})
}
})
}, [])
2024-11-18 23:03:05 +00:00
return (
<div className="flex z-50 flex-row p-4 gap-4 w-full bg-white fixed top-0 left-0 items-center justify-between">
2024-11-18 23:03:05 +00:00
<div className="flex flex-row gap-4 items-center">
<a className="flex flex-row gap-2 items-center" href="/">
<img src="/assets/logo.png" className="h-8" />
<span className="font-beleren text-3xl mt-2 bg-gradient-to-r from-black to-orange-500 bg-clip-text text-transparent">BrawlSet</span>
</a>
</div>
<div className="flex flex-row gap-4 items-center">
2024-11-19 15:04:41 +00:00
<DropdownMenu>
<DropdownMenuTrigger asChild>
<span className="text-stone-500 cursor-pointer flex flex-row gap-1 items-center">Commandants <IconChevronDown className="h-4"/></span>
2024-11-19 15:04:41 +00:00
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56">
<DropdownMenuGroup>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a href="/commander/top">Top commandants</a>
2024-11-19 15:04:41 +00:00
</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
2025-01-27 11:40:17 +00:00
<span>Mono</span>
2024-11-19 15:04:41 +00:00
</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/white">
2024-12-05 16:08:50 +00:00
<White className="h-4 w-4"/>
2025-01-27 11:40:17 +00:00
<span>White</span>
2024-12-05 16:08:50 +00:00
</a>
2024-11-19 15:04:41 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/blue">
2024-12-05 16:08:50 +00:00
<Blue className="h-4 w-4"/>
<span>Bleu</span>
</a>
2024-11-19 15:04:41 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/black">
2024-12-05 16:08:50 +00:00
<Black className="h-4 w-4"/>
<span>Noir</span>
</a>
2024-11-19 15:04:41 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/red">
2024-12-05 16:08:50 +00:00
<Red className="h-4 w-4"/>
<span>Rouge</span>
</a>
2024-11-19 15:04:41 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/green">
2024-12-05 16:08:50 +00:00
<Green className="h-4 w-4"/>
<span>Vert</span>
</a>
2024-11-19 15:04:41 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/colorless">
2024-12-05 16:08:50 +00:00
<Colorless className="h-4 w-4"/>
<span>Incolor</span>
</a>
2024-11-19 15:04:41 +00:00
</DropdownMenuItem>
2024-11-19 16:47:38 +00:00
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<span>2 couleurs</span>
</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/azorius">
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Azorius</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/dimir">
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Dimir</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/rakdos">
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Rakdos</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/gruul">
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Gruul</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/selesnya">
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Selesnya</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/orzhov">
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Orzhov</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/izzet">
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Izzet</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/golgari">
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Golgari</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/boros">
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Boros</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/simic">
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Simic</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<span>3 couleurs</span>
</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/esper">
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Esper</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/grixis">
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Grixis</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/jund">
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Jund</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/naya">
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Naya</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/bant">
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Bant</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/abzan">
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Abzan</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/jeskai">
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Jeskai</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/sultai">
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Sultai</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/mardu">
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Mardu</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/temur">
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Temur</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<span>4+ couleurs</span>
</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/yore-tiller">
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Yore-Tiller</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/glint-eye">
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Glint-Eye</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/dune-brood">
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Dune-Brood</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/ink-treader">
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Ink-Treader</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/witch-maw">
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>Witch-Maw</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
<DropdownMenuItem>
2025-01-27 11:40:17 +00:00
<a className="flex flex-row gap-2 items-center" href="/commander/five-color">
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
2025-01-27 11:40:17 +00:00
<span>5 couleurs</span>
</a>
2024-11-19 16:47:38 +00:00
</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
2025-01-27 11:40:17 +00:00
<DropdownMenu>
<DropdownMenuTrigger asChild>
<span className="text-stone-500 cursor-pointer flex flex-row gap-1 items-center">BSets <IconChevronDown className="h-4"/></span>
2025-01-27 11:40:17 +00:00
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56">
<DropdownMenuGroup>
{ bsetsList.length == 0 && (
<DropdownMenuItem>
<span>Loading</span>
</DropdownMenuItem>
)}
{ bsetsList.length != 0 && bsetsList.slice(0,7).map((bset) => (
<DropdownMenuItem>
<a href={"/bset/" + bset.sanitized_name} className="flex flex-row gap-2 items-center">
<div className="flex flex-row gap-1">
{ bset.icons.map((icon) => (
<img src={icon} className="w-4 h-4"/>
))}
</div>
<span>{bset.name}</span>
</a>
</DropdownMenuItem>
))}
<DropdownMenuItem>
<a href="/bset/all">Plus de BSets...</a>
</DropdownMenuItem>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
<a href="/rules" className="text-stone-500">Règles</a>
<a href="/faq" className="text-stone-500">FAQ</a>
2024-11-18 23:03:05 +00:00
</div>
<div className="flex flex-row gap-4">
{ !isLoggedIn &&
<>
<a href="/account/signin" className="text-stone-500">Connexion</a>
<a href="#" className="text-stone-500 cursor-not-allowed">Inscription</a>
2024-11-18 23:03:05 +00:00
</>
}
{
isLoggedIn &&
2024-12-27 15:41:39 +00:00
<>
<a href="/account/profile/decks" className="flex flex-row items-center gap-2 text-stone-500">Decks</a>
2024-12-27 15:41:39 +00:00
<a href="/account/profile" className="flex flex-row items-center gap-2">
<span className="text-stone-500">{username}</span>
2024-12-27 15:41:39 +00:00
</a>
</>
2024-11-18 23:03:05 +00:00
}
</div>
</div>
)
}