import { Button, Icon, ListItem, Row, Select, Text } from '@umami/react-zen'; import { isAfter } from 'date-fns'; import { useMemo } from 'react'; import { useDateRange, useDateRangeQuery, useMessages, useNavigation } from '@/components/hooks'; import { ChevronRight } from '@/components/icons'; import { getDateRangeValue } from '@/lib/date'; import { DateFilter } from './DateFilter'; export interface WebsiteDateFilterProps { websiteId: string; compare?: string; showAllTime?: boolean; showButtons?: boolean; allowCompare?: boolean; } export function WebsiteDateFilter({ websiteId, showAllTime = true, showButtons = true, allowCompare, }: WebsiteDateFilterProps) { const { dateRange, isAllTime, isCustomRange } = useDateRange(); const { formatMessage, labels } = useMessages(); const { router, updateParams, query: { compare = 'prev', offset = 0 }, } = useNavigation(); const disableForward = isAllTime || isAfter(dateRange.endDate, new Date()); const showCompare = allowCompare && !isAllTime; const websiteDateRange = useDateRangeQuery(websiteId); const handleChange = (date: string) => { if (date === 'all') { router.push( updateParams({ date: `${getDateRangeValue(websiteDateRange.startDate, websiteDateRange.endDate)}:all`, offset: undefined, }), ); } else { router.push(updateParams({ date, offset: undefined })); } }; const handleIncrement = increment => { router.push(updateParams({ offset: Number(offset) + increment })); }; const handleSelect = (compare: any) => { router.push(updateParams({ compare })); }; const dateValue = useMemo(() => { return offset !== 0 ? getDateRangeValue(dateRange.startDate, dateRange.endDate) : dateRange.value; }, [dateRange]); return ( {showButtons && !isAllTime && !isCustomRange && ( )} {showCompare && ( VS )} ); }