mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-22 07:31:12 -05:00
Fix date field handling in forms and edge function
This commit is contained in:
@@ -262,7 +262,7 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }:
|
|||||||
<Label>Opening Date</Label>
|
<Label>Opening Date</Label>
|
||||||
<DatePicker
|
<DatePicker
|
||||||
date={watch('opening_date') ? new Date(watch('opening_date')) : undefined}
|
date={watch('opening_date') ? new Date(watch('opening_date')) : undefined}
|
||||||
onSelect={(date) => setValue('opening_date', date ? date.toISOString().split('T')[0] : '')}
|
onSelect={(date) => setValue('opening_date', date ? date.toISOString().split('T')[0] : undefined)}
|
||||||
placeholder="Select opening date"
|
placeholder="Select opening date"
|
||||||
disableFuture={true}
|
disableFuture={true}
|
||||||
fromYear={1800}
|
fromYear={1800}
|
||||||
@@ -273,7 +273,7 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }:
|
|||||||
<Label>Closing Date (if applicable)</Label>
|
<Label>Closing Date (if applicable)</Label>
|
||||||
<DatePicker
|
<DatePicker
|
||||||
date={watch('closing_date') ? new Date(watch('closing_date')) : undefined}
|
date={watch('closing_date') ? new Date(watch('closing_date')) : undefined}
|
||||||
onSelect={(date) => setValue('closing_date', date ? date.toISOString().split('T')[0] : '')}
|
onSelect={(date) => setValue('closing_date', date ? date.toISOString().split('T')[0] : undefined)}
|
||||||
placeholder="Select closing date"
|
placeholder="Select closing date"
|
||||||
disablePast={false}
|
disablePast={false}
|
||||||
fromYear={1800}
|
fromYear={1800}
|
||||||
|
|||||||
@@ -523,7 +523,7 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }:
|
|||||||
<Label>Opening Date</Label>
|
<Label>Opening Date</Label>
|
||||||
<DatePicker
|
<DatePicker
|
||||||
date={watch('opening_date') ? new Date(watch('opening_date')) : undefined}
|
date={watch('opening_date') ? new Date(watch('opening_date')) : undefined}
|
||||||
onSelect={(date) => setValue('opening_date', date ? date.toISOString().split('T')[0] : '')}
|
onSelect={(date) => setValue('opening_date', date ? date.toISOString().split('T')[0] : undefined)}
|
||||||
placeholder="Select opening date"
|
placeholder="Select opening date"
|
||||||
disableFuture={true}
|
disableFuture={true}
|
||||||
fromYear={1800}
|
fromYear={1800}
|
||||||
@@ -534,7 +534,7 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }:
|
|||||||
<Label>Closing Date (if applicable)</Label>
|
<Label>Closing Date (if applicable)</Label>
|
||||||
<DatePicker
|
<DatePicker
|
||||||
date={watch('closing_date') ? new Date(watch('closing_date')) : undefined}
|
date={watch('closing_date') ? new Date(watch('closing_date')) : undefined}
|
||||||
onSelect={(date) => setValue('closing_date', date ? date.toISOString().split('T')[0] : '')}
|
onSelect={(date) => setValue('closing_date', date ? date.toISOString().split('T')[0] : undefined)}
|
||||||
placeholder="Select closing date"
|
placeholder="Select closing date"
|
||||||
disablePast={false}
|
disablePast={false}
|
||||||
fromYear={1800}
|
fromYear={1800}
|
||||||
|
|||||||
@@ -196,6 +196,19 @@ function resolveDependencies(data: any, dependencyMap: Map<string, string>): any
|
|||||||
return resolved;
|
return resolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function sanitizeDateFields(data: any): any {
|
||||||
|
const dateFields = ['opening_date', 'closing_date', 'date_changed', 'date_taken', 'visit_date'];
|
||||||
|
const sanitized = { ...data };
|
||||||
|
|
||||||
|
for (const field of dateFields) {
|
||||||
|
if (field in sanitized && sanitized[field] === '') {
|
||||||
|
sanitized[field] = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sanitized;
|
||||||
|
}
|
||||||
|
|
||||||
async function createPark(supabase: any, data: any): Promise<string> {
|
async function createPark(supabase: any, data: any): Promise<string> {
|
||||||
// Transform images object if present
|
// Transform images object if present
|
||||||
if (data.images) {
|
if (data.images) {
|
||||||
@@ -225,18 +238,20 @@ async function createPark(supabase: any, data: any): Promise<string> {
|
|||||||
const parkId = data.park_id;
|
const parkId = data.park_id;
|
||||||
delete data.park_id; // Remove ID from update data
|
delete data.park_id; // Remove ID from update data
|
||||||
|
|
||||||
|
const sanitizedData = sanitizeDateFields(data);
|
||||||
const { error } = await supabase
|
const { error } = await supabase
|
||||||
.from('parks')
|
.from('parks')
|
||||||
.update(data)
|
.update(sanitizedData)
|
||||||
.eq('id', parkId);
|
.eq('id', parkId);
|
||||||
|
|
||||||
if (error) throw new Error(`Failed to update park: ${error.message}`);
|
if (error) throw new Error(`Failed to update park: ${error.message}`);
|
||||||
return parkId;
|
return parkId;
|
||||||
} else {
|
} else {
|
||||||
console.log('Creating new park');
|
console.log('Creating new park');
|
||||||
|
const sanitizedData = sanitizeDateFields(data);
|
||||||
const { data: park, error } = await supabase
|
const { data: park, error } = await supabase
|
||||||
.from('parks')
|
.from('parks')
|
||||||
.insert(data)
|
.insert(sanitizedData)
|
||||||
.select('id')
|
.select('id')
|
||||||
.single();
|
.single();
|
||||||
|
|
||||||
@@ -274,18 +289,20 @@ async function createRide(supabase: any, data: any): Promise<string> {
|
|||||||
const rideId = data.ride_id;
|
const rideId = data.ride_id;
|
||||||
delete data.ride_id; // Remove ID from update data
|
delete data.ride_id; // Remove ID from update data
|
||||||
|
|
||||||
|
const sanitizedData = sanitizeDateFields(data);
|
||||||
const { error } = await supabase
|
const { error } = await supabase
|
||||||
.from('rides')
|
.from('rides')
|
||||||
.update(data)
|
.update(sanitizedData)
|
||||||
.eq('id', rideId);
|
.eq('id', rideId);
|
||||||
|
|
||||||
if (error) throw new Error(`Failed to update ride: ${error.message}`);
|
if (error) throw new Error(`Failed to update ride: ${error.message}`);
|
||||||
return rideId;
|
return rideId;
|
||||||
} else {
|
} else {
|
||||||
console.log('Creating new ride');
|
console.log('Creating new ride');
|
||||||
|
const sanitizedData = sanitizeDateFields(data);
|
||||||
const { data: ride, error } = await supabase
|
const { data: ride, error } = await supabase
|
||||||
.from('rides')
|
.from('rides')
|
||||||
.insert(data)
|
.insert(sanitizedData)
|
||||||
.select('id')
|
.select('id')
|
||||||
.single();
|
.single();
|
||||||
|
|
||||||
@@ -322,7 +339,7 @@ async function createCompany(supabase: any, data: any, companyType: string): Pro
|
|||||||
|
|
||||||
if (companyId) {
|
if (companyId) {
|
||||||
console.log(`Updating existing company ${companyId}`);
|
console.log(`Updating existing company ${companyId}`);
|
||||||
const updateData = { ...data, company_type: companyType };
|
const updateData = sanitizeDateFields({ ...data, company_type: companyType });
|
||||||
delete updateData.company_id;
|
delete updateData.company_id;
|
||||||
delete updateData.id; // Remove ID from update data
|
delete updateData.id; // Remove ID from update data
|
||||||
|
|
||||||
@@ -335,7 +352,7 @@ async function createCompany(supabase: any, data: any, companyType: string): Pro
|
|||||||
return companyId;
|
return companyId;
|
||||||
} else {
|
} else {
|
||||||
console.log('Creating new company');
|
console.log('Creating new company');
|
||||||
const companyData = { ...data, company_type: companyType };
|
const companyData = sanitizeDateFields({ ...data, company_type: companyType });
|
||||||
const { data: company, error } = await supabase
|
const { data: company, error } = await supabase
|
||||||
.from('companies')
|
.from('companies')
|
||||||
.insert(companyData)
|
.insert(companyData)
|
||||||
|
|||||||
Reference in New Issue
Block a user