From b25ee09f7dd71dd0f8540582b3127e802db69fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Wed, 21 Oct 2026 21:50:13 +0200 Subject: [PATCH] fix(settings): keep moved checkup and session cards reachable in context The checkups page links to the checkup reminders under Notifications and the screening hints under the health profile, the two cards that left its settings in this release. Data & privacy gets a row pointing at sessions and devices under Security. --- messages/de.json | 5 +++ messages/en.json | 5 +++ messages/es.json | 5 +++ messages/fr.json | 5 +++ messages/it.json | 5 +++ messages/ko.json | 5 +++ messages/nl.json | 5 +++ messages/pl.json | 5 +++ .../__tests__/vorsorge-section.test.tsx | 10 ++++++ .../vorsorge-section.tsx | 33 ++++++++++++++++++- .../__tests__/privacy-section.test.tsx | 2 ++ src/components/settings/privacy-section.tsx | 20 +++++++++++ 12 files changed, 104 insertions(+), 1 deletion(-) diff --git a/messages/de.json b/messages/de.json index 925dd1686..b15ed4084 100644 --- a/messages/de.json +++ b/messages/de.json @@ -7239,6 +7239,11 @@ "title": "Datenschutz-Einstellung", "description": "Steuere, wie viele deiner Daten an KI-Funktionen weitergegeben werden.", "openAi": "KI-Datenschutzmodus" + }, + "sessions": { + "title": "Sitzungen und Geräte", + "description": "Wo du angemeldet bist, welche Geräte den zweiten Faktor überspringen, und die Sicherheitsaktivität deines Kontos.", + "open": "Sicherheit öffnen" } }, "mcp": { diff --git a/messages/en.json b/messages/en.json index 275e51c39..288b95b00 100644 --- a/messages/en.json +++ b/messages/en.json @@ -7239,6 +7239,11 @@ "title": "Privacy posture", "description": "Control how much of your data is shared with AI features.", "openAi": "AI privacy mode" + }, + "sessions": { + "title": "Sessions and devices", + "description": "Where you are signed in, the devices that skip the second factor, and the security activity of your account.", + "open": "Open security" } }, "mcp": { diff --git a/messages/es.json b/messages/es.json index 2b08e49a8..3fc3cfcab 100644 --- a/messages/es.json +++ b/messages/es.json @@ -7239,6 +7239,11 @@ "title": "Configuración de privacidad", "description": "Controla cuántos de tus datos se comparten con las funciones de IA.", "openAi": "Modo de privacidad de IA" + }, + "sessions": { + "title": "Sesiones y dispositivos", + "description": "Dónde tienes la sesión iniciada, qué dispositivos omiten el segundo factor y la actividad de seguridad de tu cuenta.", + "open": "Abrir seguridad" } }, "mcp": { diff --git a/messages/fr.json b/messages/fr.json index 7df4a74fe..3121be5a9 100644 --- a/messages/fr.json +++ b/messages/fr.json @@ -7239,6 +7239,11 @@ "title": "Posture de confidentialité", "description": "Contrôlez la quantité de données partagées avec les fonctions d'IA.", "openAi": "Mode confidentialité IA" + }, + "sessions": { + "title": "Sessions et appareils", + "description": "Où tu es connecté, les appareils qui sautent le second facteur et l'activité de sécurité de ton compte.", + "open": "Ouvrir la sécurité" } }, "mcp": { diff --git a/messages/it.json b/messages/it.json index 6dd7ff8a7..aa59f96eb 100644 --- a/messages/it.json +++ b/messages/it.json @@ -7239,6 +7239,11 @@ "title": "Impostazione privacy", "description": "Controlla quanti dei tuoi dati vengono condivisi con le funzioni di IA.", "openAi": "Modalità privacy IA" + }, + "sessions": { + "title": "Sessioni e dispositivi", + "description": "Dove hai effettuato l'accesso, i dispositivi che saltano il secondo fattore e l'attività di sicurezza del tuo account.", + "open": "Apri sicurezza" } }, "mcp": { diff --git a/messages/ko.json b/messages/ko.json index 5b88aee4e..3356413fa 100644 --- a/messages/ko.json +++ b/messages/ko.json @@ -7239,6 +7239,11 @@ "title": "개인정보 보호 수준", "description": "AI 기능에 데이터를 어디까지 공유할지 정해요.", "openAi": "AI 개인정보 모드" + }, + "sessions": { + "title": "세션 및 기기", + "description": "로그인된 위치, 2단계 인증을 건너뛰는 기기, 계정의 보안 활동을 확인해요.", + "open": "보안 열기" } }, "mcp": { diff --git a/messages/nl.json b/messages/nl.json index 72dc4a3d4..8f8e2aaee 100644 --- a/messages/nl.json +++ b/messages/nl.json @@ -7239,6 +7239,11 @@ "title": "Privacyniveau", "description": "Bepaal hoeveel van je gegevens met AI-functies wordt gedeeld.", "openAi": "AI-privacymodus" + }, + "sessions": { + "title": "Sessies en apparaten", + "description": "Waar je bent ingelogd, welke apparaten de tweede factor overslaan en de beveiligingsactiviteit van je account.", + "open": "Beveiliging openen" } }, "mcp": { diff --git a/messages/pl.json b/messages/pl.json index f1b04e0bc..2e6a1501f 100644 --- a/messages/pl.json +++ b/messages/pl.json @@ -7239,6 +7239,11 @@ "title": "Ustawienia prywatności", "description": "Kontroluj, ile Twoich danych jest udostępnianych funkcjom AI.", "openAi": "Tryb prywatności AI" + }, + "sessions": { + "title": "Sesje i urządzenia", + "description": "Gdzie jesteś zalogowany, które urządzenia pomijają drugi składnik i aktywność zabezpieczeń twojego konta.", + "open": "Otwórz zabezpieczenia" } }, "mcp": { diff --git a/src/components/measurement-reminders/__tests__/vorsorge-section.test.tsx b/src/components/measurement-reminders/__tests__/vorsorge-section.test.tsx index 72d5004fa..cd520529c 100644 --- a/src/components/measurement-reminders/__tests__/vorsorge-section.test.tsx +++ b/src/components/measurement-reminders/__tests__/vorsorge-section.test.tsx @@ -114,6 +114,16 @@ describe(" loading + empty", () => { expect(html).not.toContain('data-slot="vorsorge-loading"'); }); + it("links the checkups page to the reminder and screening settings that moved", () => { + remindersMock.mockReturnValue({ data: [], isLoading: false }); + const page = render(); + expect(page).toContain('href="/settings/notifications#vorsorge-reminders"'); + expect(page).toContain('href="/settings/anamnesis#screening-hints"'); + // The embedded settings card is already in Settings and carries no links. + const embedded = render(); + expect(embedded).not.toContain('data-slot="vorsorge-settings-links"'); + }); + it("renders reminder cards once data lands", () => { const reminder: MeasurementReminder = { id: "r1", diff --git a/src/components/measurement-reminders/vorsorge-section.tsx b/src/components/measurement-reminders/vorsorge-section.tsx index d813ebbcd..654cc6f9d 100644 --- a/src/components/measurement-reminders/vorsorge-section.tsx +++ b/src/components/measurement-reminders/vorsorge-section.tsx @@ -465,7 +465,38 @@ export function VorsorgeSection({ } /> - ) : ( + ) : null} + {variant === "page" && !inSharedRecord ? ( + // The reminder switches and the screening hints moved out of the + // checkups settings in v1.44 (Notifications, Health profile); both + // stay one tap away from the page they are about. +
+ + +
+ ) : null} + {variant === "page" ? null : ( — assembled Data & Privacy dashboard", () => { expect(html).not.toContain("settings-security-sessions-card"); expect(html).not.toContain("settings-trusted-devices-card"); expect(html).not.toContain('href="/settings/export"'); + // ...but stay one tap away from here, where people looked for them. + expect(html).toContain('href="/settings/security#sessions"'); }); it("shows a loading placeholder for the retention block before the summary resolves", () => { diff --git a/src/components/settings/privacy-section.tsx b/src/components/settings/privacy-section.tsx index c0653da6a..852dbb4ce 100644 --- a/src/components/settings/privacy-section.tsx +++ b/src/components/settings/privacy-section.tsx @@ -23,6 +23,7 @@ import { Clock, Sparkles, Info, + MonitorSmartphone, } from "lucide-react"; import { Button } from "@/components/ui/button"; @@ -180,6 +181,25 @@ export function PrivacySection() { )} + {/* Sessions, trusted devices and the security activity live under + Security since v1.44; the row keeps them reachable from here, where + people looked for them before. */} + + + + + + + {/* Delete / reset — with the honest backup lag disclosure */}