From 3b2a36cd616313bce95b0179a413cfd78a037ab3 Mon Sep 17 00:00:00 2001 From: Schalli Date: Mon, 29 Jun 2026 09:42:08 +0200 Subject: [PATCH] feat(07): add CSV format help text and Exchange 401 diagnostic hints - CSV import dialog shows format line + example before mode selection - Exchange connection test: on 401, inline hint lists common causes (wrong credentials, domain format, username prefix, O365 not supported) - Both de/en translations updated Co-Authored-By: Claude Sonnet 4.6 --- .../settings/components/CsvImportButton.tsx | 5 +++ .../settings/components/InboxConfigForm.tsx | 44 +++++++++++++------ apps/web/src/messages/de.json | 9 +++- apps/web/src/messages/en.json | 9 +++- 4 files changed, 51 insertions(+), 16 deletions(-) diff --git a/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/CsvImportButton.tsx b/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/CsvImportButton.tsx index bc2d7e3..3cd3dad 100644 --- a/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/CsvImportButton.tsx +++ b/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/CsvImportButton.tsx @@ -111,6 +111,11 @@ export function CsvImportButton({ onImported }: CsvImportButtonProps) { {/* Import mode inline dialog (below button, per UI-SPEC) */} {showDialog && selectedFile && (
+
+

{t('csvFormatHelp')}

+

{t('csvFormatExample')}

+
+

{t('importMode')}

diff --git a/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/InboxConfigForm.tsx b/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/InboxConfigForm.tsx index 8784ac6..c865bc3 100644 --- a/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/InboxConfigForm.tsx +++ b/apps/web/src/app/(portal)/modules/dkv-fleet/settings/components/InboxConfigForm.tsx @@ -507,20 +507,36 @@ export function InboxConfigForm() { {/* Inline test feedback */} {testResult !== null && ( -

- {testResult.success - ? t('form.testSuccess') - : t('form.testFailed', { - error: testResult.message ?? 'Unbekannter Fehler', - })} -

+
+

+ {testResult.success + ? t('form.testSuccess') + : t('form.testFailed', { + error: testResult.message ?? 'Unbekannter Fehler', + })} +

+ {/* 401 hint for Exchange */} + {!testResult.success && + form.protocol === 'exchange' && + testResult.message?.includes('401') && ( +
+

{t('form.exchangeAuthHint')}

+
    +
  • {t('form.exchangeAuthHint1')}
  • +
  • {t('form.exchangeAuthHint2')}
  • +
  • {t('form.exchangeAuthHint3')}
  • +
  • {t('form.exchangeAuthHint4')}
  • +
+
+ )} +
)} {/* Inline save feedback */} diff --git a/apps/web/src/messages/de.json b/apps/web/src/messages/de.json index eeeee96..dd19bb8 100644 --- a/apps/web/src/messages/de.json +++ b/apps/web/src/messages/de.json @@ -296,6 +296,8 @@ "deleteVehicle": "Fahrzeug loeschen", "deleteVehicleBody": "Das Fahrzeug {plate} wird dauerhaft aus der Stammdatenliste entfernt. Diese Aktion kann nicht rueckgaengig gemacht werden.", "importCsv": "CSV importieren", + "csvFormatHelp": "CSV-Format (Semikolon): Kennzeichen;Marke;Modell;Fahrer", + "csvFormatExample": "Beispiel: GP-JL 728E;Mercedes;GLC 300;Max Mustermann", "importMode": "Importmodus", "importMerge": "Zusammenfuehren — neue Fahrzeuge hinzufuegen, vorhandene behalten", "importReplace": "Ersetzen — alle vorhandenen Fahrzeuge loeschen und neu importieren", @@ -337,7 +339,12 @@ "cancel": "Bearbeitung abbrechen", "cancelDialog": "Abbrechen", "showPassword": "Passwort anzeigen", - "hidePassword": "Passwort verbergen" + "hidePassword": "Passwort verbergen", + "exchangeAuthHint": "401 — moegliche Ursachen:", + "exchangeAuthHint1": "Falsches Passwort oder Benutzername", + "exchangeAuthHint2": "Domain: Windows-Kurzname (z.B. FIRMA, nicht firma.de)", + "exchangeAuthHint3": "Benutzername ohne Domain-Praefix (z.B. 'max.muster', nicht 'FIRMA\\max.muster')", + "exchangeAuthHint4": "Office 365 / Exchange Online: EWS-Basisauthentifizierung seit Okt. 2022 deaktiviert — nicht unterstuetzt" }, "errors": { "pollFailed": "Posteingang konnte nicht geprueft werden. Ueberpruefe die Konfiguration unter 'Moduleinstellungen > Posteingang'.", diff --git a/apps/web/src/messages/en.json b/apps/web/src/messages/en.json index 9523932..6eebd96 100644 --- a/apps/web/src/messages/en.json +++ b/apps/web/src/messages/en.json @@ -296,6 +296,8 @@ "deleteVehicle": "Delete Vehicle", "deleteVehicleBody": "Vehicle {plate} will be permanently removed from the master list. This action cannot be undone.", "importCsv": "Import CSV", + "csvFormatHelp": "CSV format (semicolon): Kennzeichen;Marke;Modell;Fahrer", + "csvFormatExample": "Example: GP-JL 728E;Mercedes;GLC 300;Max Mustermann", "importMode": "Import Mode", "importMerge": "Merge — add new vehicles, keep existing", "importReplace": "Replace — delete all existing vehicles and re-import", @@ -337,7 +339,12 @@ "cancel": "Cancel Editing", "cancelDialog": "Cancel", "showPassword": "Show password", - "hidePassword": "Hide password" + "hidePassword": "Hide password", + "exchangeAuthHint": "401 — possible causes:", + "exchangeAuthHint1": "Wrong password or username", + "exchangeAuthHint2": "Domain: Windows short name (e.g. COMPANY, not company.com)", + "exchangeAuthHint3": "Username without domain prefix (e.g. 'max.muster', not 'COMPANY\\max.muster')", + "exchangeAuthHint4": "Office 365 / Exchange Online: EWS basic auth disabled since Oct 2022 — not supported" }, "errors": { "pollFailed": "Could not check inbox. Review the configuration under 'Module Settings > Inbox'.",