## Summary Clicking **Compose** in the emails tab without a connected account redirects to the New Account settings page, but the settings nav drawer was left in its previous (collapsed / "main") state — producing a visibly half-broken transition. ### Root cause The "enter settings" preparation (memorize previous URL + drawer state, expand the desktop drawer, switch the mobile drawer to `'settings'`) was duplicated **inline in three different places**: - `NavigationDrawerOtherSection.handleSettingsClick` - `MultiWorkspaceDropdownDefaultComponents` Settings link - Implicitly expected (but missing) from every `useNavigateSettings` caller Every other entry point — `ComposeEmailButton`, `ComposeEmailCommand`, `AIChatCreditsExhaustedMessage`, several workflow/role components — just called `navigateSettings(...)` and skipped the prep entirely, reproducing the bug. ### Fix - Move the full prep into `useOpenSettingsMenu`, with a `useIsSettingsPage()` short-circuit so internal navigation doesn't clobber the memorized return target. - `useNavigateSettings` delegates to `openSettingsMenu()` before navigating — fixing every caller in one place. - Collapse the duplicated inline logic in `NavigationDrawerOtherSection` and `MultiWorkspaceDropdownDefaultComponents` to a single call. Net **−9 lines**, single source of truth, no behavior change for the existing happy paths. ## Test plan - [x] \`nx typecheck twenty-front\` passes - [x] \`oxlint\` + \`prettier\` clean on all 4 changed files - [x] Existing \`useNavigateSettings\` tests pass (4/4) - [ ] Manual: Compose button on a Person/Company/Opportunity emails tab with no connected account → settings drawer renders fully expanded, "Exit Settings" returns to the record - [ ] Manual: "Settings" entry in the main nav drawer still works (return path memorized) - [ ] Manual: "Settings" entry in the multi-workspace dropdown still works, and right-click → open in new tab still works (kept \`UndecoratedLink\`) - [ ] Manual: Navigating between settings pages does not overwrite the memorized return URL 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Run yarn dev while server running on port 3000