feat: Implement full type safety plan

This commit is contained in:
gpt-engineer-app[bot]
2025-10-20 00:40:47 +00:00
parent d9a912f443
commit db60759b9b
11 changed files with 271 additions and 23 deletions

View File

@@ -15,6 +15,7 @@ import { Layers, Save, X } from 'lucide-react';
import { useUserRole } from '@/hooks/useUserRole';
import { EntityMultiImageUploader, ImageAssignments } from '@/components/upload/EntityMultiImageUploader';
import { TechnicalSpecsEditor } from './editors/TechnicalSpecsEditor';
import { TechnicalSpecification } from '@/types/company';
const rideModelSchema = z.object({
name: z.string().min(1, 'Name is required'),
@@ -40,7 +41,7 @@ type RideModelFormData = z.infer<typeof rideModelSchema>;
interface RideModelFormProps {
manufacturerName: string;
manufacturerId?: string;
onSubmit: (data: RideModelFormData & { _technical_specifications?: unknown[] }) => void;
onSubmit: (data: RideModelFormData & { _technical_specifications?: TechnicalSpecification[] }) => void;
onCancel: () => void;
initialData?: Partial<RideModelFormData & {
id?: string;

View File

@@ -6,7 +6,7 @@ import { ArrayFieldDiff } from './ArrayFieldDiff';
import { SpecialFieldDisplay } from './SpecialFieldDisplay';
// Helper to format compact values (truncate long strings)
function formatCompactValue(value: any, precision?: 'day' | 'month' | 'year', maxLength = 30): string {
function formatCompactValue(value: unknown, precision?: 'day' | 'month' | 'year', maxLength = 30): string {
const formatted = formatFieldValue(value, precision);
if (formatted.length > maxLength) {
return formatted.substring(0, maxLength) + '...';

View File

@@ -36,7 +36,7 @@ export function ItemEditDialog({ item, open, onOpenChange, onComplete }: ItemEdi
if (!item) return null;
const handleSubmit = async (data: any) => {
const handleSubmit = async (data: Record<string, unknown>) => {
if (!user?.id) {
toast({
title: 'Authentication Required',
@@ -59,7 +59,7 @@ export function ItemEditDialog({ item, open, onOpenChange, onComplete }: ItemEdi
onComplete();
onOpenChange(false);
} catch (error) {
} catch (error: unknown) {
const errorMsg = getErrorMessage(error);
toast({
title: 'Error',
@@ -74,11 +74,13 @@ export function ItemEditDialog({ item, open, onOpenChange, onComplete }: ItemEdi
const handlePhotoSubmit = async (caption: string, credit: string) => {
const photoData = {
...item.item_data,
photos: item.item_data.photos?.map((photo: any) => ({
...photo,
caption,
credit,
})),
photos: Array.isArray(item.item_data.photos)
? item.item_data.photos.map((photo: unknown) => ({
...(typeof photo === 'object' && photo !== null ? photo : {}),
caption,
credit,
}))
: [],
};
await handleSubmit(photoData);
};
@@ -211,13 +213,19 @@ export function ItemEditDialog({ item, open, onOpenChange, onComplete }: ItemEdi
}
// Simple photo editing form for caption and credit
interface PhotoItem {
url: string;
caption?: string;
credit?: string;
}
function PhotoEditForm({
photos,
onSubmit,
onCancel,
submitting
}: {
photos: any[];
photos: PhotoItem[];
onSubmit: (caption: string, credit: string) => void;
onCancel: () => void;
submitting: boolean;