blob: 580e572e335e863620ae306a3541a13d33c635d7 [file] [log] [blame]
Samuel Shuerta21bb2c2023-11-29 18:43:34 -05001"use client"
2import { default as Image } from 'next/image'
3import { useRouter } from 'next/navigation'
4import { ReactNode, useState } from 'react'
5
6function SubgroupItem({
7 title,
8 router
9}: {
10 title: string,
11 router: ReturnType<typeof useRouter>
12}) {
13 return (
14 <div
15 className="cursor-pointer text-slate-200 hover:bg-white hover:bg-opacity-5 px-2 py-1 rounded"
16 onClick={() => void router.push(title.toLowerCase())}
17 >
18 {title}
19 </div>
20 )
21}
22
23function Subgroup({
24 title,
25 children,
26 router
27}: {
28 title: string,
29 children: ReactNode,
30 router: ReturnType<typeof useRouter>
31}) {
32 const [showChild, setShowChild] = useState<boolean>(false)
33 return (
34 <div
Samuel Shuerte65c1342023-12-01 20:19:33 -050035 className="flex min-w-fit"
Samuel Shuerta21bb2c2023-11-29 18:43:34 -050036 onMouseLeave={() => void setShowChild(false)}
37 >
38 <div
Samuel Shuerte65c1342023-12-01 20:19:33 -050039 className="w-fit px-3 text-slate-200 hover:bg-white hover:bg-opacity-5 rounded py-1 cursor-pointer min-w-fit"
Samuel Shuerta21bb2c2023-11-29 18:43:34 -050040 onClick={() => router.push(title.toLowerCase())}
41 onMouseEnter={() => void setShowChild(true)}
42 >
43 {title}
44 </div>
45 {
46 (children)
Samuel Shuerte65c1342023-12-01 20:19:33 -050047 ? <div className={`bg-[#383838] bg-opacity-75 w-fit rounded flex flex-col space-y-1 p-1 ${showChild ? "opacity-100" : "opacity-0"} min-w-fit`}>
Samuel Shuerta21bb2c2023-11-29 18:43:34 -050048 { children }
49 </div>
50 : null
51 }
52 </div>
53 )
54}
55
56function NavItem({
57 title,
58 router,
59 subgroups
60}: {
61 title: string,
62 router: ReturnType<typeof useRouter>,
63 subgroups?: ReturnType<typeof SubgroupItem | typeof Subgroup>[]
64}) {
65
66 const [showChild, setShowChild] = useState<boolean>(false)
67
68 return (
69 <div
Samuel Shuerte65c1342023-12-01 20:19:33 -050070 className="flex flex-col space-y-1 max-w-[7.5vw]"
Samuel Shuerta21bb2c2023-11-29 18:43:34 -050071 onMouseLeave={() => void setShowChild(false)}
72 >
73 <div
Samuel Shuerte65c1342023-12-01 20:19:33 -050074 className="w-fit px-3 text-slate-200 hover:bg-white hover:bg-opacity-5 rounded py-1 cursor-pointer min-w-fit"
Samuel Shuerta21bb2c2023-11-29 18:43:34 -050075 onClick={() => router.push(title.toLowerCase())}
76 onMouseEnter={() => void setShowChild(true)}
77 >
78 {title}
79 </div>
80 {
81 (subgroups && subgroups.length > 0)
Samuel Shuerte65c1342023-12-01 20:19:33 -050082 ? <div className={`bg-[#383838] bg-opacity-75 rounded flex flex-col space-y-1 p-1 ${showChild ? "opacity-100" : "opacity-0"} w-fit`}>
Samuel Shuerta21bb2c2023-11-29 18:43:34 -050083 {
Samuel Shuerte65c1342023-12-01 20:19:33 -050084 subgroups.map((item, i) => <div
85 key={i}
86 >{item}</div>)
Samuel Shuerta21bb2c2023-11-29 18:43:34 -050087 }
88 </div>
89 : null
90 }
91 </div>
92 )
93}
94
95export default function NavBar() {
96 const r = useRouter();
97
98 return (
99 <nav className="flex h-12 pt-2 px-4 space-x-5 bg-slate-900 border-b-black border-b">
100 <a href="/">
101 <Image src="/vercel.svg" alt="null" height={50} width={50} />
102 </a>
103 <NavItem title="Characters" router={r} subgroups={[
104 <Subgroup title="Main Characters" router={r}>
105 <SubgroupItem title="Leonel Morales" router={r}/>
106 <SubgroupItem title="Aina Brazinger" router={r}/>
107 </Subgroup>
108 ]}/>
109 <NavItem title="Places" router={r} />
110 <NavItem title="Factions" router={r} />
111 <NavItem title="Zones" router={r} />
112 </nav>
113 )
114}