Skip to content

Commit 657a4fc

Browse files
authored
Merge pull request #204 from alansamdev/fix/navbar-mobile-menu-footer-year-193-195
Navbar mobile drawer + dynamic Footer copyright year (#193, #195)
2 parents c986015 + 7a28218 commit 657a4fc

2 files changed

Lines changed: 70 additions & 5 deletions

File tree

src/components/Footer/Footer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default function Footer() {
3333
>
3434
Contributors
3535
</ChakraLink>
36-
<Text px={{ base: 0, md: 8 }}>© 2026</Text>
36+
<Text px={{ base: 0, md: 8 }}>© {new Date().getFullYear()}</Text>
3737
</Flex>
3838
);
3939
}

src/components/Navbar/Navbar.tsx

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
"use client";
22

33
import {
4+
Drawer,
5+
DrawerBody,
6+
DrawerCloseButton,
7+
DrawerContent,
8+
DrawerHeader,
9+
DrawerOverlay,
10+
IconButton,
411
Menu,
512
MenuButton,
613
MenuItem,
714
MenuList,
15+
VStack,
16+
useDisclosure,
817
} from "@chakra-ui/react";
9-
import { ChevronDownIcon } from "@chakra-ui/icons";
18+
import { ChevronDownIcon, HamburgerIcon } from "@chakra-ui/icons";
1019
import { useStellarWallet } from "@/context/StellarWalletContext";
1120
import NextLink from "next/link";
1221
import { usePathname } from "next/navigation";
@@ -40,12 +49,21 @@ function Logo() {
4049
);
4150
}
4251

43-
function NavLink({ href, children }: { href: string; children: React.ReactNode }) {
52+
function NavLink({
53+
href,
54+
children,
55+
onClick,
56+
}: {
57+
href: string;
58+
children: React.ReactNode;
59+
onClick?: () => void;
60+
}) {
4461
const pathname = usePathname();
4562
const isActive = pathname === href;
4663
return (
4764
<NextLink
4865
href={href}
66+
onClick={onClick}
4967
className={`text-sm transition-colors hover:text-[color:var(--chakra-colors-app-accent)] ${
5068
isActive
5169
? "font-semibold text-[color:var(--chakra-colors-app-accent)]"
@@ -105,9 +123,46 @@ function formatCount(value: number | undefined | null): string {
105123
return value || value === 0 ? value.toLocaleString() : "—";
106124
}
107125

126+
function MobileNavDrawer({
127+
isOpen,
128+
onClose,
129+
isConnected,
130+
}: {
131+
isOpen: boolean;
132+
onClose: () => void;
133+
isConnected: boolean;
134+
}) {
135+
return (
136+
<Drawer isOpen={isOpen} placement="right" onClose={onClose}>
137+
<DrawerOverlay />
138+
<DrawerContent bg="app.surface">
139+
<DrawerCloseButton color="app.text" />
140+
<DrawerHeader borderBottom="1px solid" borderColor="app.border">
141+
<Logo />
142+
</DrawerHeader>
143+
<DrawerBody pt={6}>
144+
<VStack align="stretch" spacing={5} fontSize="lg">
145+
<NavLink href="/" onClick={onClose}>Home</NavLink>
146+
{isConnected && <NavLink href="/farm" onClick={onClose}>Farm</NavLink>}
147+
<NavLink href="/history" onClick={onClose}>History</NavLink>
148+
{isConnected && <NavLink href="/leaderboard" onClick={onClose}>Leaderboard</NavLink>}
149+
<NavLink href="/contributors" onClick={onClose}>Contributors</NavLink>
150+
{MORE_LINKS.map((link) => (
151+
<NavLink key={link.href} href={link.href} onClick={onClose}>
152+
{link.label}
153+
</NavLink>
154+
))}
155+
</VStack>
156+
</DrawerBody>
157+
</DrawerContent>
158+
</Drawer>
159+
);
160+
}
161+
108162
export default function Navbar() {
109163
const { isConnected, publicKey } = useStellarWallet();
110164
const { data: stats } = usePlatformStats();
165+
const { isOpen, onOpen, onClose } = useDisclosure();
111166

112167
return (
113168
<nav
@@ -120,12 +175,20 @@ export default function Navbar() {
120175
<div className="mx-auto flex w-full max-w-[1400px] flex-col gap-3 px-4 py-4 lg:h-20 lg:min-h-20 lg:w-[95%] lg:flex-row lg:items-center lg:justify-between lg:gap-4 lg:px-0 lg:py-0">
121176
<div className="flex w-full items-center justify-between lg:w-auto">
122177
<Logo />
123-
<div className="block lg:hidden">
178+
<div className="flex items-center gap-2 lg:hidden">
124179
<ThemeToggle />
180+
<IconButton
181+
aria-label="Open menu"
182+
icon={<HamburgerIcon />}
183+
variant="ghost"
184+
color="app.text"
185+
size="sm"
186+
onClick={onOpen}
187+
/>
125188
</div>
126189
</div>
127190

128-
<div className="flex flex-wrap items-center gap-4 lg:gap-7">
191+
<div className="hidden items-center gap-4 lg:flex lg:gap-7">
129192
<NavLink href="/">Home</NavLink>
130193
{isConnected && <NavLink href="/farm">Farm</NavLink>}
131194
<NavLink href="/history">History</NavLink>
@@ -149,6 +212,8 @@ export default function Navbar() {
149212
</div>
150213
</div>
151214
</div>
215+
216+
<MobileNavDrawer isOpen={isOpen} onClose={onClose} isConnected={isConnected} />
152217
</nav>
153218
);
154219
}

0 commit comments

Comments
 (0)