cdde7b4ab7
Alle hardcoded Referenzen auf 'stressfrei-wechseln.de' und 'Stressfrei-Wechseln'
durch dynamische Werte aus der EmailProviderConfig ersetzt. Notwendig für
Multi-Mandanten-Betrieb, wenn das CRM an Dritte vermietet wird.
Schema:
- Neues Feld EmailProviderConfig.customerEmailLabel (String?)
- Wenn leer, wird Label aus Domain abgeleitet ('stressfrei-wechseln.de' → 'Stressfrei-Wechseln')
Backend:
- Neuer Endpoint GET /api/email-providers/public-settings liefert { domain, customerEmailLabel }
- Neue Service-Funktionen: getProviderPublicSettings(), deriveLabelFromDomain()
- create/updateProviderConfig erweitert um customerEmailLabel
Frontend:
- Neuer Hook useProviderSettings() mit Auto-Caching
- Neues Eingabefeld 'Bezeichnung für Kunden-E-Mails' im Provider-Modal
- Dynamische Domain-Suffix im Adress-Hinzufügen-Dialog (@<domain>)
- Tab-Label 'Stressfrei-Wechseln' im Kunden-Detail → dynamisch
- 'Stressfrei-Wechseln Adresse' in ContractForm → dynamisch
- '(Stressfrei-Wechseln)' Badge in ContractDetail → dynamisch
- 'Stressfrei-Wechseln E-Mail' im Generate-Modal → dynamisch
- Leere-Zustand-Meldungen in Tab und E-Mail-Client → dynamisch
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
27 lines
944 B
TypeScript
27 lines
944 B
TypeScript
import { useQuery } from '@tanstack/react-query';
|
||
import { emailProviderApi } from '../services/api';
|
||
|
||
export interface ProviderSettings {
|
||
domain: string | null;
|
||
customerEmailLabel: string; // z.B. "Stressfrei-Wechseln" (aus Config oder aus Domain abgeleitet)
|
||
customerEmailLabelIsCustom: boolean;
|
||
}
|
||
|
||
/**
|
||
* Holt die öffentlichen Provider-Einstellungen (Domain + Label für Kunden-E-Mail-Adressen).
|
||
* Mit Default-Fallback bei Ladefehler – UI-Labels werden dann generisch angezeigt.
|
||
*/
|
||
export function useProviderSettings(): ProviderSettings {
|
||
const { data } = useQuery({
|
||
queryKey: ['email-provider-public-settings'],
|
||
queryFn: () => emailProviderApi.getPublicSettings(),
|
||
staleTime: 5 * 60_000,
|
||
});
|
||
|
||
return {
|
||
domain: data?.data?.domain ?? null,
|
||
customerEmailLabel: data?.data?.customerEmailLabel || 'Kunden-E-Mail',
|
||
customerEmailLabelIsCustom: data?.data?.customerEmailLabelIsCustom ?? false,
|
||
};
|
||
}
|