From 67246c69e5a289c583925e9e14d15450ef897e32 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Sat, 4 Jul 2026 11:00:48 +0200 Subject: [PATCH] fix: settings mobile layout, silent failure on language save MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Settings sidebar was a fixed-width vertical list with no responsive breakpoint, squeezing the form into a sliver on mobile. Turn it into a horizontal scrollable tab bar under md, vertical sidebar above. - setLocale() fired the PATCH and swallowed the result with .catch(() => {}) — never checked res.ok, no success/failure feedback. A failed save (expired session, network blip) looked identical to a successful one. Now returns a boolean, reverts local state on failure, and the settings form toasts success/failure. Co-Authored-By: Claude Sonnet 5 --- apps/web/app/(app)/settings/layout.tsx | 2 +- .../web/components/settings/settings-form.tsx | 10 ++++++- .../components/settings/settings-sidebar.tsx | 8 +++--- apps/web/lib/i18n/provider.tsx | 28 +++++++++++++------ 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/apps/web/app/(app)/settings/layout.tsx b/apps/web/app/(app)/settings/layout.tsx index 2446339..270fe00 100644 --- a/apps/web/app/(app)/settings/layout.tsx +++ b/apps/web/app/(app)/settings/layout.tsx @@ -13,7 +13,7 @@ export default async function SettingsLayout({ children }: { children: React.Rea

{m.settings.title}

{m.settings.subtitle}

-
+
{children}
diff --git a/apps/web/components/settings/settings-form.tsx b/apps/web/components/settings/settings-form.tsx index b90b517..cb0b777 100644 --- a/apps/web/components/settings/settings-form.tsx +++ b/apps/web/components/settings/settings-form.tsx @@ -118,7 +118,15 @@ export function SettingsForm({ user }: { user: UserProps }) {

{t("language")}

{t("languageDescription")}

- { + void setLocale(v as Locale).then((ok) => { + if (ok) toast.success(t_common("saved")); + else toast.error(t_common("saveFailed")); + }); + }} + > diff --git a/apps/web/components/settings/settings-sidebar.tsx b/apps/web/components/settings/settings-sidebar.tsx index 17b4d0a..7fdfb48 100644 --- a/apps/web/components/settings/settings-sidebar.tsx +++ b/apps/web/components/settings/settings-sidebar.tsx @@ -21,16 +21,16 @@ export function SettingsSidebar() { const t = useTranslations("settings"); return ( -