diff --git a/apps/frontend/src/components/forms/editablePantryApplication.tsx b/apps/frontend/src/components/forms/editablePantryApplication.tsx index 971592ea6..31c79325b 100644 --- a/apps/frontend/src/components/forms/editablePantryApplication.tsx +++ b/apps/frontend/src/components/forms/editablePantryApplication.tsx @@ -347,17 +347,17 @@ const EditablePantryApplication: React.FC = ({ secondaryContactEmail: form.secondaryContactEmail || null, secondaryContactPhone: form.secondaryContactPhone || null, shipmentAddressLine1: form.shipmentLine1 || undefined, - shipmentAddressLine2: form.shipmentLine2 || undefined, + shipmentAddressLine2: form.shipmentLine2 || null, shipmentAddressCity: form.shipmentCity || undefined, shipmentAddressState: form.shipmentState || undefined, shipmentAddressZip: form.shipmentZip || undefined, - shipmentAddressCountry: form.shipmentCountry || undefined, + shipmentAddressCountry: form.shipmentCountry || null, mailingAddressLine1: form.mailingLine1 || undefined, - mailingAddressLine2: form.mailingLine2 || undefined, + mailingAddressLine2: form.mailingLine2 || null, mailingAddressCity: form.mailingCity || undefined, mailingAddressState: form.mailingState || undefined, mailingAddressZip: form.mailingZip || undefined, - mailingAddressCountry: form.mailingCountry || undefined, + mailingAddressCountry: form.mailingCountry || null, acceptFoodDeliveries: form.acceptFoodDeliveries === 'Yes', deliveryWindowInstructions: form.deliveryWindowInstructions || undefined, diff --git a/apps/frontend/src/components/forms/pantryApplicationForm.tsx b/apps/frontend/src/components/forms/pantryApplicationForm.tsx index e1781bfde..eac2aa2a7 100644 --- a/apps/frontend/src/components/forms/pantryApplicationForm.tsx +++ b/apps/frontend/src/components/forms/pantryApplicationForm.tsx @@ -569,6 +569,7 @@ const PantryApplicationForm: React.FC = () => { setAllergenClients(e.target.value)} placeholder="Select an option" diff --git a/apps/frontend/src/components/forms/requestDetailsModal.tsx b/apps/frontend/src/components/forms/requestDetailsModal.tsx index 58feeb433..d805c00ed 100644 --- a/apps/frontend/src/components/forms/requestDetailsModal.tsx +++ b/apps/frontend/src/components/forms/requestDetailsModal.tsx @@ -411,7 +411,17 @@ const RequestDetailsModal: React.FC = ({ additionalNotes !== '' ? 'neutral.800' : 'neutral.300' } value={additionalNotes} - onChange={(e) => setAdditionalNotes(e.target.value)} + onChange={(e) => { + const words = e.target.value.trim().split(/\s+/); + if (words.length <= 250) { + setAdditionalNotes(e.target.value); + } else { + setAlertMessage( + 'Exceeded word limit', + AlertStatus.ERROR, + ); + } + }} /> Max 250 words diff --git a/apps/frontend/src/containers/formRequests.tsx b/apps/frontend/src/containers/formRequests.tsx index 81880c9b2..b5e7c714c 100644 --- a/apps/frontend/src/containers/formRequests.tsx +++ b/apps/frontend/src/containers/formRequests.tsx @@ -22,6 +22,7 @@ import { useSearchParams, useNavigate } from 'react-router-dom'; import { ROUTES } from '../routes'; import { AlertStatus } from '../types/types'; import { PaginationControl } from '@components/pagination'; +import PageEmptyState from '@components/pageEmptyState'; const FormRequests: React.FC = () => { const [currentPage, setCurrentPage] = useState(1); @@ -46,7 +47,13 @@ const FormRequests: React.FC = () => { const pageSize = 10; const fetchRequests = useCallback(async () => { - const pantryId = await ApiClient.getCurrentUserPantryId(); + let pantryId: number | undefined; + try { + pantryId = await ApiClient.getCurrentUserPantryId(); + } catch { + setAlertMessage('Error fetching pantry', AlertStatus.ERROR); + return; + } setPantryId(pantryId); if (pantryId) { try { @@ -87,9 +94,10 @@ const FormRequests: React.FC = () => { setCurrentPage(Math.floor(idx / pageSize) + 1); } } else { + setAlertMessage('Request not found.', AlertStatus.ERROR); navigate(ROUTES.REQUEST_FORM, { replace: true }); } - }, [searchParams, requests, navigate]); + }, [searchParams, requests, navigate, setAlertMessage]); const paginatedRequests = requests.slice( (currentPage - 1) * pageSize, @@ -156,79 +164,87 @@ const FormRequests: React.FC = () => { )} - - - - - Request # - - - Status - - - Date Requested - - - - - {paginatedRequests.map((request) => ( - - - setOpenReadOnlyRequest(request)} - > - {request.requestId} - - - - {request.status === FoodRequestStatus.ACTIVE ? ( - - Active - - ) : ( - - Closed - - )} - - - {formatDate(request.requestedAt)} - + {requests.length === 0 ? ( + + ) : ( + + + + + Request # + + + Status + + + Date Requested + - ))} - - + + + {paginatedRequests.map((request) => ( + + + setOpenReadOnlyRequest(request)} + > + {request.requestId} + + + + {request.status === FoodRequestStatus.ACTIVE ? ( + + Active + + ) : ( + + Closed + + )} + + + {formatDate(request.requestedAt)} + + + ))} + + + )} {openReadOnlyRequest && !deleteRequest && ( { setSelectedOrderId(match.orderId); } } else { + setAlertMessage('Order not found.', AlertStatus.ERROR); navigate(ROUTES.PANTRY_ORDER_MANAGEMENT, { replace: true }); } - }, [searchParams, statusOrders, navigate]); + }, [searchParams, statusOrders, navigate, setAlertMessage]); // Helper to reset page for a specific status const resetPageForStatus = (status: OrderStatus) => { diff --git a/apps/frontend/src/types/types.ts b/apps/frontend/src/types/types.ts index 7b5da4b59..c0fe89bde 100644 --- a/apps/frontend/src/types/types.ts +++ b/apps/frontend/src/types/types.ts @@ -117,17 +117,17 @@ export interface UpdatePantryApplicationDto { secondaryContactEmail?: string | null; secondaryContactPhone?: string | null; shipmentAddressLine1?: string; - shipmentAddressLine2?: string; + shipmentAddressLine2?: string | null; shipmentAddressCity?: string; shipmentAddressState?: string; shipmentAddressZip?: string; - shipmentAddressCountry?: string; + shipmentAddressCountry?: string | null; mailingAddressLine1?: string; - mailingAddressLine2?: string; + mailingAddressLine2?: string | null; mailingAddressCity?: string; mailingAddressState?: string; mailingAddressZip?: string; - mailingAddressCountry?: string; + mailingAddressCountry?: string | null; acceptFoodDeliveries?: boolean; deliveryWindowInstructions?: string; allergenClients?: string;