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 <noreply@anthropic.com>
This commit is contained in:
@@ -111,6 +111,11 @@ export function CsvImportButton({ onImported }: CsvImportButtonProps) {
|
|||||||
{/* Import mode inline dialog (below button, per UI-SPEC) */}
|
{/* Import mode inline dialog (below button, per UI-SPEC) */}
|
||||||
{showDialog && selectedFile && (
|
{showDialog && selectedFile && (
|
||||||
<div className="absolute right-0 top-10 z-30 w-80 rounded border border-border bg-card p-4 shadow-md">
|
<div className="absolute right-0 top-10 z-30 w-80 rounded border border-border bg-card p-4 shadow-md">
|
||||||
|
<div className="mb-3 rounded bg-muted/50 px-3 py-2 text-xs text-muted-foreground space-y-0.5">
|
||||||
|
<p>{t('csvFormatHelp')}</p>
|
||||||
|
<p className="font-mono">{t('csvFormatExample')}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<p className="text-sm font-medium text-foreground mb-3">
|
<p className="text-sm font-medium text-foreground mb-3">
|
||||||
{t('importMode')}
|
{t('importMode')}
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -507,6 +507,7 @@ export function InboxConfigForm() {
|
|||||||
|
|
||||||
{/* Inline test feedback */}
|
{/* Inline test feedback */}
|
||||||
{testResult !== null && (
|
{testResult !== null && (
|
||||||
|
<div className="space-y-1">
|
||||||
<p
|
<p
|
||||||
className="text-sm"
|
className="text-sm"
|
||||||
style={{
|
style={{
|
||||||
@@ -521,6 +522,21 @@ export function InboxConfigForm() {
|
|||||||
error: testResult.message ?? 'Unbekannter Fehler',
|
error: testResult.message ?? 'Unbekannter Fehler',
|
||||||
})}
|
})}
|
||||||
</p>
|
</p>
|
||||||
|
{/* 401 hint for Exchange */}
|
||||||
|
{!testResult.success &&
|
||||||
|
form.protocol === 'exchange' &&
|
||||||
|
testResult.message?.includes('401') && (
|
||||||
|
<div className="rounded bg-muted/50 px-3 py-2 text-xs text-muted-foreground space-y-1">
|
||||||
|
<p className="font-medium">{t('form.exchangeAuthHint')}</p>
|
||||||
|
<ul className="list-disc list-inside space-y-0.5">
|
||||||
|
<li>{t('form.exchangeAuthHint1')}</li>
|
||||||
|
<li>{t('form.exchangeAuthHint2')}</li>
|
||||||
|
<li>{t('form.exchangeAuthHint3')}</li>
|
||||||
|
<li>{t('form.exchangeAuthHint4')}</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{/* Inline save feedback */}
|
{/* Inline save feedback */}
|
||||||
|
|||||||
@@ -296,6 +296,8 @@
|
|||||||
"deleteVehicle": "Fahrzeug loeschen",
|
"deleteVehicle": "Fahrzeug loeschen",
|
||||||
"deleteVehicleBody": "Das Fahrzeug {plate} wird dauerhaft aus der Stammdatenliste entfernt. Diese Aktion kann nicht rueckgaengig gemacht werden.",
|
"deleteVehicleBody": "Das Fahrzeug {plate} wird dauerhaft aus der Stammdatenliste entfernt. Diese Aktion kann nicht rueckgaengig gemacht werden.",
|
||||||
"importCsv": "CSV importieren",
|
"importCsv": "CSV importieren",
|
||||||
|
"csvFormatHelp": "CSV-Format (Semikolon): Kennzeichen;Marke;Modell;Fahrer",
|
||||||
|
"csvFormatExample": "Beispiel: GP-JL 728E;Mercedes;GLC 300;Max Mustermann",
|
||||||
"importMode": "Importmodus",
|
"importMode": "Importmodus",
|
||||||
"importMerge": "Zusammenfuehren — neue Fahrzeuge hinzufuegen, vorhandene behalten",
|
"importMerge": "Zusammenfuehren — neue Fahrzeuge hinzufuegen, vorhandene behalten",
|
||||||
"importReplace": "Ersetzen — alle vorhandenen Fahrzeuge loeschen und neu importieren",
|
"importReplace": "Ersetzen — alle vorhandenen Fahrzeuge loeschen und neu importieren",
|
||||||
@@ -337,7 +339,12 @@
|
|||||||
"cancel": "Bearbeitung abbrechen",
|
"cancel": "Bearbeitung abbrechen",
|
||||||
"cancelDialog": "Abbrechen",
|
"cancelDialog": "Abbrechen",
|
||||||
"showPassword": "Passwort anzeigen",
|
"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": {
|
"errors": {
|
||||||
"pollFailed": "Posteingang konnte nicht geprueft werden. Ueberpruefe die Konfiguration unter 'Moduleinstellungen > Posteingang'.",
|
"pollFailed": "Posteingang konnte nicht geprueft werden. Ueberpruefe die Konfiguration unter 'Moduleinstellungen > Posteingang'.",
|
||||||
|
|||||||
@@ -296,6 +296,8 @@
|
|||||||
"deleteVehicle": "Delete Vehicle",
|
"deleteVehicle": "Delete Vehicle",
|
||||||
"deleteVehicleBody": "Vehicle {plate} will be permanently removed from the master list. This action cannot be undone.",
|
"deleteVehicleBody": "Vehicle {plate} will be permanently removed from the master list. This action cannot be undone.",
|
||||||
"importCsv": "Import CSV",
|
"importCsv": "Import CSV",
|
||||||
|
"csvFormatHelp": "CSV format (semicolon): Kennzeichen;Marke;Modell;Fahrer",
|
||||||
|
"csvFormatExample": "Example: GP-JL 728E;Mercedes;GLC 300;Max Mustermann",
|
||||||
"importMode": "Import Mode",
|
"importMode": "Import Mode",
|
||||||
"importMerge": "Merge — add new vehicles, keep existing",
|
"importMerge": "Merge — add new vehicles, keep existing",
|
||||||
"importReplace": "Replace — delete all existing vehicles and re-import",
|
"importReplace": "Replace — delete all existing vehicles and re-import",
|
||||||
@@ -337,7 +339,12 @@
|
|||||||
"cancel": "Cancel Editing",
|
"cancel": "Cancel Editing",
|
||||||
"cancelDialog": "Cancel",
|
"cancelDialog": "Cancel",
|
||||||
"showPassword": "Show password",
|
"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": {
|
"errors": {
|
||||||
"pollFailed": "Could not check inbox. Review the configuration under 'Module Settings > Inbox'.",
|
"pollFailed": "Could not check inbox. Review the configuration under 'Module Settings > Inbox'.",
|
||||||
|
|||||||
Reference in New Issue
Block a user