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);
+ }}
+ />
+ )
) : (
= ({
- ))}
+ )})}