Skip to content

Commit 947d869

Browse files
committed
add more events examples for compound components
1 parent bad8c8f commit 947d869

File tree

3 files changed

+69
-3
lines changed

3 files changed

+69
-3
lines changed

courses/advanced-compound-components/02-context-and-events/lecture/Accordion.final.jsx

+21-1
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,28 @@ export const Accordion = React.forwardRef(
3030
return <AccordionContext.Provider value={context} children={child} />
3131
})
3232

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+
3353
return (
34-
<div data-accordion="" ref={forwardedRef} {...props}>
54+
<div data-accordion="" onKeyDown={onKeyDown} ref={forwardedRef} {...props}>
3555
{children}
3656
</div>
3757
)

courses/advanced-compound-components/03-controlled-components/lecture/Accordion.final.jsx

+27-1
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,34 @@ export const Accordion = React.forwardRef(
3939
return <AccordionContext.Provider value={context} children={child} />
4040
})
4141

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+
4268
return (
43-
<div data-accordion="" ref={forwardedRef} {...props}>
69+
<div data-accordion="" ref={forwardedRef} onKeyDown={onKeyDown} {...props}>
4470
{children}
4571
</div>
4672
)

courses/advanced-compound-components/03-controlled-components/lecture/Accordion.jsx

+21-1
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,28 @@ export const Accordion = React.forwardRef(
2828
return <AccordionContext.Provider value={context} children={child} />
2929
})
3030

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+
3151
return (
32-
<div data-accordion="" ref={forwardedRef} {...props}>
52+
<div data-accordion="" onKeyDown={onKeyDown} ref={forwardedRef} {...props}>
3353
{children}
3454
</div>
3555
)

0 commit comments

Comments
 (0)