diff --git a/ui/src/lib/inbox.test.ts b/ui/src/lib/inbox.test.ts index f34f2a7b..2ba6b3d9 100644 --- a/ui/src/lib/inbox.test.ts +++ b/ui/src/lib/inbox.test.ts @@ -24,6 +24,7 @@ import { loadLastInboxTab, normalizeInboxIssueColumns, RECENT_ISSUES_LIMIT, + resolveInboxNestingEnabled, resolveIssueWorkspaceName, resolveInboxSelectionIndex, saveInboxIssueColumns, @@ -520,6 +521,19 @@ describe("inbox helpers", () => { expect(loadLastInboxTab()).toBe("all"); }); + it("keeps nesting enabled on desktop when the saved preference is on", () => { + expect(resolveInboxNestingEnabled(true, false)).toBe(true); + }); + + it("forces nesting off on mobile even when the saved preference is on", () => { + expect(resolveInboxNestingEnabled(true, true)).toBe(false); + }); + + it("keeps nesting off when the saved preference is off", () => { + expect(resolveInboxNestingEnabled(false, false)).toBe(false); + expect(resolveInboxNestingEnabled(false, true)).toBe(false); + }); + it("defaults issue columns to the current inbox layout", () => { expect(loadInboxIssueColumns()).toEqual(DEFAULT_INBOX_ISSUE_COLUMNS); }); diff --git a/ui/src/lib/inbox.ts b/ui/src/lib/inbox.ts index 925870cb..4411a215 100644 --- a/ui/src/lib/inbox.ts +++ b/ui/src/lib/inbox.ts @@ -169,6 +169,10 @@ export function saveInboxNesting(enabled: boolean) { } } +export function resolveInboxNestingEnabled(preferenceEnabled: boolean, isMobile: boolean): boolean { + return preferenceEnabled && !isMobile; +} + export function loadLastInboxTab(): InboxTab { try { const raw = localStorage.getItem(INBOX_LAST_TAB_KEY); diff --git a/ui/src/pages/Inbox.tsx b/ui/src/pages/Inbox.tsx index 9f9704ef..8926dd0e 100644 --- a/ui/src/pages/Inbox.tsx +++ b/ui/src/pages/Inbox.tsx @@ -16,6 +16,7 @@ import { projectsApi } from "../api/projects"; import { useCompany } from "../context/CompanyContext"; import { useBreadcrumbs } from "../context/BreadcrumbContext"; import { useGeneralSettings } from "../context/GeneralSettingsContext"; +import { useSidebar } from "../context/SidebarContext"; import { queryKeys } from "../lib/queryKeys"; import { armIssueDetailInboxQuickArchive, @@ -87,6 +88,7 @@ import { loadInboxIssueColumns, loadInboxNesting, normalizeInboxIssueColumns, + resolveInboxNestingEnabled, resolveIssueWorkspaceName, resolveInboxSelectionIndex, saveInboxIssueColumns, @@ -579,6 +581,7 @@ function JoinRequestInboxRow({ export function Inbox() { const { selectedCompanyId } = useCompany(); const { setBreadcrumbs } = useBreadcrumbs(); + const { isMobile } = useSidebar(); const navigate = useNavigate(); const location = useLocation(); const queryClient = useQueryClient(); @@ -911,9 +914,10 @@ export function Inbox() { ]); // --- Parent-child nesting for inbox issues --- - const [nestingEnabled, setNestingEnabled] = useState(() => loadInboxNesting()); + const [nestingPreferenceEnabled, setNestingPreferenceEnabled] = useState(() => loadInboxNesting()); + const nestingEnabled = resolveInboxNestingEnabled(nestingPreferenceEnabled, isMobile); const toggleNesting = useCallback(() => { - setNestingEnabled((prev) => { + setNestingPreferenceEnabled((prev) => { const next = !prev; saveInboxNesting(next); return next;