From f840f37a54985c2b1585330013b72d99cd3e0848 Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Mon, 13 May 2024 14:43:26 +0200 Subject: [PATCH] FIX: do not auto close on empty identifiers (#27001) Prior to this fix all menus with empty identifier or groupIdentifier would be considered to be part of the same identifiers/groupIdentifiers and would auto close any existing d-menu with no identifier/groupIdentifier when opened. --- .../components/float-kit/d-menu-test.js | 16 ++++++++++++++++ .../javascripts/float-kit/addon/services/menu.js | 9 ++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/discourse/tests/integration/components/float-kit/d-menu-test.js b/app/assets/javascripts/discourse/tests/integration/components/float-kit/d-menu-test.js index 0f47e99294c..bedd9e9cf3f 100644 --- a/app/assets/javascripts/discourse/tests/integration/components/float-kit/d-menu-test.js +++ b/app/assets/javascripts/discourse/tests/integration/components/float-kit/d-menu-test.js @@ -311,6 +311,22 @@ module("Integration | Component | FloatKit | d-menu", function (hooks) { assert.dom(".fk-d-menu__content.second").exists(); }); + test("empty @identifier/@groupIdentifier", async function (assert) { + await render( + hbs`12` + ); + + await click(".first.fk-d-menu__trigger"); + + assert.dom(".fk-d-menu__content.first").exists(); + assert.dom(".fk-d-menu__content.second").doesNotExist(); + + await click(".second.fk-d-menu__trigger"); + + assert.dom(".fk-d-menu__content.first").exists("it doesn’t autoclose"); + assert.dom(".fk-d-menu__content.second").exists(); + }); + test("@class", async function (assert) { await render(hbs`1`); diff --git a/app/assets/javascripts/float-kit/addon/services/menu.js b/app/assets/javascripts/float-kit/addon/services/menu.js index 39a7546b6bc..97e73a7895e 100644 --- a/app/assets/javascripts/float-kit/addon/services/menu.js +++ b/app/assets/javascripts/float-kit/addon/services/menu.js @@ -52,9 +52,12 @@ export default class Menu extends Service { if (instance.options.identifier || instance.options.groupIdentifier) { for (const registeredMenu of this.registeredMenus) { if ( - (registeredMenu.options.identifier === instance.options.identifier || - registeredMenu.options.groupIdentifier === - instance.options.groupIdentifier) && + ((instance.options.identifier && + registeredMenu.options.identifier === + instance.options.identifier) || + (instance.options.groupIdentifier && + registeredMenu.options.groupIdentifier === + instance.options.groupIdentifier)) && registeredMenu !== instance ) { await this.close(registeredMenu);