Fix: Provider-Domain greift sofort + Domain-Validierung
Problem: Nach dem Ändern der Provider-Domain blieb die alte Domain (stressfrei-wechseln.de) im Adress-Hinzufügen-Dialog bestehen, weil der Frontend-Hook useProviderSettings() einen 5-Minuten staleTime hat und nicht invalidiert wurde. Fix: - In allen Provider-Mutations (create/update/delete) wird jetzt auch 'email-provider-public-settings' invalidiert → Domain & Label greifen sofort in allen Komponenten Zusätzlich Domain-Validierung eingebaut: - Frontend: pattern am Input + Live-Fehlermeldung Format: name.tld (mit Subdomains erlaubt, z.B. mail.meine-firma.de) Input auto-lowercase + trim - Backend: validateDomain() in createProviderConfig/updateProviderConfig Wirft Error mit sprechender Meldung bei ungültigem Format - Schützt vor Versehen im UI + direkten API-Aufrufen Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -101,6 +101,7 @@ export default function EmailProviders() {
|
||||
emailProviderApi.createConfig(data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['email-provider-configs'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['email-provider-public-settings'] });
|
||||
closeModal();
|
||||
},
|
||||
});
|
||||
@@ -110,6 +111,7 @@ export default function EmailProviders() {
|
||||
emailProviderApi.updateConfig(id, data),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['email-provider-configs'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['email-provider-public-settings'] });
|
||||
closeModal();
|
||||
},
|
||||
});
|
||||
@@ -118,6 +120,7 @@ export default function EmailProviders() {
|
||||
mutationFn: (id: number) => emailProviderApi.deleteConfig(id),
|
||||
onSuccess: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['email-provider-configs'] });
|
||||
queryClient.invalidateQueries({ queryKey: ['email-provider-public-settings'] });
|
||||
},
|
||||
});
|
||||
|
||||
@@ -547,13 +550,27 @@ export default function EmailProviders() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Input
|
||||
label="Domain *"
|
||||
value={formData.domain}
|
||||
onChange={(e) => setFormData({ ...formData, domain: e.target.value })}
|
||||
placeholder="stressfrei-wechseln.de"
|
||||
required
|
||||
/>
|
||||
<div>
|
||||
<Input
|
||||
label="Domain *"
|
||||
value={formData.domain}
|
||||
onChange={(e) =>
|
||||
setFormData({ ...formData, domain: e.target.value.toLowerCase().trim() })
|
||||
}
|
||||
placeholder="stressfrei-wechseln.de"
|
||||
required
|
||||
pattern="^[a-z0-9]([a-z0-9\-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9\-]*[a-z0-9])?)+$"
|
||||
title="Gültige Domain erforderlich, z.B. meine-firma.de oder mail.beispiel.com"
|
||||
/>
|
||||
{formData.domain &&
|
||||
!/^[a-z0-9]([a-z0-9\-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9\-]*[a-z0-9])?)+$/.test(
|
||||
formData.domain,
|
||||
) && (
|
||||
<p className="text-xs text-red-600 mt-1">
|
||||
Keine gültige Domain – Format: name.tld (z.B. meine-firma.de)
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<Input
|
||||
label="Bezeichnung für Kunden-E-Mails (UI-Label)"
|
||||
|
||||
Reference in New Issue
Block a user