import { useState, useEffect } from 'react'; import { useParams, Link } from 'react-router-dom'; import { Project, Package } from '../types'; import { getProject, listPackages, createPackage } from '../api'; import './Home.css'; function ProjectPage() { const { projectName } = useParams<{ projectName: string }>(); const [project, setProject] = useState(null); const [packages, setPackages] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showForm, setShowForm] = useState(false); const [newPackage, setNewPackage] = useState({ name: '', description: '' }); const [creating, setCreating] = useState(false); useEffect(() => { if (projectName) { loadData(); } }, [projectName]); async function loadData() { try { setLoading(true); const [projectData, packagesData] = await Promise.all([ getProject(projectName!), listPackages(projectName!), ]); setProject(projectData); setPackages(packagesData); setError(null); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load data'); } finally { setLoading(false); } } async function handleCreatePackage(e: React.FormEvent) { e.preventDefault(); try { setCreating(true); await createPackage(projectName!, newPackage); setNewPackage({ name: '', description: '' }); setShowForm(false); loadData(); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to create package'); } finally { setCreating(false); } } if (loading) { return
Loading...
; } if (!project) { return
Project not found
; } return (

{project.name}

{project.description &&

{project.description}

}
{error &&
{error}
} {showForm && (

Create New Package

setNewPackage({ ...newPackage, name: e.target.value })} placeholder="releases" required />
setNewPackage({ ...newPackage, description: e.target.value })} placeholder="Optional description" />
)} {packages.length === 0 ? (

No packages yet. Create your first package to start uploading artifacts!

) : (
{packages.map((pkg) => (

{pkg.name}

{pkg.description &&

{pkg.description}

}
Created {new Date(pkg.created_at).toLocaleDateString()}
))}
)}
); } export default ProjectPage;