@@ -27,6 +27,11 @@ export interface RateProps
2727 id ?: string ;
2828 autoFocus ?: boolean ;
2929 direction ?: string ;
30+ /**
31+ * Is keyboard control enabled.
32+ * @default true
33+ */
34+ keyboard ?: boolean ;
3035}
3136
3237export interface RateRef {
@@ -46,6 +51,7 @@ function Rate(props: RateProps, ref: React.Ref<RateRef>) {
4651 count = 5 ,
4752 allowHalf = false ,
4853 allowClear = true ,
54+ keyboard = true ,
4955
5056 // Display
5157 character = '★' ,
@@ -166,39 +172,22 @@ function Rate(props: RateProps, ref: React.Ref<RateRef>) {
166172 const onInternalKeyDown : React . KeyboardEventHandler < HTMLUListElement > = ( event ) => {
167173 const { keyCode } = event ;
168174 const reverse = direction === 'rtl' ;
169- let nextValue = value ;
170- if ( keyCode === KeyCode . RIGHT && nextValue < count && ! reverse ) {
171- if ( allowHalf ) {
172- nextValue += 0.5 ;
173- } else {
174- nextValue += 1 ;
175+ const step = allowHalf ? 0.5 : 1 ;
176+
177+ if ( keyboard ) {
178+ if ( keyCode === KeyCode . RIGHT && value < count && ! reverse ) {
179+ changeValue ( value + step ) ;
180+ event . preventDefault ( ) ;
181+ } else if ( keyCode === KeyCode . LEFT && value > 0 && ! reverse ) {
182+ changeValue ( value - step ) ;
183+ event . preventDefault ( ) ;
184+ } else if ( keyCode === KeyCode . RIGHT && value > 0 && reverse ) {
185+ changeValue ( value - step ) ;
186+ event . preventDefault ( ) ;
187+ } else if ( keyCode === KeyCode . LEFT && value < count && reverse ) {
188+ changeValue ( value + step ) ;
189+ event . preventDefault ( ) ;
175190 }
176- changeValue ( nextValue ) ;
177- event . preventDefault ( ) ;
178- } else if ( keyCode === KeyCode . LEFT && nextValue > 0 && ! reverse ) {
179- if ( allowHalf ) {
180- nextValue -= 0.5 ;
181- } else {
182- nextValue -= 1 ;
183- }
184- changeValue ( nextValue ) ;
185- event . preventDefault ( ) ;
186- } else if ( keyCode === KeyCode . RIGHT && nextValue > 0 && reverse ) {
187- if ( allowHalf ) {
188- nextValue -= 0.5 ;
189- } else {
190- nextValue -= 1 ;
191- }
192- changeValue ( nextValue ) ;
193- event . preventDefault ( ) ;
194- } else if ( keyCode === KeyCode . LEFT && nextValue < count && reverse ) {
195- if ( allowHalf ) {
196- nextValue += 0.5 ;
197- } else {
198- nextValue += 1 ;
199- }
200- changeValue ( nextValue ) ;
201- event . preventDefault ( ) ;
202191 }
203192
204193 onKeyDown ?.( event ) ;
0 commit comments