import React from 'react'; import { Paper, Grid, Typography, Divider, } from '@mui/material'; import { format, differenceInCalendarMonths } from 'date-fns'; import { ArrowRightAlt } from '@mui/icons-material'; import { Month } from './picker.month'; import { DefinedRanges } from './defined-ranges'; import { isWithinRange } from './utils'; import { DateRange, DefinedRange, Setter, NavigationAction, MARKERS, } from './types'; import { MenuDivider } from './styles'; interface MenuProps { dateRange: DateRange; ranges: DefinedRange[]; minDate: Date; maxDate: Date; firstMonth: Date; secondMonth: Date; setFirstMonth: Setter; setSecondMonth: Setter; setDateRange: Setter; helpers: { inHoverRange: (day: Date) => boolean; }; handlers: { onDayClick: (day: Date) => void; onDayHover: (day: Date) => void; onMonthNavigate: (marker: symbol, action: NavigationAction) => void; }; } export const Menu: React.FunctionComponent = (props: MenuProps) => { const { ranges, dateRange, minDate, maxDate, firstMonth, setFirstMonth, secondMonth, setSecondMonth, setDateRange, helpers, handlers, } = props; const { startDate, endDate } = dateRange; const canNavigateCloser = differenceInCalendarMonths(secondMonth, firstMonth) >= 2; const commonProps = { dateRange, minDate, maxDate, helpers, handlers, }; const validateDefineRange = (range: DefinedRange): boolean => { if(!minDate || !maxDate) return false; return !isWithinRange(range.startDate, minDate, maxDate) && !isWithinRange(range.endDate, minDate, maxDate); }; return ( {startDate ? format(startDate, 'MMMM dd, yyyy') : 'Start Date'} {endDate ? format(endDate, 'MMMM dd, yyyy') : 'End Date'} ); }