import { Add, Close, Delete, Inventory2, MoreHoriz, Remove } from '@mui/icons-material'; import { Button, Checkbox, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, IconButton, Stack, Typography, } from '@mui/material'; import { alpha, useTheme } from '@mui/material/styles'; import useMediaQuery from '@mui/material/useMediaQuery'; import { useState } from 'react'; import { PickItem } from '../models/PickItem'; import { DEFAULT_BULK_NAME, DEFAULT_UNIT_TYPE, Product } from '../models/Product'; interface PickItemRowProps { item: PickItem; product?: Product | null; onIncrementQuantity: () => void; onDecrementQuantity: () => void; onToggleCarton: () => void; onStatusChange: (status: PickItem['status']) => void; onDelete: () => void; } export const PickItemRow = ({ item, product, onIncrementQuantity, onDecrementQuantity, onToggleCarton, onStatusChange, onDelete, }: PickItemRowProps) => { const [isConfirmOpen, setIsConfirmOpen] = useState(false); const [isControlsOpen, setIsControlsOpen] = useState(false); const theme = useTheme(); const isDesktop = useMediaQuery(theme.breakpoints.up('sm')); const packagingLabel = item.is_carton ? product?.bulk_name ?? DEFAULT_BULK_NAME : product?.unit_type ?? DEFAULT_UNIT_TYPE; const toggleStatus = (checked: boolean) => { onStatusChange(checked ? 'picked' : 'pending'); }; const handleConfirmDelete = () => { onDelete(); setIsConfirmOpen(false); }; const openControls = () => setIsControlsOpen(true); return ( { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); openControls(); } }, } : undefined)} > toggleStatus(event.target.checked)} inputProps={{ 'aria-label': 'Toggle picked status' }} /> {product?.name ?? 'Unknown product'} {`Qty: ${item.quantity} ${packagingLabel}`} {isDesktop ? ( `0 0 0 8px ${alpha(theme.palette.primary.main, 0.15)}` : 'none', }} > setIsConfirmOpen(true)} aria-label="Delete item" sx={{ ml: { xs: 0, sm: 1 } }} > ) : ( )} {!isDesktop && ( setIsControlsOpen(false)} fullWidth maxWidth="xs" aria-labelledby="item-controls-title" > {product?.name ?? 'Unknown product'} setIsControlsOpen(false)}> {`Quantity: ${item.quantity} ${packagingLabel}`} `0 0 0 8px ${alpha(dialogTheme.palette.primary.main, 0.15)}` : 'none', }} > setIsConfirmOpen(true)} aria-label="Delete item"> )} setIsConfirmOpen(false)} aria-labelledby="confirm-delete-title" aria-describedby="confirm-delete-description" > Delete item {`Are you sure you want to delete ${product?.name ?? 'this product'} from the pick list?`} ); };