From ba0c519b001a3b427f7b90e1229675bad27a6d0a Mon Sep 17 00:00:00 2001 From: sysops Date: Tue, 7 Jul 2026 00:43:53 +0200 Subject: [PATCH] =?UTF-8?q?docs(PROJ-70):=20Implementation=20Notes=20f?= =?UTF-8?q?=C3=BCr=20Frontend=20erg=C3=A4nzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 5 --- .../PROJ-70-imap-rueckholung-self-service.md | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/features/PROJ-70-imap-rueckholung-self-service.md b/features/PROJ-70-imap-rueckholung-self-service.md index 4d3f736..4b8f662 100644 --- a/features/PROJ-70-imap-rueckholung-self-service.md +++ b/features/PROJ-70-imap-rueckholung-self-service.md @@ -110,13 +110,31 @@ Mail- und IMAP-Handler dupliziert): Versuch (Erfolg und Fehlschlag) inkl. Mail-ID. - Kein Schreibzugriff auf `internal/imapserver` (Archiv-Server) — nur lesendes `storage.Load()` plus schreibender Client gegen das externe Postfach. -- **Offen (Frontend, noch nicht umgesetzt):** Schieberegler + Passwort-Dialog für - Opt-in, Restore-Button in `/mail/[id]`, Auswahl des Ziel-IMAP-Kontos falls - mehrere hinterlegt sind. `GET /api/auth/me` liefert bereits `imap_restore_enabled` - im Response (siehe `auth_handlers.go`), Frontend kann das für Sichtbarkeit nutzen. - Nicht lokal kompilierbar/testbar (kein Go-Toolchain lokal) — Verifikation von `go vet`/Kompilierung steht auf Test-Server (132) noch aus. +**Frontend (Commit 4b3a4ef):** + +- `src/hooks/useImapRestore.ts` (neu): State-Hook für den Opt-in-Schalter — + AN löst Passwort-Dialog aus, AUS deaktiviert direkt ohne Passwort; Regler + springt bei Fehler (falsches Passwort, LDAP-Account) auf AUS zurück. +- `src/components/settings/ImapRestoreSection.tsx` (neu): shadcn `Switch` + + `Dialog` mit Passwortfeld, Loading/Error/Success-States. Eingebunden in + `src/app/settings/page.tsx`, `onChanged` triggert `useAuth().refresh()`. +- `src/components/mail/RestoreMailButton.tsx` (neu): Button "Zurück ins + Postfach" in `src/app/mail/[id]/page.tsx` — nur sichtbar bei + `imap_restore_enabled=true` und ≥1 IMAP-Konto; bei mehreren Konten `Select` + zur Zielwahl; zeigt die 422-Klartextfehlermeldung vom Server per shadcn + `Alert` (kein Toast-System im Repo vorhanden). +- `src/lib/api/users.ts`: `MeResponse.imap_restore_enabled?: boolean`, neue + `setImapRestore()`. +- `src/lib/api/mail.ts`: `RestoreResult`-Interface + `restoreMail()` (eigener + `fetch`, um das `error`-JSON-Feld als `Error.message` durchzureichen). +- `npx tsc --noEmit -p .` lief sauber durch (Exit 0). + +**Noch offen:** QA gegen Acceptance Criteria (insb. Tenant-Isolation-Test, +Sichtbarkeits-Gating), Kompilierung/Deploy auf 132. + ## QA Test Results _wird nach Umsetzung ergänzt._