diff --git a/frontend/components/drawings/upload-form.tsx b/frontend/components/drawings/upload-form.tsx index 617bd5b..0043eda 100644 --- a/frontend/components/drawings/upload-form.tsx +++ b/frontend/components/drawings/upload-form.tsx @@ -21,20 +21,10 @@ import { ShopSubCategory, ContractDrawingCategory, } from '@/types/master-data'; -import { useState, useEffect } from 'react'; +import { useState, useEffect, useMemo } from 'react'; import { Loader2 } from 'lucide-react'; import { Textarea } from '@/components/ui/textarea'; -// Helper to extract array data from various API response formats -const extractArrayData = (value: unknown): T[] => { - if (Array.isArray(value)) return value as T[]; - if (value && typeof value === 'object' && 'data' in value) { - const data = (value as { data?: unknown }).data; - if (Array.isArray(data)) return data as T[]; - } - return []; -}; - // Base Schema const baseSchema = z.object({ drawingType: z.enum(['CONTRACT', 'SHOP', 'AS_BUILT']), @@ -90,7 +80,10 @@ export function DrawingUploadForm() { // Project list - ADR-019: useProjects returns array directly now const { data: projectsData, isLoading: isLoadingProjects } = useProjects(); - const projects = (projectsData ?? []) as { id?: number; publicId?: string; projectName: string; projectCode: string }[]; + const projects = useMemo( + () => (projectsData ?? []) as { id?: number; publicId?: string; projectName: string; projectCode: string }[], + [projectsData] + ); // Selected project for category fetching const [selectedProjectId, setSelectedProjectId] = useState(undefined); @@ -192,7 +185,7 @@ export function DrawingUploadForm() { )} - {projects.map((project) => { + {projects.map((project: { publicId?: string; id?: number; projectCode: string; projectName: string }) => { const projectValue = String(project.publicId ?? project.id ?? ''); return ( diff --git a/frontend/hooks/use-master-data.ts b/frontend/hooks/use-master-data.ts index 2474488..d214ba4 100644 --- a/frontend/hooks/use-master-data.ts +++ b/frontend/hooks/use-master-data.ts @@ -96,9 +96,8 @@ export function useProjects(isActive: boolean = true) { return useQuery({ queryKey: ['projects', { isActive }], queryFn: async () => { - const response = await projectService.getAll({ isActive }); - // ADR-019: Handle paginated response { data: Project[], meta: {...} } - return extractArrayData(response); + // ADR-019: projectService.getAll() returns Project[] directly + return await projectService.getAll({ isActive }); }, }); }