'use client' import React, { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' import Link from 'next/link' import { ArrowLeft, Plus, Loader2, Send, Eye, Pencil, Check, ChefHat } from 'lucide-react' import { Button } from '@/components/ui/button' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Badge } from '@/components/ui/badge' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' interface MealOrder { id: number title: string date: string mealType: 'breakfast' | 'lunch' | 'dinner' status: 'draft' | 'submitted' | 'preparing' | 'completed' mealCount: number createdAt: string } export default function OrdersListPage() { const router = useRouter() const [orders, setOrders] = useState([]) const [loading, setLoading] = useState(true) const [dateFilter, setDateFilter] = useState(() => new Date().toISOString().split('T')[0]) const [statusFilter, setStatusFilter] = useState('all') useEffect(() => { const fetchOrders = async () => { setLoading(true) try { let url = `/api/meal-orders?sort=-date&limit=100&depth=0` if (dateFilter) { url += `&where[date][equals]=${dateFilter}` } if (statusFilter !== 'all') { url += `&where[status][equals]=${statusFilter}` } const res = await fetch(url, { credentials: 'include' }) if (res.ok) { const data = await res.json() setOrders(data.docs || []) } else if (res.status === 401) { router.push('/caregiver/login') } } catch (err) { console.error('Error fetching orders:', err) } finally { setLoading(false) } } fetchOrders() }, [router, dateFilter, statusFilter]) const getMealTypeLabel = (type: string) => { switch (type) { case 'breakfast': return 'Breakfast' case 'lunch': return 'Lunch' case 'dinner': return 'Dinner' default: return type } } const getStatusBadge = (status: string) => { switch (status) { case 'draft': return ( Draft ) case 'submitted': return ( Submitted ) case 'preparing': return ( Preparing ) case 'completed': return ( Completed ) default: return {status} } } const handleCreateOrder = async (mealType: 'breakfast' | 'lunch' | 'dinner') => { try { const res = await fetch('/api/meal-orders', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ date: dateFilter, mealType, status: 'draft', }), credentials: 'include', }) if (res.ok) { const data = await res.json() router.push(`/caregiver/orders/${data.doc.id}`) } } catch (err) { console.error('Error creating order:', err) } } return (

Meal Orders

Filter & Create Orders
setDateFilter(e.target.value)} />
{loading ? (
) : orders.length === 0 ? (

No orders found for the selected date.

Create a new order using the buttons above.

) : ( Meal Type Date Meals Status Actions {orders.map((order) => ( {getMealTypeLabel(order.mealType)} {order.date} {order.mealCount} residents {getStatusBadge(order.status)} ))}
)}
) }