Files
workavia-calendar-front/src/components/Menubar/MobileMenuBar.tsx
T
2026-04-13 10:30:47 +07:00

108 lines
3.3 KiB
TypeScript

import { CalendarApi } from '@fullcalendar/core'
import { IconButton, Stack } from '@linagora/twake-mui'
import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'
import ArrowDropUpIcon from '@mui/icons-material/ArrowDropUp'
import MenuIcon from '@mui/icons-material/Menu'
import React, { useState } from 'react'
import { useI18n } from 'twake-i18n'
import SearchBar from './EventSearchBar'
import './Menubar.styl'
import { DatePickerMobile } from './components/DatePickerMobile'
import { Typography } from '@mui/material'
import { SmallNavigationControls } from './components/SmallNavigationControls'
export type MobileMenubarProps = {
calendarRef: React.RefObject<CalendarApi | null>
currentDate: Date
onDateChange?: (date: Date) => void
handleNavigation: (action: 'prev' | 'next' | 'today') => void
onOpenSidebar: () => void
}
export const MobileMenubar: React.FC<MobileMenubarProps> = ({
calendarRef,
currentDate,
onDateChange,
handleNavigation,
onOpenSidebar
}) => {
const { t } = useI18n()
const [openDatePicker, setOpenDatePicker] = useState(false)
// Use i18n for month names instead of date-fns
const monthIndex = currentDate.getMonth()
const year = currentDate.getFullYear()
const monthName = t(`months.standalone.${monthIndex}`)
const dateLabel = `${monthName} ${year}`
const onToggleDatePicker = (): void => {
setOpenDatePicker(prev => {
const newState = !prev
setTimeout(() => {
calendarRef.current?.updateSize?.()
}, 0)
return newState
})
}
return (
<>
<header className="menubar menubar--mobile">
<div className="left-menu">
<IconButton
onClick={onOpenSidebar}
aria-label={t('menubar.toggleSidebar')}
>
<MenuIcon />
</IconButton>
<div className="menu-items">
<SmallNavigationControls onNavigate={handleNavigation} />
</div>
<div className="menu-items">
<Stack direction="row" className="current-date-time">
<Typography
sx={{ lineHeight: 'unset' }}
onClick={onToggleDatePicker}
>
{dateLabel}
</Typography>
<IconButton
size="small"
onClick={onToggleDatePicker}
aria-label={
openDatePicker
? t('menubar.hideDatePicker')
: t('menubar.showDatePicker')
}
title={
openDatePicker
? t('menubar.hideDatePicker')
: t('menubar.showDatePicker')
}
aria-expanded={openDatePicker}
>
{openDatePicker ? <ArrowDropUpIcon /> : <ArrowDropDownIcon />}
</IconButton>
</Stack>
</div>
</div>
<div className="right-menu">
<div className="search-container">
<SearchBar />
</div>
</div>
</header>
{openDatePicker ? (
<DatePickerMobile
calendarRef={calendarRef}
currentDate={currentDate}
onDateChange={onDateChange}
onCloseDatePicker={() => setOpenDatePicker(false)}
/>
) : null}
</>
)
}