Feat: Implementation of New UI (Bar, Homepage, Commander, BSets), Removing NGINX dependency, Dockerfile added

This commit is contained in:
globuzma 2025-01-31 23:30:02 +01:00
parent 64a4c5fb87
commit 238b594b1e
31 changed files with 734 additions and 202 deletions

View file

@ -17,6 +17,7 @@ import {
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"
import { useEffect, useState } from 'react'
@ -37,7 +38,7 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
const [bsetsList, setBsetsList] = useState<bsetJsonObject[]>([])
useEffect(() => {
fetch('http://localhost:8072/misc/bsets.json').then((res) => {
fetch('/api/json/misc/bsets.json').then((res) => {
if(res.status == 200) {
res.json().then((data) => {
setBsetsList(data)
@ -49,15 +50,17 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
return (
<div className="flex z-50 flex-row p-4 gap-4 w-full fixed top-0 left-0 bg-slate-700 items-center justify-between">
<div className="flex z-50 flex-row p-4 gap-4 w-full bg-white fixed top-0 left-0 items-center justify-between">
<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">BRAWL SET</span>
<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">
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button>Commandants</Button>
<span className="text-stone-500 cursor-pointer flex flex-row gap-1 items-center">Commandants <IconChevronDown className="h-4"/></span>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56">
<DropdownMenuGroup>
@ -117,71 +120,91 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
<DropdownMenuSubContent>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/azorius">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
<span>Azorius</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/dimir">
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
<span>Dimir</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/rakdos">
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
<span>Rakdos</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/gruul">
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
<span>Gruul</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/selesnya">
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
<span>Selesnya</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/orzhov">
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
<span>Orzhov</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/izzet">
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
<span>Izzet</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/golgari">
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
<span>Golgari</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/boros">
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
<span>Boros</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/simic">
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
<span>Simic</span>
</a>
</DropdownMenuItem>
@ -196,81 +219,101 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
<DropdownMenuSubContent>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/esper">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
<span>Esper</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/grixis">
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
<span>Grixis</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/jund">
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
<span>Jund</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/naya">
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
<span>Naya</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/bant">
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
<span>Bant</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/abzan">
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<div className="flex flex-row">
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
</div>
<span>Abzan</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/jeskai">
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
<div className="flex flex-row">
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
</div>
<span>Jeskai</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/sultai">
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<div className="flex flex-row">
<Black className="h-4 w-4"/>
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
</div>
<span>Sultai</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/mardu">
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
<div className="flex flex-row">
<Red className="h-4 w-4"/>
<White className="h-4 w-4"/>
<Black className="h-4 w-4"/>
</div>
<span>Mardu</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/temur">
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
<div className="flex flex-row">
<Green className="h-4 w-4"/>
<Blue className="h-4 w-4"/>
<Red className="h-4 w-4"/>
</div>
<span>Temur</span>
</a>
</DropdownMenuItem>
@ -285,56 +328,68 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
<DropdownMenuSubContent>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/yore-tiller">
<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 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>
<span>Yore-Tiller</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/glint-eye">
<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 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>
<span>Glint-Eye</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/dune-brood">
<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 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>
<span>Dune-Brood</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/ink-treader">
<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 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>
<span>Ink-Treader</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/witch-maw">
<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 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>
<span>Witch-Maw</span>
</a>
</DropdownMenuItem>
<DropdownMenuItem>
<a className="flex flex-row gap-2 items-center" href="/commander/five-color">
<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 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>
<span>5 couleurs</span>
</a>
</DropdownMenuItem>
@ -346,7 +401,7 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
</DropdownMenu>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button>BSets</Button>
<span className="text-stone-500 cursor-pointer flex flex-row gap-1 items-center">BSets <IconChevronDown className="h-4"/></span>
</DropdownMenuTrigger>
<DropdownMenuContent className="w-56">
<DropdownMenuGroup>
@ -373,23 +428,23 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
<a href="/rules"><Button>Règles</Button></a>
<a href="/rules" className="text-stone-500">Règles</a>
<a href="/faq" className="text-stone-500">FAQ</a>
</div>
<div className="flex flex-row gap-4">
<Input placeholder="Rechercher des cartes" />
{ !isLoggedIn &&
<>
<a href="/account/signin"><Button>Connexion</Button></a>
<Button disabled={true}>Inscription</Button>
<a href="/account/signin" className="text-stone-500">Connexion</a>
<Button disabled={true} className="text-stone-500">Inscription</Button>
</>
}
{
isLoggedIn &&
<>
<a href="/account/profile/decks" className="flex flex-row items-center gap-2"><span className="text-gray-400">Decks</span></a>
<a href="/account/profile/decks" className="flex flex-row items-center gap-2 text-stone-500">Decks</a>
<a href="/account/profile" className="flex flex-row items-center gap-2">
<IconUserFilled color="gray" />
<span className="text-gray-400">{username}</span>
<IconUserFilled color="stone-500" />
<span className="text-stone-500">{username}</span>
</a>
</>
}