add2176a6b
- offer editor: per-tier name input (mirrors public_name/internal_name) - offer list cards: show 3-tier services total + manual public price - shared PageHeader component, full-width layout across all admin pages - UI-RULES.md design conventions doc Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
51 lines
2.1 KiB
TypeScript
51 lines
2.1 KiB
TypeScript
import { getAllProjectsWithPayments } from "@/lib/admin-queries";
|
|
import { ProjectRow } from "@/components/admin/ProjectRow";
|
|
import Link from "next/link";
|
|
import { PageHeader } from "@/components/admin/PageHeader";
|
|
|
|
export const revalidate = 0;
|
|
|
|
export default async function ProjectsPage() {
|
|
const projects = await getAllProjectsWithPayments();
|
|
|
|
const projectiAction = (
|
|
<Link
|
|
href="/admin/projects/new"
|
|
className="text-sm bg-[#1A463C] text-white px-4 py-2 rounded-lg hover:bg-[#1A463C]/90 transition-colors"
|
|
>
|
|
+ Nuovo Progetto
|
|
</Link>
|
|
);
|
|
|
|
return (
|
|
<div className="space-y-6">
|
|
<PageHeader title="Progetti" action={projectiAction} />
|
|
|
|
{projects.length === 0 ? (
|
|
<div className="bg-white rounded-xl border border-[#e5e7eb] p-12 text-center">
|
|
<p className="text-[#71717a]">Nessun progetto ancora. Creane uno dal dettaglio di un cliente.</p>
|
|
</div>
|
|
) : (
|
|
<div className="bg-white rounded-xl border border-[#e5e7eb] overflow-hidden">
|
|
<table className="w-full">
|
|
<thead className="bg-[#f9f9f9] border-b border-[#e5e7eb]">
|
|
<tr>
|
|
<th className="text-left py-3 px-4 text-xs font-semibold text-[#71717a] uppercase tracking-wider">Progetto</th>
|
|
<th className="text-left py-3 px-4 text-xs font-semibold text-[#71717a] uppercase tracking-wider">Valore</th>
|
|
<th className="text-left py-3 px-4 text-xs font-semibold text-[#71717a] uppercase tracking-wider">Acconto</th>
|
|
<th className="text-left py-3 px-4 text-xs font-semibold text-[#71717a] uppercase tracking-wider">Saldo</th>
|
|
<th className="text-left py-3 px-4 text-xs font-semibold text-[#71717a] uppercase tracking-wider">Timer</th>
|
|
<th className="text-left py-3 px-4 text-xs font-semibold text-[#71717a] uppercase tracking-wider">€/h</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{projects.map((project) => (
|
|
<ProjectRow key={project.id} project={project} />
|
|
))}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
)}
|
|
</div>
|
|
);
|
|
} |