diff --git a/src/components/moderation/ItemEditDialog.tsx b/src/components/moderation/ItemEditDialog.tsx index d0417268..405fb197 100644 --- a/src/components/moderation/ItemEditDialog.tsx +++ b/src/components/moderation/ItemEditDialog.tsx @@ -113,7 +113,9 @@ export function ItemEditDialog({ item, items, open, onOpenChange, onComplete }: }; const renderEditForm = (editItem: SubmissionItemWithDeps) => { - const data = editItem.item_data; + const itemData = typeof editItem.item_data === 'object' && editItem.item_data !== null && !Array.isArray(editItem.item_data) + ? editItem.item_data as Record + : {}; switch (editItem.item_type) { case 'park': @@ -121,7 +123,8 @@ export function ItemEditDialog({ item, items, open, onOpenChange, onComplete }: onOpenChange(false)} - initialData={data} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + initialData={itemData as any} isEditing /> ); @@ -131,7 +134,8 @@ export function ItemEditDialog({ item, items, open, onOpenChange, onComplete }: onOpenChange(false)} - initialData={data} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + initialData={itemData as any} isEditing /> ); @@ -141,7 +145,8 @@ export function ItemEditDialog({ item, items, open, onOpenChange, onComplete }: onOpenChange(false)} - initialData={data} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + initialData={itemData as any} /> ); @@ -150,7 +155,8 @@ export function ItemEditDialog({ item, items, open, onOpenChange, onComplete }: onOpenChange(false)} - initialData={data} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + initialData={itemData as any} /> ); @@ -159,7 +165,8 @@ export function ItemEditDialog({ item, items, open, onOpenChange, onComplete }: onOpenChange(false)} - initialData={data} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + initialData={itemData as any} /> ); @@ -168,25 +175,37 @@ export function ItemEditDialog({ item, items, open, onOpenChange, onComplete }: onOpenChange(false)} - initialData={data} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + initialData={itemData as any} /> ); case 'ride_model': + const manufacturerName = 'manufacturer_name' in itemData && typeof itemData.manufacturer_name === 'string' + ? itemData.manufacturer_name + : 'Unknown'; + const manufacturerId = 'manufacturer_id' in itemData && typeof itemData.manufacturer_id === 'string' + ? itemData.manufacturer_id + : ''; return ( onOpenChange(false)} - initialData={data} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + initialData={itemData as any} /> ); case 'photo': + const photos = 'photos' in itemData && Array.isArray(itemData.photos) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ? itemData.photos as any + : []; return ( onOpenChange(false)} submitting={submitting} diff --git a/src/components/moderation/ItemReviewCard.tsx b/src/components/moderation/ItemReviewCard.tsx index 6259a201..9e5de45a 100644 --- a/src/components/moderation/ItemReviewCard.tsx +++ b/src/components/moderation/ItemReviewCard.tsx @@ -127,7 +127,8 @@ export function ItemReviewCard({ item, onEdit, onStatusChange, submissionId }: I , + // eslint-disable-next-line @typescript-eslint/no-explicit-any + item_data: item.item_data as any, id: item.id, }} onValidationChange={handleValidationChange} diff --git a/src/components/moderation/ModerationQueue.tsx b/src/components/moderation/ModerationQueue.tsx index 8ac5038b..f39bdedf 100644 --- a/src/components/moderation/ModerationQueue.tsx +++ b/src/components/moderation/ModerationQueue.tsx @@ -31,7 +31,7 @@ import { ConfirmationDialog } from './ConfirmationDialog'; import { KeyboardShortcutsHelp } from './KeyboardShortcutsHelp'; import { useKeyboardShortcuts } from '@/hooks/useKeyboardShortcuts'; import { fetchSubmissionItems, type SubmissionItemWithDeps } from '@/lib/submissionItemsService'; -import type { ModerationQueueRef } from '@/types/moderation'; +import type { ModerationQueueRef, ModerationItem } from '@/types/moderation'; import type { PhotoItem } from '@/types/photos'; interface ModerationQueueProps { @@ -145,7 +145,7 @@ export const ModerationQueue = forwardRef { + const handleDeleteSubmission = useCallback((item: ModerationItem) => { setConfirmDialog({ open: true, title: 'Delete Submission', diff --git a/src/lib/submissionItemsService.ts b/src/lib/submissionItemsService.ts index d8492794..bede8376 100644 --- a/src/lib/submissionItemsService.ts +++ b/src/lib/submissionItemsService.ts @@ -172,9 +172,18 @@ export async function updateSubmissionItem( itemId: string, updates: Partial ): Promise { + // Cast unknown to Json for Supabase compatibility + const supabaseUpdates = { + ...updates, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + item_data: updates.item_data !== undefined ? updates.item_data as any : undefined, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + original_data: updates.original_data !== undefined ? updates.original_data as any : undefined, + }; + const { error } = await supabase .from('submission_items') - .update(updates) + .update(supabaseUpdates) .eq('id', itemId); if (error) throw error;