// screens-projects.jsx
function Projects({ onOpenProject, navigate }) {
const { PROJECTS: ALL_PROJECTS, ASSETS } = window.ZAMPP_DATA;
const [search, setSearch] = React.useState('');
const [view, setView] = React.useState('grid');
let projects = ALL_PROJECTS;
if (search) projects = projects.filter(p => p.name.toLowerCase().includes(search.toLowerCase()));
return (
Projects
{projects.length} projects
setSearch(e.target.value)} placeholder="Search projects…" />
{projects.length === 0 ? (
No projects yet. Create one to get started.
) : view === 'grid' ? (
{projects.map(p =>
onOpenProject(p)} />)}
) : (
Project
Assets
Storage
Updated
{projects.map(p => (
onOpenProject(p)}>
{p.assets}
—
{p.updated}
))}
)}
);
}
function ProjectCard({ project, assets, onOpen }) {
const thumbAssets = assets.filter(a => a.project_id === project.id).slice(0, 4);
return (
{Array.from({ length: 4 }).map((_, i) => (
))}
{project.name}
{project.assets} assets
·
updated {project.updated}
);
}
window.Projects = Projects;