Skip to content

Commit ecc4920

Browse files
committed
feat: CModal: add autofucus and esc key support
1 parent a745c28 commit ecc4920

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

src/modal/CModal.js

+16-2
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,35 @@ const CModal = props => {
3333
} = props
3434

3535
const [isOpen, setIsOpen] = useState(false)
36+
const [modalTrigger, setModalTrigger] = useState(false)
3637
const modalClick = e => e.target.dataset.modal && closeOnBackdrop && close()
3738

3839
useEffect(() => {
3940
setIsOpen(show)
4041
}, [show])
4142

43+
const onKeypress = e => e.keyCode == '27' && close()
44+
45+
useEffect(() => {
46+
isOpen && document.addEventListener('keydown', onKeypress)
47+
return () => document.removeEventListener('keydown', onKeypress)
48+
}, [isOpen])
4249

4350
const close = () => {
4451
onClose && onClose()
4552
setIsOpen(false)
4653
}
4754

48-
const onEntered = () => onOpened && onOpened()
55+
const onEntered = () => {
56+
setModalTrigger(document.querySelector(':focus'))
57+
nodeRef.current.focus()
58+
onOpened && onOpened()
59+
}
4960

50-
const onExited = () => onClosed && onClosed()
61+
const onExited = () => {
62+
modalTrigger && modalTrigger.focus()
63+
onClosed && onClosed()
64+
}
5165

5266
const modalClasses = classNames(
5367
'modal overflow-auto fade', {

0 commit comments

Comments
 (0)