Skip to content

Commit ea2f04b

Browse files
feat: add side menu
1 parent e8cfaa0 commit ea2f04b

File tree

2 files changed

+90
-24
lines changed

2 files changed

+90
-24
lines changed

app/src/components/NavigationBar.tsx

+49-9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Commission } from "@/types/aliases";
77
import { Schema } from "@/types/schema";
88
import Link from "next/link";
99
import { useRouter } from "next/router";
10+
import { useState } from "react";
1011

1112
function DropdownMenu({
1213
head: button,
@@ -18,32 +19,72 @@ function DropdownMenu({
1819
className?: string;
1920
}) {
2021
return (
21-
<div className={styles.dropdownMenuItem + " " + (className || "")}>
22+
<div className={styles.dropdownMenu + " " + (className || "")}>
2223
{button}
2324
<div className={styles.content}>{children}</div>
2425
</div>
2526
);
2627
}
2728

29+
function SideMenu({
30+
headToggle: toggle,
31+
children,
32+
visible,
33+
className,
34+
}: {
35+
headToggle: any;
36+
children: any;
37+
visible: boolean;
38+
className?: string;
39+
}) {
40+
return (
41+
<>
42+
<Burger
43+
className={styles.burger + " " + styles.sidemenuHead}
44+
onClick={toggle}
45+
/>
46+
<div
47+
className={styles.sideMenu + " " + (className || "")}
48+
style={{ display: visible ? "flex" : "none" }}
49+
>
50+
{children}
51+
</div>
52+
</>
53+
);
54+
}
55+
2856
export default function NavigationBar(props: {
2957
commissions?: Commission[];
3058
langs: Schema["languages"];
3159
}) {
60+
const [menuVisible, setMenuVisible] = useState(false);
61+
const toggleMenu = () => {
62+
setMenuVisible((v) => !v);
63+
};
64+
3265
const router = useRouter();
3366
const entries = [
34-
<Link className={styles.menuItem} href="/association">
67+
<Link
68+
className={styles.sidemenuItem}
69+
href="/association"
70+
onClick={toggleMenu}
71+
>
3572
{translate("association", locale(router), {
3673
capitalize: true,
3774
plural: false,
3875
})}
3976
</Link>,
40-
<Link className={styles.menuItem} href="/commissions">
77+
<Link
78+
className={styles.sidemenuItem}
79+
href="/commissions"
80+
onClick={toggleMenu}
81+
>
4182
{translate("commission", locale(router), {
4283
capitalize: true,
4384
plural: true,
4485
})}
4586
</Link>,
46-
<Link className={styles.menuItem} href="/news">
87+
<Link className={styles.sidemenuItem} href="/news" onClick={toggleMenu}>
4788
{translate("news", locale(router), {
4889
capitalize: true,
4990
plural: false,
@@ -138,14 +179,13 @@ export default function NavigationBar(props: {
138179
<></>
139180
)}
140181

141-
<DropdownMenu
142-
head={
143-
<Burger className={styles.burger + " " + styles.dropdownHead} />
144-
}
182+
<SideMenu
183+
headToggle={toggleMenu}
184+
visible={menuVisible}
145185
className={styles.burgerContainer}
146186
>
147187
{entries}
148-
</DropdownMenu>
188+
</SideMenu>
149189
</div>
150190
</div>
151191
);

app/src/styles/NavigationBar.module.scss

+41-15
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,6 @@
1919
font-weight: lighter;
2020
font-size: 15pt;
2121

22-
.burger {
23-
width: 2em;
24-
height: auto;
25-
stroke: white;
26-
cursor: pointer;
27-
}
28-
29-
.burgerContainer {
30-
@media (min-width: 50rem) {
31-
display: none !important;
32-
position: absolute !important;
33-
}
34-
}
35-
3622
.corner {
3723
margin-top: 0;
3824
margin-left: 0;
@@ -79,7 +65,7 @@
7965
align-items: center;
8066
}
8167

82-
.dropdownMenuItem {
68+
.dropdownMenu {
8369
position: relative;
8470
display: inline-block;
8571

@@ -113,6 +99,46 @@
11399
display: flex;
114100
}
115101
}
102+
103+
.burger {
104+
width: 2em;
105+
height: auto;
106+
stroke: white;
107+
cursor: pointer;
108+
@media (min-width: 50rem) {
109+
display: none !important;
110+
position: absolute !important;
111+
}
112+
}
113+
114+
.sidemenuHead {
115+
display: flex;
116+
justify-content: center;
117+
align-items: center;
118+
}
119+
120+
.sideMenu {
121+
@extend .glass;
122+
123+
position: absolute;
124+
flex-direction: column;
125+
width: 60vw;
126+
height: 100vh;
127+
128+
right: 0;
129+
top: 3em;
130+
bottom: 0;
131+
padding: 1em;
132+
border-radius: 5px;
133+
134+
.sidemenuItem {
135+
margin: 0.5em 0em 0.5em 1em;
136+
}
137+
138+
.sidemenuHead {
139+
align-self: flex-end;
140+
}
141+
}
116142
}
117143
}
118144

0 commit comments

Comments
 (0)