From 9052cab43d95943f4ff31bdb0650c2cbdfd20abf Mon Sep 17 00:00:00 2001 From: Thatsaphorn Atchariyaphap Date: Sun, 22 Jun 2025 18:46:20 +0900 Subject: [PATCH] Introduce `RechtsgebietePage` and `SubpageHero` components; enhance `Navbar` with active route and "Rechtsgebiete" link. --- .../demo-1/app/rechtsbereiche/page.tsx | 63 +++++++++++++++++++ lawfirm-demos/demo-1/components/Navbar.tsx | 11 +++- .../demo-1/components/SubpageHero.tsx | 36 +++++++++++ 3 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 lawfirm-demos/demo-1/app/rechtsbereiche/page.tsx create mode 100644 lawfirm-demos/demo-1/components/SubpageHero.tsx diff --git a/lawfirm-demos/demo-1/app/rechtsbereiche/page.tsx b/lawfirm-demos/demo-1/app/rechtsbereiche/page.tsx new file mode 100644 index 0000000..503913f --- /dev/null +++ b/lawfirm-demos/demo-1/app/rechtsbereiche/page.tsx @@ -0,0 +1,63 @@ +'use client'; + +import {motion} from 'framer-motion'; +import SubpageHero from "@/components/SubpageHero"; + +const rechtsgebiete = [ + { + title: 'Arbeitsrecht', + lawyer: 'RA Dr. Mustermann', + description: + 'Im Arbeitsrecht vertreten wir sowohl Arbeitnehmer:innen als auch Arbeitgeber:innen in allen Fragen rund um das Arbeitsverhältnis.', + example: + 'Beispiel: Eine Arbeitnehmerin erhält eine fristlose Kündigung und möchte dagegen vorgehen.', + }, + { + title: 'Familienrecht', + lawyer: 'RAin Künstler', + description: + 'Wir unterstützen Sie in allen familienrechtlichen Angelegenheiten – von Scheidung bis Sorgerecht.', + example: + 'Beispiel: Ein Ehepaar möchte sich einvernehmlich scheiden lassen und das Umgangsrecht für die Kinder regeln.', + }, + { + title: 'Vertragsrecht', + lawyer: 'RA Dr. Mustermann', + description: + 'Im Vertragsrecht prüfen und gestalten wir Verträge jeder Art und vertreten Sie bei Streitigkeiten.', + example: + 'Beispiel: Ein Unternehmer möchte einen Dienstleistungsvertrag rechtssicher aufsetzen lassen.', + }, +]; + +export default function RechtsgebietePage() { + return ( +
+ + +
+
+ {rechtsgebiete.map((area, index) => ( + +

{area.title}

+

{area.description}

+

{area.example}

+

Zuständig: {area.lawyer}

+
+ ))} +
+
+
+ ); +} diff --git a/lawfirm-demos/demo-1/components/Navbar.tsx b/lawfirm-demos/demo-1/components/Navbar.tsx index b58dd08..a7ad88f 100644 --- a/lawfirm-demos/demo-1/components/Navbar.tsx +++ b/lawfirm-demos/demo-1/components/Navbar.tsx @@ -3,9 +3,13 @@ import {useEffect, useState} from 'react'; import Link from 'next/link'; import Links from '@/app/Links'; +import {usePathname} from 'next/navigation'; export default function Navbar() { const [scrolled, setScrolled] = useState(false); + const pathname = usePathname(); + + const isRoot = pathname === '/'; useEffect(() => { const handleScroll = () => { @@ -15,10 +19,12 @@ export default function Navbar() { return () => window.removeEventListener('scroll', handleScroll); }, []); + const isActiveScrolled = scrolled || !isRoot; + return ( ); -} +} \ No newline at end of file diff --git a/lawfirm-demos/demo-1/components/SubpageHero.tsx b/lawfirm-demos/demo-1/components/SubpageHero.tsx new file mode 100644 index 0000000..2b8ac6d --- /dev/null +++ b/lawfirm-demos/demo-1/components/SubpageHero.tsx @@ -0,0 +1,36 @@ +'use client'; + +import {motion} from 'framer-motion'; + +export default function SubpageHero({ + title, + subtitle, + }: { + title: string; + subtitle?: string; +}) { + return ( +
+
+ + {title} + + {subtitle && ( + + {subtitle} + + )} +
+
+ ); +}