import React, { useState } from 'react'; import { Box, Grid, Paper, Typography, Chip, Button, TextField, InputAdornment, ButtonGroup, } from '@mui/material'; import SearchIcon from '@mui/icons-material/Search'; import AddIcon from '@mui/icons-material/Add'; import RestaurantMenuIcon from '@mui/icons-material/RestaurantMenu'; import type { KDSOrder, OrderStatus, OrderType } from '../../types'; import { KDSTicketCard } from './KDSTicketCard'; interface KDSKanbanProps { orders: KDSOrder[]; busyOrderId?: string | null; onStatusChange: (id: string, newStatus: OrderStatus) => void; onToggleItem: (orderId: string, itemId: string) => void; onAddSampleOrder: () => void; } export const KDSKanban: React.FC = ({ orders, busyOrderId = null, onStatusChange, onToggleItem, onAddSampleOrder, }) => { const [filterType, setFilterType] = useState<'ALL' | OrderType>('ALL'); const [searchQuery, setSearchQuery] = useState(''); const filteredOrders = orders.filter((order) => { const matchesType = filterType === 'ALL' || order.orderType === filterType; const matchesSearch = order.ticketNumber.toLowerCase().includes(searchQuery.toLowerCase()) || (order.tableNumber && order.tableNumber.includes(searchQuery)) || (order.customerName && order.customerName.toLowerCase().includes(searchQuery.toLowerCase())) || order.items.some((i) => i.name.toLowerCase().includes(searchQuery.toLowerCase())); return matchesType && matchesSearch; }); const columns: { status: OrderStatus; title: string; color: string; bg: string }[] = [ { status: 'pending', title: 'PENDING', color: '#ba1a1a', bg: '#ffdad6' }, { status: 'preparing', title: 'IN PREPARATION', color: '#845000', bg: '#ffddba' }, { status: 'ready', title: 'READY FOR PICKUP / SERVE', color: '#11651d', bg: '#a3f69c' }, { status: 'served', title: 'SERVED & COMPLETED', color: '#546067', bg: '#e2e2e2' }, ]; return ( {/* Top Filter Bar */} KDS Board {(['ALL', 'Dine-In', 'Takeaway', 'Delivery'] as const).map((type) => ( ))} setSearchQuery(e.target.value)} slotProps={{ input: { startAdornment: ( ), }, }} sx={{ width: { xs: 200, sm: 260 } }} /> {/* 4 Column Kanban Board Grid */} {columns.map((col) => { const colOrders = filteredOrders.filter((o) => o.status === col.status); return ( {/* Column Header */} {col.title} {/* Column Tickets */} {colOrders.length === 0 ? ( No orders in {col.title.toLowerCase()} ) : ( colOrders.map((order) => ( )) )} ); })} ); };