aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/app/components/layout/Drawer.tsx
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2025-11-19 15:04:55 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2025-11-19 15:05:34 +0100
commitd51169f6411b68a226d76d2d39826904de484929 (patch)
tree4d8a403dfcc5b17671a92b8cc1e5d71d20ed9537 /src/frontend/app/components/layout/Drawer.tsx
parentd434204860fc0409ad6343e815d0057b97ce3573 (diff)
feat: Add About and Favourites pages, update routing and context management
- Added new routes for About and Favourites pages. - Implemented About page with version information and credits. - Created Favourites page with a placeholder message for empty favourites. - Refactored RegionConfig import paths for consistency. - Introduced PageTitleContext to manage page titles dynamically. - Updated various components to utilize the new context for setting page titles. - Enhanced AppShell layout with a responsive Drawer for navigation. - Added CSS styles for new components and pages. - Integrated commit hash display in the About page for version tracking.
Diffstat (limited to 'src/frontend/app/components/layout/Drawer.tsx')
-rw-r--r--src/frontend/app/components/layout/Drawer.tsx52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/frontend/app/components/layout/Drawer.tsx b/src/frontend/app/components/layout/Drawer.tsx
new file mode 100644
index 0000000..55aa3a0
--- /dev/null
+++ b/src/frontend/app/components/layout/Drawer.tsx
@@ -0,0 +1,52 @@
+import { Info, Settings, Star, X } from "lucide-react";
+import React, { useEffect } from "react";
+import { useTranslation } from "react-i18next";
+import { Link, useLocation } from "react-router";
+import "./Drawer.css";
+
+interface DrawerProps {
+ isOpen: boolean;
+ onClose: () => void;
+}
+
+export const Drawer: React.FC<DrawerProps> = ({ isOpen, onClose }) => {
+ const { t } = useTranslation();
+ const location = useLocation();
+
+ // Close drawer when route changes
+ useEffect(() => {
+ onClose();
+ }, [location.pathname]);
+
+ return (
+ <>
+ <div
+ className={`drawer-overlay ${isOpen ? "open" : ""}`}
+ onClick={onClose}
+ aria-hidden="true"
+ />
+ <div className={`drawer ${isOpen ? "open" : ""}`}>
+ <div className="drawer__header">
+ <h2 className="drawer__title">Menu</h2>
+ <button className="drawer__close-btn" onClick={onClose}>
+ <X size={24} />
+ </button>
+ </div>
+ <nav className="drawer__nav">
+ <Link to="/favourites" className="drawer__link">
+ <Star size={20} />
+ <span>{t("navbar.favourites", "Favoritos")}</span>
+ </Link>
+ <Link to="/settings" className="drawer__link">
+ <Settings size={20} />
+ <span>{t("navbar.settings", "Ajustes")}</span>
+ </Link>
+ <Link to="/about" className="drawer__link">
+ <Info size={20} />
+ <span>{t("about.title", "Acerca de")}</span>
+ </Link>
+ </nav>
+ </div>
+ </>
+ );
+};