From 84ef131640f6dec0e86105fbe8b7105f9cc18837 Mon Sep 17 00:00:00 2001 From: yurikakan Date: Sat, 27 Jun 2026 16:13:22 -0400 Subject: [PATCH 01/15] polished darker signup/login styling --- apps/frontend/src/containers/loginPage.tsx | 13 ++++++++++--- apps/frontend/src/containers/signupPage.tsx | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/apps/frontend/src/containers/loginPage.tsx b/apps/frontend/src/containers/loginPage.tsx index cc08a821e..7b0c38954 100644 --- a/apps/frontend/src/containers/loginPage.tsx +++ b/apps/frontend/src/containers/loginPage.tsx @@ -307,11 +307,18 @@ const LoginPage: React.FC = () => { {step === 'login' && ( <> - + Don't have an account?{' '} navigate(ROUTES.SIGNUP)} variant="underline" textDecorationColor="neutral.300" diff --git a/apps/frontend/src/containers/signupPage.tsx b/apps/frontend/src/containers/signupPage.tsx index 745cebcdf..1374151d3 100644 --- a/apps/frontend/src/containers/signupPage.tsx +++ b/apps/frontend/src/containers/signupPage.tsx @@ -72,11 +72,18 @@ const SignupPage: React.FC = () => { Food Manufacturer (Donor) Partner - + Already have an account?{' '} navigate(ROUTES.LOGIN)} variant="underline" textDecorationColor="neutral.300" From 266be6b233d991a2d5964ef0854d598472d2e84c Mon Sep 17 00:00:00 2001 From: yurikakan Date: Sat, 27 Jun 2026 16:13:52 -0400 Subject: [PATCH 02/15] remove last question as requested --- .../forms/manufacturerApplicationForm.tsx | 16 ---------------- .../components/forms/pantryApplicationForm.tsx | 15 --------------- 2 files changed, 31 deletions(-) diff --git a/apps/frontend/src/components/forms/manufacturerApplicationForm.tsx b/apps/frontend/src/components/forms/manufacturerApplicationForm.tsx index 34ad1bb5b..6b4c30024 100644 --- a/apps/frontend/src/components/forms/manufacturerApplicationForm.tsx +++ b/apps/frontend/src/components/forms/manufacturerApplicationForm.tsx @@ -594,22 +594,6 @@ const ManufacturerApplicationForm: React.FC = () => { - - - - - - By submitting this form, you agree to receive automated emails - from Securing Safe Food (SSF) Corp. should your food - manufacturer be enrolled in our program.{' '} - - - - - - - - - Request # - - - Status - - - Pantry - - - Date Requested - - {enableVolunteerActions && ( + {paginatedRequests.length === 0 ? ( + + ) : ( + + + - Action Required - - )} - - - - {paginatedRequests.map((request) => ( - - - setSelectedViewDetailsRequest(request)} - > - {request.requestId} - - - + - - {capitalize(request.status)} - - - + - {request.pantry.pantryName} - - + - {formatDate(request.requestedAt)} - + Date Requested + {enableVolunteerActions && ( + + Action Required + + )} + + + + {paginatedRequests.map((request) => ( + + + setSelectedViewDetailsRequest(request)} + > + {request.requestId} + + + + + {capitalize(request.status)} + + + + {request.pantry.pantryName} + - {request.status === FoodRequestStatus.ACTIVE && ( - - )} + {formatDate(request.requestedAt)} - )} - - ))} + {enableVolunteerActions && ( + + {request.status === FoodRequestStatus.ACTIVE && ( + + )} + + )} + + ))} - {selectedViewDetailsRequest && ( - { - setSelectedViewDetailsRequest(null); - if (initialRequestId) { - navigate(location.pathname, { replace: true }); - } - }} - onSuccess={loadRequests} - onDelete={() => setDeleteRequest(selectedViewDetailsRequest)} - /> - )} + {selectedViewDetailsRequest && ( + { + setSelectedViewDetailsRequest(null); + if (initialRequestId) { + navigate(location.pathname, { replace: true }); + } + }} + onSuccess={loadRequests} + onDelete={() => setDeleteRequest(selectedViewDetailsRequest)} + /> + )} - {deleteRequest && ( - setDeleteRequest(null)} - onSuccess={() => { - setAlertMessage( - 'Successfully deleted food request.', - AlertStatus.INFO, - ); - loadRequests(); - setSelectedViewDetailsRequest(null); - }} - /> - )} + {deleteRequest && ( + setDeleteRequest(null)} + onSuccess={() => { + setAlertMessage( + 'Successfully deleted food request.', + AlertStatus.INFO, + ); + loadRequests(); + setSelectedViewDetailsRequest(null); + }} + /> + )} - {selectedActionRequest && ( - { - setSelectedCloseRequestAction(selectedActionRequest); - }} - onCreateOrder={() => { - setSelectedCreateOrderRequest(selectedActionRequest); - }} - /> - )} + {selectedActionRequest && ( + { + setSelectedCloseRequestAction(selectedActionRequest); + }} + onCreateOrder={() => { + setSelectedCreateOrderRequest(selectedActionRequest); + }} + /> + )} - {selectedCloseRequestAction && ( - { - setAlertMessage('Request Closed', AlertStatus.INFO); - loadRequests(); - }} - /> - )} + {selectedCloseRequestAction && ( + { + setAlertMessage('Request Closed', AlertStatus.INFO); + loadRequests(); + }} + /> + )} - {selectedCreateOrderRequest && ( - { - setAlertMessage('Order Created', AlertStatus.INFO); - loadRequests(); - }} - /> - )} - - + {selectedCreateOrderRequest && ( + { + setAlertMessage('Order Created', AlertStatus.INFO); + loadRequests(); + }} + /> + )} + + + )} {totalPages > 1 && ( Date: Mon, 6 Jul 2026 08:33:42 -0400 Subject: [PATCH 13/15] Fix indentation in donation create specs Prettier cleanup of the over-indented recurrence lines left behind by dropping foodManufacturerId from CreateDonationDto. Co-Authored-By: Claude Opus 4.8 --- apps/backend/src/donations/donations.service.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/backend/src/donations/donations.service.spec.ts b/apps/backend/src/donations/donations.service.spec.ts index 8628dfbb2..86a219ad3 100644 --- a/apps/backend/src/donations/donations.service.spec.ts +++ b/apps/backend/src/donations/donations.service.spec.ts @@ -1256,7 +1256,7 @@ describe('DonationService', () => { await expect( service.create( { - recurrence: RecurrenceEnum.NONE, + recurrence: RecurrenceEnum.NONE, items: validItems, }, 1, @@ -1272,7 +1272,7 @@ describe('DonationService', () => { await expect( service.create( { - recurrence: RecurrenceEnum.WEEKLY, + recurrence: RecurrenceEnum.WEEKLY, repeatOnDays: { Sunday: false, Monday: true, @@ -1303,7 +1303,7 @@ describe('DonationService', () => { await expect( service.create( { - recurrence: RecurrenceEnum.NONE, + recurrence: RecurrenceEnum.NONE, items: [ ...validItems, { @@ -1328,7 +1328,7 @@ describe('DonationService', () => { await expect( service.create( { - recurrence: RecurrenceEnum.NONE, + recurrence: RecurrenceEnum.NONE, items: validItems, }, 5, From 75c6c62ed69d00788d1161d9e88dfca17a87a606 Mon Sep 17 00:00:00 2001 From: yurikakan Date: Mon, 6 Jul 2026 09:14:39 -0400 Subject: [PATCH 14/15] updated recurring donation reminder wording in donation details modal --- apps/frontend/src/components/forms/donationDetailsModal.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/frontend/src/components/forms/donationDetailsModal.tsx b/apps/frontend/src/components/forms/donationDetailsModal.tsx index 230d07482..2561db55a 100644 --- a/apps/frontend/src/components/forms/donationDetailsModal.tsx +++ b/apps/frontend/src/components/forms/donationDetailsModal.tsx @@ -222,14 +222,14 @@ const DonationDetailsModal: React.FC = ({ {!isEditing && donation.recurrence !== RecurrenceEnum.NONE && ( - - Recurring Donation + + Donation sets up recurring reminders {donation.nextDonationDates && donation.nextDonationDates.length > 0 && ( - + Upcoming reminder emails From 0c185cee1c562101f05bd72de3ce4d33e8d1fc6a Mon Sep 17 00:00:00 2001 From: yurikakan Date: Mon, 6 Jul 2026 09:15:13 -0400 Subject: [PATCH 15/15] new: empty state component for food request page --- .../src/components/foodRequestManagement.tsx | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/frontend/src/components/foodRequestManagement.tsx b/apps/frontend/src/components/foodRequestManagement.tsx index a0e9d42fa..d7ba543d5 100644 --- a/apps/frontend/src/components/foodRequestManagement.tsx +++ b/apps/frontend/src/components/foodRequestManagement.tsx @@ -15,7 +15,8 @@ import { ArrowDownUp, ChevronRight, ChevronLeft, Funnel } from 'lucide-react'; import { capitalize, formatDate } from '@utils/utils'; import { FloatingAlert } from '@components/floatingAlert'; import { FoodRequestStatus, FoodRequestSummaryDto } from '../types/types'; -import TableEmptyState from '@components/tableEmptyState'; +import { ROUTES } from '../routes'; +import PageEmptyState from '@components/pageEmptyState'; import RequestDetailsModal from '@components/forms/requestDetailsModal'; import PantryDeleteRequestActionModal from '@components/forms/pantryDeleteRequestModal'; import VolunteerCloseRequestActionModal from '@components/forms/volunteerCloseRequestModal'; @@ -159,6 +160,16 @@ const RequestManagement: React.FC = ({ const clearCloseRequest = () => setSelectedCloseRequestAction(null); const clearCreateOrder = () => setSelectedCreateOrderRequest(null); + const emptyStatePrimary = enableVolunteerActions + ? { + text: 'View Assigned Pantries', + link: ROUTES.VOLUNTEER_ASSIGNED_PANTRIES, + } + : { text: 'View Orders', link: ROUTES.ADMIN_ORDER_MANAGEMENT }; + const emptyStateSecondary = enableVolunteerActions + ? { text: 'View Orders', link: ROUTES.VOLUNTEER_ORDER_MANAGEMENT } + : { text: 'View Dashboard', link: ROUTES.ADMIN_DASHBOARD }; + return ( @@ -255,9 +266,12 @@ const RequestManagement: React.FC = ({ {paginatedRequests.length === 0 ? ( - ) : (