1
0
mirror of https://github.com/tabler/tabler.git synced 2026-08-13 14:52:22 +04:00
Files
tabler/site/components/Modal.tsx
T
2023-07-18 00:13:56 +02:00

40 lines
983 B
TypeScript

import Icon from '@/components/Icon';
import { useCallback, useEffect, useState } from 'react';
export function Modal({ children }) {
const [isOpen, setIsOpen] = useState(false);
const handleEscape = useCallback(e => {
if (e.keyCode === 27) {
setIsOpen(false);
}
}, []);
useEffect(() => {
if (isOpen) {
document.addEventListener('keydown', handleEscape, false);
}
return () => {
document.removeEventListener('keydown', handleEscape, false);
};
});
const hideModal = e => {
setIsOpen(false);
};
return isOpen ? (
<div className="modal-backdrop" tabIndex={-1} role="dialog" onClick={hideModal} onKeyDown={hideModal}>
<div className="modal">
<a href="#" className="modal-close" data-dismiss="modal" aria-label="Close modal" onClick={hideModal}>
<Icon name="x" />
</a>
<div className="modal-body">{children}</div>
</div>
</div>
) : null;
}
export default Modal;