From 092533eb6b9afbc4a371c5b7cf80daf046b47b13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Brand=C3=A3o?= Date: Wed, 11 Nov 2026 02:08:29 -0300 Subject: [PATCH 1/2] feat(dashboard): Account preferences at the top of the user menu and account page split into tabs --- .../src/components/shell/UserMenu.tsx | 6 +- packages/frontend/src/pages/Account.tsx | 176 +++++++++++------- .../frontend/tests/pages/Account.test.tsx | 76 ++++++-- 3 files changed, 173 insertions(+), 85 deletions(-) diff --git a/packages/frontend/src/components/shell/UserMenu.tsx b/packages/frontend/src/components/shell/UserMenu.tsx index e10e8fe2..66c1573e 100644 --- a/packages/frontend/src/components/shell/UserMenu.tsx +++ b/packages/frontend/src/components/shell/UserMenu.tsx @@ -83,6 +83,9 @@ export default function UserMenu() {
{name}
{user?.email ?
{user.email}
: null} + } to="/account"> + {t('nav.accountPreferences')} + {t('shell.user.organization')} {org ? ( @@ -153,9 +156,6 @@ export default function UserMenu() { CLI - } to="/account"> - {t('nav.accountPreferences')} - } danger onSelect={() => void signOut()}> {t('nav.logOut')} diff --git a/packages/frontend/src/pages/Account.tsx b/packages/frontend/src/pages/Account.tsx index e30d1c61..f4ed7eb0 100644 --- a/packages/frontend/src/pages/Account.tsx +++ b/packages/frontend/src/pages/Account.tsx @@ -1,5 +1,5 @@ import { useState, type FormEvent, type ReactNode } from 'react'; -import { useNavigate } from 'react-router'; +import { useNavigate, useSearchParams } from 'react-router'; import { ChevronLeft, Monitor, Moon, Sun } from 'lucide-react'; import { authClient } from '../services/auth-client.js'; import { toast } from '../services/toast-store.js'; @@ -8,7 +8,9 @@ import { setThemePreference, themePreference, type ThemePreference } from '../li import { useSignal } from '../lib/signal.js'; import { useResource } from '../lib/use-resource.js'; import CopyButton from '../components/CopyButton.js'; -import { Button, Field, Panel } from '../components/ui.js'; +import { Button, Field, Panel, Tabs, type TabItem } from '../components/ui.js'; + +type AccountTab = 'profile' | 'security' | 'workspace' | 'appearance' | 'language'; const THEMES: Array<{ value: ThemePreference; label: () => string; icon: ReactNode }> = [ { value: 'light', label: () => t('account.appearance.light'), icon: