feat(core): add address fields to ContactForm

This commit is contained in:
2026-07-04 00:20:30 +00:00
parent f31baa444a
commit bc0aae0325
+51
View File
@@ -19,6 +19,11 @@ const contactSchema = z.object({
email: z.string().email('Ungültige E-Mail-Adresse').max(255).optional().or(z.literal('')), email: z.string().email('Ungültige E-Mail-Adresse').max(255).optional().or(z.literal('')),
phone: z.string().max(30).optional().or(z.literal('')), phone: z.string().max(30).optional().or(z.literal('')),
position: z.string().max(100).optional().or(z.literal('')), position: z.string().max(100).optional().or(z.literal('')),
address_street: z.string().max(255).optional().or(z.literal('')),
address_city: z.string().max(100).optional().or(z.literal('')),
address_zip: z.string().max(20).optional().or(z.literal('')),
address_country: z.string().max(2).optional().or(z.literal('')),
address_state: z.string().max(100).optional().or(z.literal('')),
}); });
type ContactFormValues = z.infer<typeof contactSchema>; type ContactFormValues = z.infer<typeof contactSchema>;
@@ -49,6 +54,11 @@ export function ContactFormPage() {
email: '', email: '',
phone: '', phone: '',
position: '', position: '',
address_street: '',
address_city: '',
address_zip: '',
address_country: '',
address_state: '',
}, },
}); });
@@ -60,6 +70,11 @@ export function ContactFormPage() {
email: contact.email || '', email: contact.email || '',
phone: contact.phone || '', phone: contact.phone || '',
position: contact.position || '', position: contact.position || '',
address_street: (contact as any).address_street || '',
address_city: (contact as any).address_city || '',
address_zip: (contact as any).address_zip || '',
address_country: (contact as any).address_country || '',
address_state: (contact as any).address_state || '',
}); });
setSelectedCompanyIds(contact.company_ids || (contact.companies?.map((c) => c.id) || [])); setSelectedCompanyIds(contact.company_ids || (contact.companies?.map((c) => c.id) || []));
} }
@@ -165,6 +180,42 @@ export function ContactFormPage() {
/> />
</Card> </Card>
<Card title={t('address.title')}>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<Input
{...register('address_street')}
label={t('address.street')}
error={errors.address_street?.message}
placeholder="Musterstraße 1"
/>
<Input
{...register('address_city')}
label={t('address.city')}
error={errors.address_city?.message}
placeholder="Berlin"
/>
<Input
{...register('address_zip')}
label={t('address.zip')}
error={errors.address_zip?.message}
placeholder="10115"
/>
<Input
{...register('address_country')}
label={t('address.country')}
error={errors.address_country?.message}
placeholder="DE"
maxLength={2}
/>
<Input
{...register('address_state')}
label={t('address.state')}
error={errors.address_state?.message}
placeholder="Berlin"
/>
</div>
</Card>
<Card title={t('contacts.assignCompanies')}> <Card title={t('contacts.assignCompanies')}>
{availableCompanies.length === 0 ? ( {availableCompanies.length === 0 ? (
<p className="text-sm text-secondary-500">{t('companies.emptyTitle')}</p> <p className="text-sm text-secondary-500">{t('companies.emptyTitle')}</p>