'use client' import { Suspense, useState } from 'react' import Link from 'next/link' import { useRouter, useSearchParams } from 'next/navigation' import { trpc } from '@/lib/trpc/client' import { Button } from '@/components/ui/button' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Skeleton } from '@/components/ui/skeleton' import { CSVImportForm } from '@/components/forms/csv-import-form' import { NotionImportForm } from '@/components/forms/notion-import-form' import { TypeformImportForm } from '@/components/forms/typeform-import-form' import { ArrowLeft, FileSpreadsheet, AlertCircle, Database, FileText } from 'lucide-react' function ImportPageContent() { const router = useRouter() const utils = trpc.useUtils() const searchParams = useSearchParams() const roundIdParam = searchParams.get('stage') const [selectedRoundId, setSelectedRoundId] = useState(roundIdParam || '') // Fetch active programs with stages const { data: programs, isLoading: loadingPrograms } = trpc.program.list.useQuery({ status: 'ACTIVE', includeStages: true, }) // Get all stages from programs const stages = programs?.flatMap((p) => ((p.stages ?? []) as Array<{ id: string; name: string }>).map((s: { id: string; name: string }) => ({ ...s, programId: p.id, programName: `${p.year} Edition`, })) ) || [] const selectedRound = stages.find((s: { id: string }) => s.id === selectedRoundId) if (loadingPrograms) { return } return (
{/* Header */}

Import Projects

Import projects from a CSV file into a stage

{/* Stage selection */} {!selectedRoundId && ( Select Stage Choose the stage you want to import projects into {stages.length === 0 ? (

No Active Rounds

Create a competition with rounds before importing projects

) : ( <> )}
)} {/* Import form */} {selectedRoundId && selectedRound && (

Importing into: {selectedRound.name}

{selectedRound.programName}

CSV Notion Typeform { utils.project.list.invalidate() utils.program.get.invalidate() }} /> { utils.project.list.invalidate() utils.program.get.invalidate() }} /> { utils.project.list.invalidate() utils.program.get.invalidate() }} />
)}
) } function ImportPageSkeleton() { return (
) } export default function ImportProjectsPage() { return ( }> ) }