From 9719aa0e2d645b899f3519af82f4f036710a70a5 Mon Sep 17 00:00:00 2001 From: Kris Date: Thu, 18 Jul 2024 10:33:06 -0400 Subject: [PATCH] DEV: follow-up to avoid using schedule when opening modal from dropdown (#27970) --- .../discourse/app/components/header.gjs | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/app/assets/javascripts/discourse/app/components/header.gjs b/app/assets/javascripts/discourse/app/components/header.gjs index a949cb50220..3b05cb2d03b 100644 --- a/app/assets/javascripts/discourse/app/components/header.gjs +++ b/app/assets/javascripts/discourse/app/components/header.gjs @@ -3,7 +3,6 @@ import { tracked } from "@glimmer/tracking"; import { getOwner } from "@ember/application"; import { hash } from "@ember/helper"; import { action } from "@ember/object"; -import { schedule } from "@ember/runloop"; import { service } from "@ember/service"; import { modifier as modifierFn } from "ember-modifier"; import { and, eq, not, or } from "truth-helpers"; @@ -92,7 +91,12 @@ export default class GlimmerHeader extends Component { return; } - if (!panelBody.contains(event.relatedTarget)) { + // don't remove focus from newly opened modal + const isFocusInModal = document + .querySelector(".d-modal") + ?.contains(event.relatedTarget); + + if (!panelBody.contains(event.relatedTarget) && !isFocusInModal) { this.closeCurrentMenu(); } }; @@ -110,17 +114,15 @@ export default class GlimmerHeader extends Component { @action closeCurrentMenu() { - schedule("afterRender", () => { - if (this.search.visible) { - this.toggleSearchMenu(); - } else if (this.header.userVisible) { - this.toggleUserMenu(); - document.getElementById(USER_BUTTON_ID)?.focus(); - } else if (this.header.hamburgerVisible) { - this.toggleHamburger(); - document.getElementById(HAMBURGER_BUTTON_ID)?.focus(); - } - }); + if (this.search.visible) { + this.toggleSearchMenu(); + } else if (this.header.userVisible) { + this.toggleUserMenu(); + document.getElementById(USER_BUTTON_ID)?.focus(); + } else if (this.header.hamburgerVisible) { + this.toggleHamburger(); + document.getElementById(HAMBURGER_BUTTON_ID)?.focus(); + } } @action