@@ -67,13 +67,18 @@ const CSidebar = props => {
|
67 | 67 | }
|
68 | 68 | }
|
69 | 69 |
|
| 70 | +const onKeydown = e => { |
| 71 | +e.key.includes('Esc') && isAutoclosable() && closeSidebar() |
| 72 | +} |
| 73 | + |
70 | 74 | const createBackdrop = () => {
|
71 | 75 | const backdrop = document.createElement('div')
|
72 | 76 | if (overlaid) {
|
73 | 77 | document.addEventListener('click', sidebarCloseListener)
|
74 | 78 | } else {
|
75 | 79 | backdrop.addEventListener('click', closeSidebar)
|
76 | 80 | }
|
| 81 | +document.addEventListener('keydown', onKeydown) |
77 | 82 | backdrop.className = 'c-sidebar-backdrop c-show'
|
78 | 83 | backdrop.id = key + 'backdrop'
|
79 | 84 | document.body.appendChild(backdrop)
|
@@ -84,6 +89,7 @@ const CSidebar = props => {
|
84 | 89 | if (backdrop) {
|
85 | 90 | document.removeEventListener('click', sidebarCloseListener)
|
86 | 91 | backdrop.removeEventListener('click', closeSidebar)
|
| 92 | +document.removeEventListener('keydown', onKeydown) |
87 | 93 | document.body.removeChild(backdrop)
|
88 | 94 | }
|
89 | 95 | }
|
@@ -97,13 +103,15 @@ const CSidebar = props => {
|
97 | 103 | return Boolean(getComputedStyle(node.current).getPropertyValue('--is-mobile'))
|
98 | 104 | }
|
99 | 105 |
|
| 106 | +const isAutoclosable = () => isOnMobile() || overlaid |
| 107 | + |
100 | 108 | const onSidebarClick = e => {
|
101 | 109 | const sidebarItemClicked = String(e.target.className).includes('c-sidebar-nav-link')
|
102 | 110 | if (
|
103 |
| -sidebarItemClicked && |
104 |
| -hideOnMobileClick && |
105 |
| -(isOnMobile() || overlaid) |
106 |
| -) { |
| 111 | +sidebarItemClicked && |
| 112 | +hideOnMobileClick && |
| 113 | +isAutoclosable() |
| 114 | +) { |
107 | 115 | closeSidebar()
|
108 | 116 | }
|
109 | 117 | }
|
|
0 commit comments