11import type { Languages } from '@helpwave/common/hooks/useLanguage'
2+ import { languagesLocalNames } from '@helpwave/common/hooks/useLanguage'
23import { useLanguage } from '@helpwave/common/hooks/useLanguage'
34import { tw , tx } from '@twind/core'
45import { useRouter } from 'next/router'
56import Link from 'next/link'
67import { noop } from '@helpwave/common/util/noop'
7- import { ArrowRightIcon , X } from 'lucide-react'
8+ import { ArrowRightIcon , ArrowRightLeft , X } from 'lucide-react'
89import { useTranslation } from '@helpwave/common/hooks/useTranslation'
910import type { NavItem } from '@/components/layout/NavigationSidebar'
11+ import { Avatar } from '@helpwave/common/components/Avatar'
12+ import { LanguageModal } from '@helpwave/common/components/modals/LanguageModal'
13+ import { useState } from 'react'
1014
1115type MobileNavigationOverlayTranslation = { navigation : string }
1216
@@ -32,34 +36,58 @@ export type MobileNavigationOverlayProps = {
3236 */
3337export const MobileNavigationOverlay = ( { items, onCloseClick = noop , className } : MobileNavigationOverlayProps ) => {
3438 const { language } = useLanguage ( )
39+ const [ isLanguageModalOpen , setIsLanguageModalOpen ] = useState ( false )
3540 const translation = useTranslation ( defaultMobileNavigationOverlayTranslation )
3641 const router = useRouter ( )
3742
3843 return (
39- < nav
40- className = { tx ( '@(flex flex-col bg-gray-200 h-full w-full top-0 absolute px-8 py-6 gap-y-4 items-center z-[100] not-mobile:hidden)' , className ) } >
41- < div className = { tw ( 'flex flex-row w-full items-center justify-between mb-2' ) } >
42- < h2 className = { tw ( 'font-bold font-space text-2xl' ) } > { translation . navigation } </ h2 >
43- < button className = { tw ( 'rounded-md bg-gray-300 hover:bg-gray-400 p-1' ) } onClick = { onCloseClick } >
44- < X size = { 24 } />
44+ < div
45+ className = { tw ( '@(flex flex-col bg-gray-200 h-full w-full top-0 absolute px-8 py-6 z-[100] not-mobile:hidden justify-between)' ) } >
46+ < LanguageModal
47+ id = "language-modal-mobile"
48+ isOpen = { isLanguageModalOpen }
49+ onCloseClick = { ( ) => setIsLanguageModalOpen ( false ) }
50+ onBackgroundClick = { ( ) => setIsLanguageModalOpen ( false ) }
51+ onDone = { ( ) => setIsLanguageModalOpen ( false ) }
52+ containerClassName = { tw ( 'z-[102]' ) }
53+ />
54+ < nav className = { tx ( '@(flex flex-col gap-y-4 items-center)' , className ) } >
55+ < div className = { tw ( 'flex flex-row w-full items-center justify-between mb-2' ) } >
56+ < h2 className = { tw ( 'font-bold font-space text-2xl' ) } > { translation . navigation } </ h2 >
57+ < button className = { tw ( 'rounded-md bg-gray-300 hover:bg-gray-400 p-1' ) } onClick = { onCloseClick } >
58+ < X size = { 24 } />
59+ </ button >
60+ </ div >
61+ { items . map ( ( item , i ) => (
62+ < Link
63+ href = { item . url }
64+ key = { i }
65+ className = { tx (
66+ 'flex flex-row justify-between items-center px-4 py-2 hover:bg-hw-primary-500/40 w-full text-lg font-semibold rounded-md' ,
67+ { 'bg-hw-primary-500/30' : router . pathname === item . url , 'bg-white' : router . pathname !== item . url }
68+ ) }
69+ >
70+ < div className = { tw ( 'flex flex-row gap-x-2 items-center' ) } >
71+ { item . icon }
72+ { item . name [ language ] }
73+ </ div >
74+ < ArrowRightIcon size = { 24 } />
75+ </ Link >
76+ ) ) }
77+ </ nav >
78+ < div className = { tw ( 'flex flex-col gap-y-4 items-center w-full' ) } >
79+ < button
80+ className = { tw ( 'flex flex-row w-full justify-between items-center px-4 py-2 bg-gray-50 hover:bg-hw-primary-500/40 font-semibold rounded-md' ) }
81+ onClick = { ( ) => setIsLanguageModalOpen ( true ) }
82+ >
83+ { languagesLocalNames [ language ] }
84+ < ArrowRightLeft size = { 24 } />
85+ </ button >
86+ < button className = { tw ( 'flex flex-row w-full gap-x-2 items-center p-4 bg-gray-50 hover:bg-hw-primary-500/40 font-semibold rounded-md' ) } >
87+ < Avatar avatarUrl = "https://helpwave.de/favicon.ico" alt = "" size = "small" />
88+ { 'Max Mustermann' }
4589 </ button >
4690 </ div >
47- { items . map ( ( item , i ) => (
48- < Link
49- href = { item . url }
50- key = { i }
51- className = { tx (
52- 'flex flex-row justify-between items-center px-4 py-2 hover:bg-hw-primary-500/40 w-full text-lg font-semibold rounded-md' ,
53- { 'bg-hw-primary-500/30' : router . pathname === item . url , 'bg-white' : router . pathname !== item . url }
54- ) }
55- >
56- < div className = { tw ( 'flex flex-row gap-x-2 items-center' ) } >
57- { item . icon }
58- { item . name [ language ] }
59- </ div >
60- < ArrowRightIcon size = { 24 } />
61- </ Link >
62- ) ) }
63- </ nav >
91+ </ div >
6492 )
6593}
0 commit comments