diff --git a/ui/src/main/scala/controltower/component/Modal.scala b/ui/src/main/scala/controltower/component/Modal.scala index 238f084..403d499 100644 --- a/ui/src/main/scala/controltower/component/Modal.scala +++ b/ui/src/main/scala/controltower/component/Modal.scala @@ -38,6 +38,7 @@ import org.scalajs.dom.MouseEvent given equalEventTarget[El <: dom.Element]: CanEqual[dom.EventTarget, El] = CanEqual.derived object Modal: + val Shown: Var[Boolean] = Var(false) lazy val onClose: EventProp[dom.UIEvent] = eventProp("close") // def create(mods: Mod[ReactiveHtmlElement[dom.HTMLDialogElement]]*): Modal = new Modal(mods*) @@ -60,6 +61,7 @@ object Modal: val detached = renderDetached(dialog, activateNow = true) dialog.amend( onClose --> { _ => + Shown.set(false) onCloseObs.onNext(()) owner.killSubscriptions() detached.deactivate() @@ -69,6 +71,7 @@ object Modal: dialog.ref.close() } ) + Shown.set(true) dialog.ref.showModal() def showConfirmation( diff --git a/ui/src/main/scala/controltower/page/map/view/MapView.scala b/ui/src/main/scala/controltower/page/map/view/MapView.scala index 4648d60..87b3137 100644 --- a/ui/src/main/scala/controltower/page/map/view/MapView.scala +++ b/ui/src/main/scala/controltower/page/map/view/MapView.scala @@ -305,7 +305,9 @@ private final class MapView( documentEvents( _.onKeyDown .filter(ev => !ev.repeat && ev.code == code && !ev.ctrlKey && !ev.shiftKey && !ev.metaKey) - ).compose(es => compose(es).filterWith(shouldEnable).filterWith(notInKeyHandler.signal)) --> { (ev, b) => + ).compose(es => + compose(es).filterWith(Modal.Shown.signal.map(!_)).filterWith(shouldEnable).filterWith(notInKeyHandler.signal) + ) --> { (ev, b) => ev.preventDefault() inKeyHandler.set(true) action(b, Observer(_ => inKeyHandler.set(false)))