diff --git a/.changeset/fn-8250-mobile-more-settings.md b/.changeset/fn-8250-mobile-more-settings.md new file mode 100644 index 0000000000..1d57a74da3 --- /dev/null +++ b/.changeset/fn-8250-mobile-more-settings.md @@ -0,0 +1,7 @@ +--- +"@runfusion/fusion": patch +--- + +summary: Mobile "More" menu now pins Settings to the bottom below the divider. +category: fix +dev: MobileNavBar renders the omitted `settings` destination after `.mobile-more-separator` instead of inline. diff --git a/packages/dashboard/app/components/MobileNavBar.tsx b/packages/dashboard/app/components/MobileNavBar.tsx index 713a245f75..a664476ff3 100644 --- a/packages/dashboard/app/components/MobileNavBar.tsx +++ b/packages/dashboard/app/components/MobileNavBar.tsx @@ -626,7 +626,9 @@ export function MobileNavBar({ - {effectiveOmittedItems.map((item) => renderSelectableItem(item, "more"))} + {effectiveOmittedItems + .filter((item) => item !== "settings") + .map((item) => renderSelectableItem(item, "more"))} {overflowPluginViews.map((entry) => { const pluginTaskView = buildPluginTaskViewId(entry.pluginId, entry.view.viewId); @@ -646,6 +648,13 @@ export function MobileNavBar({ })}
+ {/* + FNXC:Navigation 2026-07-17-15:43: + Mobile More-sheet pins Settings below the `mobile-more-separator` divider so it stays at the bottom of + the list (FN-8250), not inline in the middle. The omitted-items guard prevents a duplicate when Settings + is promoted to a primary footer tab. + */} + {effectiveOmittedItems.includes("settings") && renderSelectableItem("settings", "more")}
diff --git a/packages/dashboard/app/components/__tests__/MobileNavBar.test.tsx b/packages/dashboard/app/components/__tests__/MobileNavBar.test.tsx index aaaa1af93b..54c9169266 100644 --- a/packages/dashboard/app/components/__tests__/MobileNavBar.test.tsx +++ b/packages/dashboard/app/components/__tests__/MobileNavBar.test.tsx @@ -703,6 +703,28 @@ describe("MobileNavBar", () => { expect(screen.getByTestId("mobile-more-item-settings")).toBeDefined(); }); + it("pins omitted Settings below the More divider as the final selectable item", () => { + const { container } = render(); + fireEvent.click(screen.getByTestId("mobile-nav-tab-more")); + + const sheet = container.querySelector(".mobile-more-sheet"); + const separator = sheet?.querySelector(".mobile-more-separator"); + const settings = screen.getByTestId("mobile-more-item-settings"); + + expect(sheet).toBeInTheDocument(); + expect(separator).toBeInTheDocument(); + expect(separator!.compareDocumentPosition(settings) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy(); + expect(Array.from(sheet!.querySelectorAll(".mobile-more-item")).at(-1)).toBe(settings); + }); + + it("does not duplicate Settings in More when Settings is a primary tab", () => { + render(); + + expect(screen.getByTestId("mobile-nav-tab-settings")).toBeInTheDocument(); + fireEvent.click(screen.getByTestId("mobile-nav-tab-more")); + expect(screen.queryByTestId("mobile-more-item-settings")).toBeNull(); + }); + it("shows the stash orphan badge on the Git Manager item instead of a Stash Recovery item", () => { render(); fireEvent.click(screen.getByTestId("mobile-nav-tab-more"));