web/modal: allow closing modals with escape

This commit is contained in:
Tulir Asokan 2024-10-27 02:19:43 +03:00
parent 90e251dc18
commit c407eb5c7d

View file

@ -40,12 +40,18 @@ export const ModalWrapper = ({ children }: { children: React.ReactNode }) => {
} }
setState(null) setState(null)
}, []) }, [])
const onKeyWrapper = useCallback((evt: React.KeyboardEvent<HTMLDivElement>) => {
if (evt.key === "Escape") {
setState(null)
}
}, [])
return <> return <>
<ModalContext value={setState}> <ModalContext value={setState}>
{children} {children}
{state && <div {state && <div
className={`overlay ${state.wrapperClass ?? "modal"} ${state.dimmed ? "dimmed" : ""}`} className={`overlay ${state.wrapperClass ?? "modal"} ${state.dimmed ? "dimmed" : ""}`}
onClick={onClickWrapper} onClick={onClickWrapper}
onKeyDown={onKeyWrapper}
> >
<ModalCloseContext value={onClickWrapper}> <ModalCloseContext value={onClickWrapper}>
{state.content} {state.content}