@@ -14,13 +14,12 @@ import {CalendarDate, startOfWeek, today} from '@internationalized/date';
1414import { CalendarSelectionMode , CalendarState } from 'react-stately/useCalendarState' ;
1515import { DOMAttributes } from '@react-types/shared' ;
1616import { hookData , useVisibleRangeDescription } from './utils' ;
17+ import { KeyboardEvent , useMemo } from 'react' ;
1718import { mergeProps } from '../utils/mergeProps' ;
1819import { RangeCalendarState } from 'react-stately/useRangeCalendarState' ;
1920import { useDateFormatter } from '../i18n/useDateFormatter' ;
20- import { useKeyboard } from '../interactions/useKeyboard' ;
2121import { useLabels } from '../utils/useLabels' ;
2222import { useLocale } from '../i18n/I18nProvider' ;
23- import { useMemo } from 'react' ;
2423
2524export interface AriaCalendarGridProps {
2625 /**
@@ -79,61 +78,70 @@ export function useCalendarGrid(
7978
8079 let { direction} = useLocale ( ) ;
8180
82- let { keyboardProps} = useKeyboard ( {
83- shortcuts : {
84- Enter : ( ) => {
81+ let onKeyDown = ( e : KeyboardEvent ) => {
82+ switch ( e . key ) {
83+ case 'Enter' :
84+ case ' ' :
85+ e . preventDefault ( ) ;
8586 state . selectFocusedDate ( ) ;
86- } ,
87- ' ' : ( ) => {
88- state . selectFocusedDate ( ) ;
89- } ,
90- PageUp : ( ) => {
91- state . focusPreviousSection ( ) ;
92- } ,
93- 'Shift+PageUp' : ( ) => {
94- state . focusPreviousSection ( true ) ;
95- } ,
96- PageDown : ( ) => {
97- state . focusNextSection ( ) ;
98- } ,
99- 'Shift+PageDown' : ( ) => {
100- state . focusNextSection ( true ) ;
101- } ,
102- End : ( ) => {
87+ break ;
88+ case 'PageUp' :
89+ e . preventDefault ( ) ;
90+ e . stopPropagation ( ) ;
91+ state . focusPreviousSection ( e . shiftKey ) ;
92+ break ;
93+ case 'PageDown' :
94+ e . preventDefault ( ) ;
95+ e . stopPropagation ( ) ;
96+ state . focusNextSection ( e . shiftKey ) ;
97+ break ;
98+ case 'End' :
99+ e . preventDefault ( ) ;
100+ e . stopPropagation ( ) ;
103101 state . focusSectionEnd ( ) ;
104- } ,
105- Home : ( ) => {
102+ break ;
103+ case 'Home' :
104+ e . preventDefault ( ) ;
105+ e . stopPropagation ( ) ;
106106 state . focusSectionStart ( ) ;
107- } ,
108- ArrowLeft : ( ) => {
107+ break ;
108+ case 'ArrowLeft' :
109+ e . preventDefault ( ) ;
110+ e . stopPropagation ( ) ;
109111 if ( direction === 'rtl' ) {
110112 state . focusNextDay ( ) ;
111113 } else {
112114 state . focusPreviousDay ( ) ;
113115 }
114- } ,
115- ArrowUp : ( ) => {
116+ break ;
117+ case 'ArrowUp' :
118+ e . preventDefault ( ) ;
119+ e . stopPropagation ( ) ;
116120 state . focusPreviousRow ( ) ;
117- } ,
118- ArrowRight : ( ) => {
121+ break ;
122+ case 'ArrowRight' :
123+ e . preventDefault ( ) ;
124+ e . stopPropagation ( ) ;
119125 if ( direction === 'rtl' ) {
120126 state . focusPreviousDay ( ) ;
121127 } else {
122128 state . focusNextDay ( ) ;
123129 }
124- } ,
125- ArrowDown : ( ) => {
130+ break ;
131+ case 'ArrowDown' :
132+ e . preventDefault ( ) ;
133+ e . stopPropagation ( ) ;
126134 state . focusNextRow ( ) ;
127- } ,
128- Escape : ( ) => {
135+ break ;
136+ case ' Escape' :
129137 // Cancel the selection.
130138 if ( 'setAnchorDate' in state ) {
139+ e . preventDefault ( ) ;
131140 state . setAnchorDate ( null ) ;
132141 }
133- return false ; // TODO: is this really correct? or should it return true when we cancel and only propagate if there's nothing to do
134- }
142+ break ;
135143 }
136- } ) ;
144+ } ;
137145
138146 let visibleRangeDescription = useVisibleRangeDescription (
139147 startDate ,
@@ -174,7 +182,7 @@ export function useCalendarGrid(
174182 'aria-disabled' : state . isDisabled || undefined ,
175183 'aria-multiselectable' :
176184 'highlightedRange' in state || state . selectionMode === 'multiple' || undefined ,
177- ... keyboardProps ,
185+ onKeyDown ,
178186 onFocus : ( ) => state . setFocused ( true ) ,
179187 onBlur : ( ) => state . setFocused ( false )
180188 } ) ,
0 commit comments