From 8a6b34aadf0c782503a3c64375d44cd7941a3956 Mon Sep 17 00:00:00 2001 From: Anthony Basko <75228079+nunnyu@users.noreply.github.com> Date: Mon, 9 Feb 2026 01:15:39 -0500 Subject: [PATCH 1/3] #3887: added dropdown for materials, and prints the material on select. --- .../ReimbursementProductTable.tsx | 91 +++++++++++++++---- 1 file changed, 72 insertions(+), 19 deletions(-) diff --git a/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx b/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx index 5cbe8c5ea6..7579bc3464 100644 --- a/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx +++ b/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx @@ -34,9 +34,11 @@ import { ReimbursementRequestFormInput } from './ReimbursementRequestForm'; import { useTheme } from '@mui/system'; import { useEffect, useState, useRef } from 'react'; import { useGetAllOtherProductReason } from '../../../hooks/finance.hooks'; +import { useGetMaterialsForWbsElement } from '../../../hooks/bom.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import ErrorPage from '../../ErrorPage'; import { formatReasonName } from '../../../utils/reimbursement-request.utils'; +import { Material } from 'shared'; interface ReimbursementProductTableProps { reimbursementProducts: ReimbursementProductFormArgs[]; @@ -62,6 +64,48 @@ const ListItem = styled('li')(({ theme }) => ({ margin: theme.spacing(0.5) })); +const MaterialAutocomplete: React.FC<{ + wbsNum: WbsNumber; + onSelect: (material: Material) => void; +}> = ({ wbsNum, onSelect }) => { + const { data: materials, isLoading, isError, error } = useGetMaterialsForWbsElement(wbsNum); + + if (isLoading) { + return ; + } + + if (isError) { + return ; + } + + const materialOptions = (materials || []).map((material) => ({ + id: material.materialId, + label: `${material.name}: ${material.materialTypeName}, ${material.manufacturerName}` + })); + + return ( + option.label} + onChange={(_, value) => { + if (value) { + const selectedMaterial = materials?.find((m) => m.materialId === value.id); + if (selectedMaterial) { + onSelect(selectedMaterial); + } + } + }} + value={null} + blurOnSelect={true} + size={'small'} + renderInput={(params) => ( + + )} + /> + ); +}; + const ReimbursementProductTable: React.FC = ({ reimbursementProducts, removeProduct, @@ -435,26 +479,35 @@ const ReimbursementProductTable: React.FC = ({ minWidth: '80px', width: { xs: '100%', md: 'auto' } }} - > - - ( - - )} + > + {'carNumber' in product.reason ? ( // if selected is a project + { + console.log(material); + }} /> - - {errors.reimbursementProducts?.[product.index]?.name?.message} - - + ) : ( + + ( + + )} + /> + + {errors.reimbursementProducts?.[product.index]?.name?.message} + + + )} {!hasMultipleRefundSources && ( Date: Mon, 9 Feb 2026 03:15:42 -0500 Subject: [PATCH 2/3] #3887: selected material shows up when chosen on submit and in UI --- .../ReimbursementProductTable.tsx | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx b/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx index 7579bc3464..85313c4073 100644 --- a/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx +++ b/src/frontend/src/pages/FinancePage/ReimbursementRequestForm/ReimbursementProductTable.tsx @@ -461,7 +461,9 @@ const ReimbursementProductTable: React.FC = ({ )} - {uniqueWbsElementsWithProducts.get(key)?.map((product) => ( + {uniqueWbsElementsWithProducts.get(key)?.map((product) => { + const currentName = watch(`reimbursementProducts.${product.index}.name`); + return ( = ({ minWidth: '80px', width: { xs: '100%', md: 'auto' } }} - > + > {'carNumber' in product.reason ? ( // if selected is a project - { - console.log(material); - }} - /> + currentName ? ( + + {currentName} + + ) : ( + { + const label = `${material.name}: ${material.materialTypeName}, ${material.manufacturerName}`; + setValue(`reimbursementProducts.${product.index}.name`, label); + }} + /> + ) ) : ( = ({ - ))} + )})}