diff options
| author | Ariel Costas Guerrero <ariel@costas.dev> | 2025-11-19 15:04:55 +0100 |
|---|---|---|
| committer | Ariel Costas Guerrero <ariel@costas.dev> | 2025-11-19 15:05:34 +0100 |
| commit | d51169f6411b68a226d76d2d39826904de484929 (patch) | |
| tree | 4d8a403dfcc5b17671a92b8cc1e5d71d20ed9537 /src/frontend/app/contexts/PageTitleContext.tsx | |
| parent | d434204860fc0409ad6343e815d0057b97ce3573 (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/contexts/PageTitleContext.tsx')
| -rw-r--r-- | src/frontend/app/contexts/PageTitleContext.tsx | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/frontend/app/contexts/PageTitleContext.tsx b/src/frontend/app/contexts/PageTitleContext.tsx new file mode 100644 index 0000000..396e409 --- /dev/null +++ b/src/frontend/app/contexts/PageTitleContext.tsx @@ -0,0 +1,46 @@ +import React, { createContext, useContext, useEffect, useState } from "react"; + +interface PageTitleContextProps { + title: string; + setTitle: (title: string) => void; +} + +const PageTitleContext = createContext<PageTitleContextProps | undefined>( + undefined +); + +export const PageTitleProvider: React.FC<{ children: React.ReactNode }> = ({ + children, +}) => { + const [title, setTitle] = useState("Busurbano"); + + return ( + <PageTitleContext.Provider value={{ title, setTitle }}> + {children} + </PageTitleContext.Provider> + ); +}; + +export const usePageTitleContext = () => { + const context = useContext(PageTitleContext); + if (!context) { + throw new Error("usePageTitleContext must be used within a PageTitleProvider"); + } + return context; +}; + +export const usePageTitle = (title: string) => { + const { setTitle } = usePageTitleContext(); + + useEffect(() => { + setTitle(title); + document.title = `${title} - Busurbano`; + + return () => { + // Optional: Reset title on unmount? + // Usually not needed as the next page will set its own title. + // But if we navigate to a page without usePageTitle, it might be stale. + // Let's leave it for now. + }; + }, [title, setTitle]); +}; |
