fix(app): escape should always close dialogs
This commit is contained in:
parent
fc57c074ae
commit
14b00f64a7
1 changed files with 18 additions and 2 deletions
|
|
@ -1,8 +1,10 @@
|
||||||
import {
|
import {
|
||||||
createContext,
|
createContext,
|
||||||
|
createEffect,
|
||||||
createRoot,
|
createRoot,
|
||||||
createSignal,
|
createSignal,
|
||||||
getOwner,
|
getOwner,
|
||||||
|
onCleanup,
|
||||||
type Owner,
|
type Owner,
|
||||||
type ParentProps,
|
type ParentProps,
|
||||||
runWithOwner,
|
runWithOwner,
|
||||||
|
|
@ -34,6 +36,20 @@ function init() {
|
||||||
setActive(undefined)
|
setActive(undefined)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createEffect(() => {
|
||||||
|
if (!active()) return
|
||||||
|
|
||||||
|
const onKeyDown = (event: KeyboardEvent) => {
|
||||||
|
if (event.key !== "Escape") return
|
||||||
|
close()
|
||||||
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
|
}
|
||||||
|
|
||||||
|
window.addEventListener("keydown", onKeyDown, true)
|
||||||
|
onCleanup(() => window.removeEventListener("keydown", onKeyDown, true))
|
||||||
|
})
|
||||||
|
|
||||||
const show = (element: DialogElement, owner: Owner, onClose?: () => void) => {
|
const show = (element: DialogElement, owner: Owner, onClose?: () => void) => {
|
||||||
close()
|
close()
|
||||||
|
|
||||||
|
|
@ -41,13 +57,13 @@ function init() {
|
||||||
let dispose: (() => void) | undefined
|
let dispose: (() => void) | undefined
|
||||||
|
|
||||||
const node = runWithOwner(owner, () =>
|
const node = runWithOwner(owner, () =>
|
||||||
createRoot((d) => {
|
createRoot((d: () => void) => {
|
||||||
dispose = d
|
dispose = d
|
||||||
return (
|
return (
|
||||||
<Kobalte
|
<Kobalte
|
||||||
modal
|
modal
|
||||||
open={true}
|
open={true}
|
||||||
onOpenChange={(open) => {
|
onOpenChange={(open: boolean) => {
|
||||||
if (open) return
|
if (open) return
|
||||||
close()
|
close()
|
||||||
}}
|
}}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue