From 8cb8b4650439b42abeba716d128d7660254729b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Janou=C5=A1ek?= Date: Thu, 24 Sep 2026 19:29:59 +0200 Subject: [PATCH] Show the effective time zone in user details Resolve an unset user preference through the configured server zone so admins see a concrete IANA zone instead of a generic default label. Preserve explicit preferences and account editing behavior. --- e2e/specs/admin/user_detail_page.spec.ts | 4 +++- src/pages/app/admin/user/AdminUserOverviewPage.tsx | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/e2e/specs/admin/user_detail_page.spec.ts b/e2e/specs/admin/user_detail_page.spec.ts index c8ed84b5..b02578ff 100644 --- a/e2e/specs/admin/user_detail_page.spec.ts +++ b/e2e/specs/admin/user_detail_page.spec.ts @@ -7,7 +7,7 @@ test('admin user detail: shows header and shortcut links', async ({ page }) => { await bootstrapVpsAdminWindow(page); await installHaveApiMock(page, { - user: { id: 1, login: 'admin', level: 100 }, + user: { id: 1, login: 'admin', level: 100, time_zone: 'Asia/Tokyo' }, handlers: { 'GET users/42': () => ({ user: { @@ -29,6 +29,7 @@ test('admin user detail: shows header and shortcut links', async ({ page }) => { await expect(page.getByTestId('admin.user.page')).toBeVisible(); await expect(page.getByTestId('admin.user.header')).toBeVisible(); + await expect(page.getByTestId('admin.user.time_zone')).toHaveText('Europe/Prague'); await expect(page.getByTestId('admin.user.action.vps')).toHaveAttribute('href', '/admin/vps?user=42'); await expect(page.getByTestId('admin.user.action.vps_count')).toHaveText('7'); @@ -142,6 +143,7 @@ test('admin user detail: edit drawer saves safe account fields', async ({ page } await expect(page.getByTestId('admin.user.edit.drawer')).toHaveCount(0); await expect(page.getByTestId('admin.user.details.card').getByText('Alice Renamed')).toBeVisible(); + await expect(page.getByTestId('admin.user.time_zone')).toHaveText('UTC'); expect(updates).toEqual([ { user: { diff --git a/src/pages/app/admin/user/AdminUserOverviewPage.tsx b/src/pages/app/admin/user/AdminUserOverviewPage.tsx index e1dc3f99..2fa4deaa 100644 --- a/src/pages/app/admin/user/AdminUserOverviewPage.tsx +++ b/src/pages/app/admin/user/AdminUserOverviewPage.tsx @@ -4,7 +4,7 @@ import { useMutation, useQuery } from '@tanstack/react-query'; import { useAppMode } from '../../../../app/appMode'; import { useAuth } from '../../../../app/auth'; import { useI18n } from '../../../../app/i18n'; -import { useAccountTimeZone } from '../../../../app/accountTimeZone'; +import { resolveAccountTimeZone, useAccountTimeZone, useServerTimeZone } from '../../../../app/accountTimeZone'; import { useToasts } from '../../../../app/toasts'; import { Alert } from '../../../../components/ui/Alert'; @@ -99,6 +99,7 @@ export function AdminUserOverviewPage() { const { basePath } = useAppMode(); const { t } = useI18n(); const accountTimeZone = useAccountTimeZone(); + const serverTimeZone = useServerTimeZone(); const toasts = useToasts(); const { user: u, refetch } = useAdminUserContext(); const [editOpen, setEditOpen] = useState(false); @@ -313,7 +314,7 @@ export function AdminUserOverviewPage() {
{t('admin.user.edit.field.time_zone')}
-
{typeof u.time_zone === 'string' && u.time_zone.trim() ? u.time_zone : t('admin.user.edit.field.time_zone.default')}
+
{resolveAccountTimeZone(u.time_zone, serverTimeZone)}
{t('admin.user.field.created')}