Fix entity validation and data loading

This commit is contained in:
gpt-engineer-app[bot]
2025-11-05 16:48:14 +00:00
parent 80d823a1b9
commit 11a1ae5f65
6 changed files with 51 additions and 15 deletions

View File

@@ -83,6 +83,10 @@ export function DesignerForm({ onSubmit, onCancel, initialData }: DesignerFormPr
...data, ...data,
company_type: 'designer' as const, company_type: 'designer' as const,
founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined, founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined,
banner_image_id: undefined,
banner_image_url: undefined,
card_image_id: undefined,
card_image_url: undefined,
}; };
await onSubmit(formData); await onSubmit(formData);

View File

@@ -87,6 +87,10 @@ export function ManufacturerForm({ onSubmit, onCancel, initialData }: Manufactur
...data, ...data,
company_type: 'manufacturer' as const, company_type: 'manufacturer' as const,
founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined, founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined,
banner_image_id: undefined,
banner_image_url: undefined,
card_image_id: undefined,
card_image_url: undefined,
}; };
await onSubmit(formData); await onSubmit(formData);

View File

@@ -83,6 +83,10 @@ export function OperatorForm({ onSubmit, onCancel, initialData }: OperatorFormPr
...data, ...data,
company_type: 'operator' as const, company_type: 'operator' as const,
founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined, founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined,
banner_image_id: undefined,
banner_image_url: undefined,
card_image_id: undefined,
card_image_url: undefined,
}; };
await onSubmit(formData); await onSubmit(formData);

View File

@@ -83,6 +83,10 @@ export function PropertyOwnerForm({ onSubmit, onCancel, initialData }: PropertyO
...data, ...data,
company_type: 'property_owner' as const, company_type: 'property_owner' as const,
founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined, founded_year: data.founded_year ? parseInt(String(data.founded_year)) : undefined,
banner_image_id: undefined,
banner_image_url: undefined,
card_image_id: undefined,
card_image_url: undefined,
}; };
await onSubmit(formData); await onSubmit(formData);

View File

@@ -64,10 +64,10 @@ export const parkValidationSchema = z.object({
.nullable() .nullable()
.or(z.literal('')) .or(z.literal(''))
.transform(val => val || undefined), .transform(val => val || undefined),
banner_image_id: z.string().optional(), banner_image_id: z.string().optional().or(z.literal('')).transform(val => val || undefined),
banner_image_url: z.string().optional(), banner_image_url: z.string().optional().or(z.literal('')).transform(val => val || undefined),
card_image_id: z.string().optional(), card_image_id: z.string().optional().or(z.literal('')).transform(val => val || undefined),
card_image_url: z.string().optional(), card_image_url: z.string().optional().or(z.literal('')).transform(val => val || undefined),
images: imageAssignmentSchema, images: imageAssignmentSchema,
source_url: z.string().trim().optional().or(z.literal('')).refine((val) => { source_url: z.string().trim().optional().or(z.literal('')).refine((val) => {
if (!val || val === '') return true; if (!val || val === '') return true;
@@ -258,10 +258,10 @@ export const rideValidationSchema = z.object({
(val) => val === '' || val === null || val === undefined ? undefined : Number(val), (val) => val === '' || val === null || val === undefined ? undefined : Number(val),
z.number().int().min(0, 'Round trip duration must be positive').max(7200, 'Round trip duration must be less than 2 hours').optional() z.number().int().min(0, 'Round trip duration must be positive').max(7200, 'Round trip duration must be less than 2 hours').optional()
), ),
banner_image_id: z.string().optional(), banner_image_id: z.string().optional().or(z.literal('')).transform(val => val || undefined),
banner_image_url: z.string().optional(), banner_image_url: z.string().optional().or(z.literal('')).transform(val => val || undefined),
card_image_id: z.string().optional(), card_image_id: z.string().optional().or(z.literal('')).transform(val => val || undefined),
card_image_url: z.string().optional(), card_image_url: z.string().optional().or(z.literal('')).transform(val => val || undefined),
images: imageAssignmentSchema, images: imageAssignmentSchema,
source_url: z.string().trim().optional().or(z.literal('')).refine((val) => { source_url: z.string().trim().optional().or(z.literal('')).refine((val) => {
if (!val || val === '') return true; if (!val || val === '') return true;
@@ -294,10 +294,10 @@ export const companyValidationSchema = z.object({
if (!val || val === '') return true; if (!val || val === '') return true;
return z.string().url().safeParse(val).success; return z.string().url().safeParse(val).success;
}, 'Invalid URL format'), }, 'Invalid URL format'),
banner_image_id: z.string().optional(), banner_image_id: z.string().optional().or(z.literal('')).transform(val => val || undefined),
banner_image_url: z.string().optional(), banner_image_url: z.string().optional().or(z.literal('')).transform(val => val || undefined),
card_image_id: z.string().optional(), card_image_id: z.string().optional().or(z.literal('')).transform(val => val || undefined),
card_image_url: z.string().optional(), card_image_url: z.string().optional().or(z.literal('')).transform(val => val || undefined),
images: imageAssignmentSchema, images: imageAssignmentSchema,
source_url: z.string().trim().optional().or(z.literal('')).refine((val) => { source_url: z.string().trim().optional().or(z.literal('')).refine((val) => {
if (!val || val === '') return true; if (!val || val === '') return true;

View File

@@ -61,6 +61,9 @@ export async function fetchSubmissionItems(submissionId: string): Promise<Submis
*, *,
park_submission:park_submissions!park_submission_id(*), park_submission:park_submissions!park_submission_id(*),
ride_submission:ride_submissions!ride_submission_id(*), ride_submission:ride_submissions!ride_submission_id(*),
company_submission:company_submissions!company_submission_id(*),
ride_model_submission:ride_model_submissions!ride_model_submission_id(*),
timeline_event_submission:timeline_event_submissions!timeline_event_submission_id(*),
photo_submission:photo_submissions!photo_submission_id( photo_submission:photo_submissions!photo_submission_id(
*, *,
photo_items:photo_submission_items(*) photo_items:photo_submission_items(*)
@@ -82,13 +85,30 @@ export async function fetchSubmissionItems(submissionId: string): Promise<Submis
case 'ride': case 'ride':
item_data = (item as any).ride_submission; item_data = (item as any).ride_submission;
break; break;
case 'operator':
case 'manufacturer':
case 'designer':
case 'property_owner':
item_data = (item as any).company_submission;
break;
case 'ride_model':
item_data = (item as any).ride_model_submission;
break;
case 'milestone':
case 'timeline_event':
item_data = (item as any).timeline_event_submission;
break;
case 'photo': case 'photo':
case 'photo_edit':
case 'photo_delete':
item_data = { item_data = {
...(item as any).photo_submission, ...(item as any).photo_submission,
photos: (item as any).photo_submission?.photo_items || [] photos: (item as any).photo_submission?.photo_items || []
}; };
break; break;
default: default:
// Log warning for unknown types but don't crash
console.warn(`Unknown item_type: ${item.item_type}`);
item_data = null; item_data = null;
} }