feat: Implement phases 5, 6, and 7

This commit is contained in:
gpt-engineer-app[bot]
2025-10-09 18:52:38 +00:00
parent f8232e4555
commit 8c5cf40ccb
5 changed files with 13 additions and 139 deletions

View File

@@ -1,6 +1,7 @@
import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import * as z from 'zod';
import { entitySchemas } from '@/lib/entityValidationSchemas';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Textarea } from '@/components/ui/textarea';
@@ -14,37 +15,7 @@ import { useCompanyHeadquarters } from '@/hooks/useAutocompleteData';
import { useUserRole } from '@/hooks/useUserRole';
import { EntityMultiImageUploader, ImageAssignments } from '@/components/upload/EntityMultiImageUploader';
const designerSchema = z.object({
name: z.string().min(1, 'Name is required'),
slug: z.string().min(1, 'Slug is required'),
description: z.string().optional(),
person_type: z.enum(['company', 'individual', 'firm', 'organization']),
website_url: z.string().url().optional().or(z.literal('')),
founded_year: z.string()
.optional()
.transform(val => {
if (!val || val.trim() === '') return undefined;
const num = Number(val);
return isNaN(num) ? undefined : num;
})
.refine(val => val === undefined || (typeof val === 'number' && val >= 1800 && val <= new Date().getFullYear()), {
message: "Founded year must be between 1800 and current year"
}),
headquarters_location: z.string().optional(),
images: z.object({
uploaded: z.array(z.object({
url: z.string(),
cloudflare_id: z.string().optional(),
file: z.any().optional(),
isLocal: z.boolean().optional(),
caption: z.string().optional()
})),
banner_assignment: z.number().nullable().optional(),
card_assignment: z.number().nullable().optional()
}).optional()
});
type DesignerFormData = z.infer<typeof designerSchema>;
type DesignerFormData = z.infer<typeof entitySchemas.designer>;
// Input type for the form (before transformation)
type DesignerFormInput = {
@@ -89,7 +60,7 @@ export function DesignerForm({ onSubmit, onCancel, initialData }: DesignerFormPr
watch,
formState: { errors }
} = useForm<DesignerFormInput>({
resolver: zodResolver(designerSchema),
resolver: zodResolver(entitySchemas.designer),
defaultValues: {
name: initialData?.name || '',
slug: initialData?.slug || '',