File tree 3 files changed +69
-3
lines changed
courses/advanced-compound-components
02-context-and-events/lecture
03-controlled-components/lecture
3 files changed +69
-3
lines changed Original file line number Diff line number Diff line change @@ -30,8 +30,28 @@ export const Accordion = React.forwardRef(
30
30
return < AccordionContext . Provider value = { context } children = { child } />
31
31
} )
32
32
33
+ function onKeyDown ( event ) {
34
+ event . preventDefault ( )
35
+ const i = selectedIndex
36
+
37
+ switch ( event . key ) {
38
+ case 'ArrowUp' :
39
+ if ( i !== 0 ) {
40
+ setSelectedIndex ( i - 1 )
41
+ }
42
+ break
43
+ case 'ArrowDown' :
44
+ if ( i < React . Children . count ( children ) - 1 ) {
45
+ setSelectedIndex ( i + 1 )
46
+ }
47
+ break
48
+ default :
49
+ break
50
+ }
51
+ }
52
+
33
53
return (
34
- < div data-accordion = "" ref = { forwardedRef } { ...props } >
54
+ < div data-accordion = "" onKeyDown = { onKeyDown } ref = { forwardedRef } { ...props } >
35
55
{ children }
36
56
</ div >
37
57
)
Original file line number Diff line number Diff line change @@ -39,8 +39,34 @@ export const Accordion = React.forwardRef(
39
39
return < AccordionContext . Provider value = { context } children = { child } />
40
40
} )
41
41
42
+ function onKeyDown ( event ) {
43
+ event . preventDefault ( )
44
+ const i = isControlled ? controlledIndex : selectedIndex
45
+
46
+ switch ( event . key ) {
47
+ case 'ArrowUp' :
48
+ if ( i !== 0 ) {
49
+ onChange && onChange ( i - 1 )
50
+ if ( ! isControlled ) {
51
+ setSelectedIndex ( i - 1 )
52
+ }
53
+ }
54
+ break
55
+ case 'ArrowDown' :
56
+ if ( i < React . Children . count ( children ) - 1 ) {
57
+ onChange && onChange ( i + 1 )
58
+ if ( ! isControlled ) {
59
+ setSelectedIndex ( i + 1 )
60
+ }
61
+ }
62
+ break
63
+ default :
64
+ break
65
+ }
66
+ }
67
+
42
68
return (
43
- < div data-accordion = "" ref = { forwardedRef } { ...props } >
69
+ < div data-accordion = "" ref = { forwardedRef } onKeyDown = { onKeyDown } { ...props } >
44
70
{ children }
45
71
</ div >
46
72
)
Original file line number Diff line number Diff line change @@ -28,8 +28,28 @@ export const Accordion = React.forwardRef(
28
28
return < AccordionContext . Provider value = { context } children = { child } />
29
29
} )
30
30
31
+ function onKeyDown ( event ) {
32
+ event . preventDefault ( )
33
+ const i = selectedIndex
34
+
35
+ switch ( event . key ) {
36
+ case 'ArrowUp' :
37
+ if ( i !== 0 ) {
38
+ setSelectedIndex ( i - 1 )
39
+ }
40
+ break
41
+ case 'ArrowDown' :
42
+ if ( i < React . Children . count ( children ) - 1 ) {
43
+ setSelectedIndex ( i + 1 )
44
+ }
45
+ break
46
+ default :
47
+ break
48
+ }
49
+ }
50
+
31
51
return (
32
- < div data-accordion = "" ref = { forwardedRef } { ...props } >
52
+ < div data-accordion = "" onKeyDown = { onKeyDown } ref = { forwardedRef } { ...props } >
33
53
{ children }
34
54
</ div >
35
55
)
You can’t perform that action at this time.
0 commit comments