From a90fc54c9447b26039b8be52b3b90d406df110ee Mon Sep 17 00:00:00 2001 From: Ronald A Richardson Date: Thu, 26 Mar 2026 03:49:28 -0400 Subject: [PATCH 1/2] fix(menu-service): sort extensions by priority first, append shortcuts after MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getHeaderMenuItems() was using a flat sortBy('priority') across all items, including shortcuts. Shortcuts are assigned priority = parentPriority + 1, so a Fleet-Ops shortcut (priority 2) would sort between Fleet-Ops (priority 1) and Pallet (priority 2), interleaving shortcuts with real extensions. The smart-nav-menu component builds the default pinned bar by slicing the first maxVisible (5) items from this list, so the bar ended up showing Fleet-Ops + its 4 shortcuts instead of the first 5 extensions. Fix: filter items into two groups before sorting — extensions sort by priority as before, shortcuts are appended at the end in registration order. This guarantees shortcuts never displace real extensions from the default bar, regardless of what priority values extensions choose. --- addon/services/universe/menu-service.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/addon/services/universe/menu-service.js b/addon/services/universe/menu-service.js index 6d70f6c..ac1779d 100644 --- a/addon/services/universe/menu-service.js +++ b/addon/services/universe/menu-service.js @@ -446,7 +446,14 @@ export default class MenuService extends Service.extend(Evented) { */ getHeaderMenuItems() { const items = this.registry.getRegistry('header', 'menu-item'); - return A(items).sortBy('priority'); + // Sort extensions by priority first, then append shortcuts at the end. + // Shortcuts must never interleave with extensions in the sorted list + // because the default bar is built by slicing the first N items — if + // shortcuts sort between extensions (e.g. priority 1.1 between 1 and 2) + // they would displace real extensions from the default pinned bar. + const extensions = A(items).filter((i) => !i._isShortcut).sortBy('priority'); + const shortcuts = A(items).filter((i) => i._isShortcut); + return A([...extensions, ...shortcuts]); } /** From 746f0e3e0fd8552c0eec427b5ac4a02798cfbbe9 Mon Sep 17 00:00:00 2001 From: Ronald A Richardson Date: Thu, 26 Mar 2026 03:55:14 -0400 Subject: [PATCH 2/2] fix(menu-service): fix prettier formatting on filter chain; bump to v0.3.17 --- addon/services/universe/menu-service.js | 4 +++- package.json | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/addon/services/universe/menu-service.js b/addon/services/universe/menu-service.js index ac1779d..a821358 100644 --- a/addon/services/universe/menu-service.js +++ b/addon/services/universe/menu-service.js @@ -451,7 +451,9 @@ export default class MenuService extends Service.extend(Evented) { // because the default bar is built by slicing the first N items — if // shortcuts sort between extensions (e.g. priority 1.1 between 1 and 2) // they would displace real extensions from the default pinned bar. - const extensions = A(items).filter((i) => !i._isShortcut).sortBy('priority'); + const extensions = A(items) + .filter((i) => !i._isShortcut) + .sortBy('priority'); const shortcuts = A(items).filter((i) => i._isShortcut); return A([...extensions, ...shortcuts]); } diff --git a/package.json b/package.json index e57e8d1..c62b2e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@fleetbase/ember-core", - "version": "0.3.16", + "version": "0.3.17", "description": "Provides all the core services, decorators and utilities for building a Fleetbase extension for the Console.", "keywords": [ "fleetbase-core",