Files
titipin/src/app/page.tsx
T

103 lines
4.5 KiB
TypeScript

import { getAvailableOrders } from './actions'
import { OrderCard } from '@/components/OrderCard'
import { Sparkles, Plus, Store } from 'lucide-react'
import Link from 'next/link'
import { buttonVariants } from '@/components/ui/button'
import { cn } from '@/lib/utils'
export const dynamic = 'force-dynamic'
export default async function Dashboard() {
const orders = await getAvailableOrders()
return (
<div className="space-y-8 animate-in fade-in duration-500">
{/* Banner / Hero Section */}
<div className="relative overflow-hidden rounded-3xl bg-gradient-to-r from-[#1B2CC1] via-[#2135E0] to-[#121E85] p-6 sm:p-8 text-white shadow-xl shadow-[#1B2CC1]/15">
<div className="absolute right-0 top-0 -mt-10 -mr-10 h-64 w-64 rounded-full bg-white/10 blur-3xl pointer-events-none" />
<div className="relative z-10 max-w-2xl space-y-3">
<div className="inline-flex items-center gap-2 rounded-full bg-white/15 px-3 py-1 text-xs font-bold text-blue-100 backdrop-blur-md border border-white/20">
<Sparkles className="h-3.5 w-3.5" />
<span>Sistem Titip & Jastip Cepat</span>
</div>
<h2 className="text-2xl sm:text-3xl font-black tracking-tight leading-tight">
Titip Makanan & Minuman Bareng Teman Kantor
</h2>
<p className="text-sm text-blue-100/90 leading-relaxed max-w-xl">
Pilih PO yang sedang buka hari ini, tentukan menu favoritmu, dan biarkan pembuat PO mengurus tagihan secara praktis.
</p>
<div className="pt-2 flex flex-wrap gap-3">
<Link
href="/my-orders"
className={cn(
buttonVariants(),
"rounded-xl bg-white text-[#1B2CC1] hover:bg-blue-50 font-bold shadow-md h-10 px-5 gap-2"
)}
>
<Plus className="w-4 h-4" />
Buka Jasa PO Baru
</Link>
<Link
href="/my-purchases"
className={cn(
buttonVariants({ variant: "outline" }),
"rounded-xl bg-white/10 hover:bg-white/20 text-white border-white/20 font-semibold h-10 px-4"
)}
>
Lihat Titipan Saya
</Link>
</div>
</div>
</div>
{/* Main Grid Header */}
<div className="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4">
<div>
<div className="flex items-center gap-2">
<div className="w-2.5 h-2.5 rounded-full bg-[#1B2CC1] animate-pulse" />
<h2 className="text-xl font-black text-slate-900 dark:text-white tracking-tight">
Daftar PO Terbuka Hari Ini
</h2>
</div>
<p className="text-xs text-slate-500 dark:text-slate-400 mt-0.5">
Pesanan dengan status OPEN yang bisa Anda ikuti hari ini.
</p>
</div>
<span className="text-xs font-bold text-[#1B2CC1] bg-[#1B2CC1]/10 px-3 py-1.5 rounded-xl">
Total: {orders.length} PO Aktif
</span>
</div>
{orders.length === 0 ? (
<div className="flex flex-col items-center justify-center p-12 sm:p-16 text-center rounded-3xl border-2 border-dashed border-slate-200 dark:border-slate-800 bg-white dark:bg-slate-900 shadow-sm">
<div className="w-16 h-16 bg-[#1B2CC1]/10 rounded-2xl flex items-center justify-center mb-4 text-[#1B2CC1]">
<Store className="w-8 h-8" />
</div>
<h3 className="text-lg font-bold text-slate-800 dark:text-slate-200 mb-1">Belum Ada PO yang Dibuka Hari Ini</h3>
<p className="text-xs text-slate-500 max-w-md mb-6 leading-relaxed">
Mau jajan atau beli sesuatu? Jadilah orang pertama yang membuka jasa titip pesanan untuk teman-teman Anda!
</p>
<Link
href="/my-orders"
className={cn(
buttonVariants(),
"bg-[#1B2CC1] hover:bg-[#15229E] text-white font-bold rounded-xl shadow-md shadow-[#1B2CC1]/25 h-10 px-5 gap-2"
)}
>
<Plus className="w-4 h-4" /> Buka PO Sekarang
</Link>
</div>
) : (
<div className="flex flex-col h-full space-y-4">
<div className="flex flex-col space-y-4 max-h-[calc(100vh-260px)] overflow-y-auto pr-2 scrollbar-thin">
{orders.map((order: any) => (
<OrderCard key={order.id} order={order} />
))}
</div>
</div>
)}
</div>
)
}