From f2cfd059708c2e924e35b4300a4803a0c2816049 Mon Sep 17 00:00:00 2001 From: Justin Wang Date: Sun, 8 Feb 2026 17:47:23 -0500 Subject: [PATCH 1/5] replacing native alerts with chakra ui alerts --- .../components/forms/donationDetailsModal.tsx | 27 ++++++++++++++++- .../components/forms/orderDetailsModal.tsx | 25 +++++++++++++++- .../src/components/forms/requestFormModal.tsx | 29 +++++++++++++++++-- apps/frontend/src/containers/FormRequests.tsx | 25 +++++++++++++++- .../frontend/src/containers/adminDonation.tsx | 25 +++++++++++++++- .../src/containers/adminOrderManagement.tsx | 26 ++++++++++++++++- 6 files changed, 149 insertions(+), 8 deletions(-) diff --git a/apps/frontend/src/components/forms/donationDetailsModal.tsx b/apps/frontend/src/components/forms/donationDetailsModal.tsx index 80b8d15ce..43ddfed39 100644 --- a/apps/frontend/src/components/forms/donationDetailsModal.tsx +++ b/apps/frontend/src/components/forms/donationDetailsModal.tsx @@ -6,6 +6,7 @@ import { Dialog, Portal, CloseButton, + Alert, } from '@chakra-ui/react'; import ApiClient from '@api/apiClient'; import { Donation, DonationItem, FoodType } from 'types/types'; @@ -25,6 +26,8 @@ const DonationDetailsModal: React.FC = ({ const [loadedDonation, setLoadedDonation] = useState(); const [items, setItems] = useState([]); + const [alertMessage, setAlertMessage] = useState(''); + const donationId = donation?.donationId; // adjust if your ID field is different useEffect(() => { @@ -39,8 +42,9 @@ const DonationDetailsModal: React.FC = ({ setLoadedDonation(donationData); setItems(itemsData); + setAlertMessage('Error fetching donation details: ' + err); } catch (err) { - alert('Error fetching donation details: ' + err); + setAlertMessage('Error fetching donation details: ' + err); } }; @@ -63,7 +67,28 @@ const DonationDetailsModal: React.FC = ({ closeOnInteractOutside scrollBehavior="inside" > + + {alertMessage && ( + + + + {alertMessage} + + + )} diff --git a/apps/frontend/src/components/forms/orderDetailsModal.tsx b/apps/frontend/src/components/forms/orderDetailsModal.tsx index 672fefe08..8ddc8c571 100644 --- a/apps/frontend/src/components/forms/orderDetailsModal.tsx +++ b/apps/frontend/src/components/forms/orderDetailsModal.tsx @@ -7,6 +7,7 @@ import { Textarea, Field, Tag, + Alert, } from '@chakra-ui/react'; import ApiClient from '@api/apiClient'; import { FoodRequest, OrderSummary } from 'types/types'; @@ -25,6 +26,8 @@ const OrderDetailsModal: React.FC = ({ }) => { const [foodRequest, setFoodRequest] = useState(null); + const [alertMessage, setAlertMessage] = useState(''); + useEffect(() => { if (isOpen) { const fetchData = async () => { @@ -34,7 +37,7 @@ const OrderDetailsModal: React.FC = ({ ); setFoodRequest(foodRequestData); } catch (error) { - alert('Error fetching food request details:' + error); + setAlertMessage('Error fetching food request details:' + error); } }; @@ -51,6 +54,26 @@ const OrderDetailsModal: React.FC = ({ }} closeOnInteractOutside > + {alertMessage && ( + + + + {alertMessage} + + + )} diff --git a/apps/frontend/src/components/forms/requestFormModal.tsx b/apps/frontend/src/components/forms/requestFormModal.tsx index f54e625ed..8cf0b538b 100644 --- a/apps/frontend/src/components/forms/requestFormModal.tsx +++ b/apps/frontend/src/components/forms/requestFormModal.tsx @@ -10,6 +10,7 @@ import { Box, Field, CloseButton, + Alert, } from '@chakra-ui/react'; import { Form, ActionFunction, ActionFunctionArgs } from 'react-router-dom'; import { FoodRequest, FoodTypes, RequestSize } from '../../types/types'; @@ -32,6 +33,8 @@ const FoodRequestFormModal: React.FC = ({ const [requestedSize, setRequestedSize] = useState(''); const [additionalNotes, setAdditionalNotes] = useState(''); + const [alertMessage, setAlertMessage] = useState(''); + const isFormValid = requestedSize !== '' && selectedItems.length > 0; useEffect(() => { @@ -54,6 +57,26 @@ const FoodRequestFormModal: React.FC = ({ }} closeOnInteractOutside > + {alertMessage && ( + + + + {alertMessage} + + + )} @@ -81,11 +104,11 @@ const FoodRequestFormModal: React.FC = ({ onSubmit={(e) => { if (selectedItems.length === 0) { e.preventDefault(); - alert('Please select at least one food type'); + setAlertMessage('Please select at least one food type'); } if (requestedSize === '') { e.preventDefault(); - alert('Please select a requested size.'); + setAlertMessage('Please select a requested size.'); } }} > @@ -279,7 +302,7 @@ const FoodRequestFormModal: React.FC = ({ if (words.length <= 250) { setAdditionalNotes(e.target.value); } else { - alert('Exceeded word limit'); + setAlertMessage('Exceeded word limit'); } }} /> diff --git a/apps/frontend/src/containers/FormRequests.tsx b/apps/frontend/src/containers/FormRequests.tsx index 8d5b2246d..644394dd5 100644 --- a/apps/frontend/src/containers/FormRequests.tsx +++ b/apps/frontend/src/containers/FormRequests.tsx @@ -13,6 +13,7 @@ import { ButtonGroup, IconButton, Flex, + Alert, } from '@chakra-ui/react'; import { ChevronRight, ChevronLeft } from 'lucide-react'; import FoodRequestFormModal from '@components/forms/requestFormModal'; @@ -37,6 +38,8 @@ const FormRequests: React.FC = () => { const [openReadOnlyRequest, setOpenReadOnlyRequest] = useState(null); + const [alertMessage, setAlertMessage] = useState(''); + const pageSize = 10; useEffect(() => { @@ -53,7 +56,7 @@ const FormRequests: React.FC = () => { setPreviousRequest(sortedData[0]); } } catch (error) { - alert('Error fetching requests: ' + error); + setAlertMessage('Error fetching requests: ' + error); } } }; @@ -71,6 +74,26 @@ const FormRequests: React.FC = () => { Food Request Management + {alertMessage && ( + + + + {alertMessage} + + + )}