Vertrag-Zugangsdaten: Externtab-Links neben Stressfrei-Select

Rechts neben dem Stressfrei-Adressen-Dropdown sitzen jetzt zwei
kleine Icon-Links (nur bei gewähltem Kunden sichtbar):
- ExternalLink → öffnet den Stressfrei-Tab des Kunden im neuen Tab
  (dort kann man die Adressen anlegen/pflegen)
- Mail → öffnet den E-Mail-Postfach-Tab des Kunden im neuen Tab

Damit muss man beim Vertragserstellen nicht mehr die Seite
wechseln, um schnell eine Stressfrei-Adresse anzulegen oder ins
Postfach zu springen.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-07-09 13:34:55 +02:00
co-authored by Claude Opus 4.7
parent e7f9aa65d4
commit eeb89e09db
+38 -10
View File
@@ -15,7 +15,7 @@ import { buildContractLabelParts } from '../../utils/contractLabel';
import type { ContractType } from '../../types';
import { formatDate } from '../../utils/dateFormat';
import { useProviderSettings } from '../../hooks/useProviderSettings';
import { Plus, Trash2, Eye, EyeOff, Info, X, ArrowLeft, ExternalLink } from 'lucide-react';
import { Plus, Trash2, Eye, EyeOff, Info, X, ArrowLeft, ExternalLink, Mail } from 'lucide-react';
// Kleine Helper-Komponente: Label + Mini-Link im neuen Tab. Wird neben
// Select-Feldern eingesetzt, deren Stammdaten an anderer Stelle gepflegt
@@ -1116,15 +1116,43 @@ export default function ContractForm() {
<span className="text-sm">{customerEmailLabel} Adresse</span>
</label>
{usernameType === 'stressfrei' && (
<Select
value={selectedStressfreiEmailId}
onChange={(e) => setSelectedStressfreiEmailId(e.target.value)}
options={stressfreiEmails.map((e: { id: number; email: string; notes?: string }) => ({
value: e.id,
label: e.email + (e.notes ? ` (${e.notes})` : ''),
}))}
placeholder={stressfreiEmails.length === 0 ? 'Keine Stressfrei-Adressen vorhanden' : 'Adresse auswählen...'}
/>
<div className="flex items-start gap-2">
<div className="flex-1 min-w-0">
<Select
value={selectedStressfreiEmailId}
onChange={(e) => setSelectedStressfreiEmailId(e.target.value)}
options={stressfreiEmails.map((e: { id: number; email: string; notes?: string }) => ({
value: e.id,
label: e.email + (e.notes ? ` (${e.notes})` : ''),
}))}
placeholder={stressfreiEmails.length === 0 ? 'Keine Stressfrei-Adressen vorhanden' : 'Adresse auswählen...'}
/>
</div>
{customerId && (
<div className="flex items-center gap-1 pt-1.5 flex-shrink-0">
<a
href={`/customers/${customerId}?tab=stressfrei`}
target="_blank"
rel="noopener noreferrer"
title={`${customerEmailLabel} Adressen des Kunden in neuem Tab öffnen`}
aria-label={`${customerEmailLabel} Adressen des Kunden in neuem Tab öffnen`}
className="text-gray-400 hover:text-blue-600 p-1 rounded"
>
<ExternalLink className="w-4 h-4" />
</a>
<a
href={`/customers/${customerId}?tab=emails`}
target="_blank"
rel="noopener noreferrer"
title="E-Mail-Postfach des Kunden in neuem Tab öffnen"
aria-label="E-Mail-Postfach des Kunden in neuem Tab öffnen"
className="text-gray-400 hover:text-blue-600 p-1 rounded"
>
<Mail className="w-4 h-4" />
</a>
</div>
)}
</div>
)}
{usernameType === 'stressfrei' && stressfreiEmails.length === 0 && (
<p className="text-xs text-amber-600">