Skip to content

Commit 4e35ed8

Browse files
committed
feat: CSidebar: close mobile/overlaid sidebar on 'esc' #141
1 parent 02b6b0d commit 4e35ed8

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

src/template/CSidebar.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,18 @@ const CSidebar = props => {
6767
}
6868
}
6969

70+
const onKeydown = e => {
71+
e.key.includes('Esc') && isAutoclosable() && closeSidebar()
72+
}
73+
7074
const createBackdrop = () => {
7175
const backdrop = document.createElement('div')
7276
if (overlaid) {
7377
document.addEventListener('click', sidebarCloseListener)
7478
} else {
7579
backdrop.addEventListener('click', closeSidebar)
7680
}
81+
document.addEventListener('keydown', onKeydown)
7782
backdrop.className = 'c-sidebar-backdrop c-show'
7883
backdrop.id = key + 'backdrop'
7984
document.body.appendChild(backdrop)
@@ -84,6 +89,7 @@ const CSidebar = props => {
8489
if (backdrop) {
8590
document.removeEventListener('click', sidebarCloseListener)
8691
backdrop.removeEventListener('click', closeSidebar)
92+
document.removeEventListener('keydown', onKeydown)
8793
document.body.removeChild(backdrop)
8894
}
8995
}
@@ -97,13 +103,15 @@ const CSidebar = props => {
97103
return Boolean(getComputedStyle(node.current).getPropertyValue('--is-mobile'))
98104
}
99105

106+
const isAutoclosable = () => isOnMobile() || overlaid
107+
100108
const onSidebarClick = e => {
101109
const sidebarItemClicked = String(e.target.className).includes('c-sidebar-nav-link')
102110
if (
103-
sidebarItemClicked &&
104-
hideOnMobileClick &&
105-
(isOnMobile() || overlaid)
106-
) {
111+
sidebarItemClicked &&
112+
hideOnMobileClick &&
113+
isAutoclosable()
114+
) {
107115
closeSidebar()
108116
}
109117
}

0 commit comments

Comments
 (0)