import React, { useMemo } from 'react' import { shiftQueryPeriod, getDateForShiftedPeriod } from '../../query' import classNames from 'classnames' import { useQueryContext } from '../../query-context' import { useSiteContext } from '../../site-context' import { NavigateKeybind } from '../../keybinding' import { AppNavigationLink } from '../../navigation/use-app-navigate' import { QueryPeriod } from '../../query-time-periods' import { useMatch } from 'react-router-dom' import { rootRoute } from '../../router' const ArrowKeybind = ({ keyboardKey }: { keyboardKey: 'ArrowLeft' | 'ArrowRight' }) => { const site = useSiteContext() const { query } = useQueryContext() const search = useMemo( () => shiftQueryPeriod({ query, site, direction: ({ ArrowLeft: -1, ArrowRight: 1 } as const)[keyboardKey], keybindHint: keyboardKey }), [site, query, keyboardKey] ) return ( ) } function ArrowIcon({ direction, disabled = false }: { direction: 'left' | 'right' disabled?: boolean }) { return ( {direction === 'left' && } {direction === 'right' && } ) } export function MovePeriodArrows({ className }: { className?: string }) { const periodsWithArrows = [ QueryPeriod.year, QueryPeriod.month, QueryPeriod.day ] const { query } = useQueryContext() const site = useSiteContext() const dashboardRouteMatch = useMatch(rootRoute.path) if (!periodsWithArrows.includes(query.period)) { return null } const canGoBack = getDateForShiftedPeriod({ site, query, direction: -1 }) !== null const canGoForward = getDateForShiftedPeriod({ site, query, direction: 1 }) !== null const sharedClass = 'flex items-center px-1 sm:px-2 dark:text-gray-100 transition-colors duration-150' const enabledClass = 'hover:bg-gray-100 dark:hover:bg-gray-700' const disabledClass = 'bg-gray-200 dark:bg-gray-850 cursor-not-allowed' return (
search } > search } > {!!dashboardRouteMatch && } {!!dashboardRouteMatch && }
) }