blob: 7c846c9b696763ff091d100e8a077476fa8cf248 [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
35 className="flex space-y-1"
36 onMouseLeave={() => void setShowChild(false)}
37 >
38 <div
39 className="w-fit px-3 text-slate-200 hover:bg-white hover:bg-opacity-5 rounded py-1 cursor-pointer"
40 onClick={() => router.push(title.toLowerCase())}
41 onMouseEnter={() => void setShowChild(true)}
42 >
43 {title}
44 </div>
45 {
46 (children)
47 ? <div className={`bg-[#383838] bg-opacity-75 w-fit rounded flex flex-col space-y-1 p-1 ${showChild ? "opacity-100" : "opacity-0"}`}>
48 { 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
70 className="flex flex-col space-y-1"
71 onMouseLeave={() => void setShowChild(false)}
72 >
73 <div
74 className="w-fit px-3 text-slate-200 hover:bg-white hover:bg-opacity-5 rounded py-1 cursor-pointer"
75 onClick={() => router.push(title.toLowerCase())}
76 onMouseEnter={() => void setShowChild(true)}
77 >
78 {title}
79 </div>
80 {
81 (subgroups && subgroups.length > 0)
82 ? <div className={`bg-[#383838] bg-opacity-75 w-fit rounded flex flex-col space-y-1 p-1 ${showChild ? "opacity-100" : "opacity-0"}`}>
83 {
84 subgroups.map((item, i) => <div key={i}>{item}</div>)
85 }
86 </div>
87 : null
88 }
89 </div>
90 )
91}
92
93export default function NavBar() {
94 const r = useRouter();
95
96 return (
97 <nav className="flex h-12 pt-2 px-4 space-x-5 bg-slate-900 border-b-black border-b">
98 <a href="/">
99 <Image src="/vercel.svg" alt="null" height={50} width={50} />
100 </a>
101 <NavItem title="Characters" router={r} subgroups={[
102 <Subgroup title="Main Characters" router={r}>
103 <SubgroupItem title="Leonel Morales" router={r}/>
104 <SubgroupItem title="Aina Brazinger" router={r}/>
105 </Subgroup>
106 ]}/>
107 <NavItem title="Places" router={r} />
108 <NavItem title="Factions" router={r} />
109 <NavItem title="Zones" router={r} />
110 </nav>
111 )
112}