@@ -8,13 +8,18 @@ import MoveToInboxIcon from '@mui/icons-material/MoveToInbox';
88import { useCurrentUser } from '../../../../hooks/users.hooks' ;
99import BOMTable from './BOMTable' ;
1010import { useToast } from '../../../../hooks/toasts.hooks' ;
11- import { useAssignMaterialToAssembly , useDeleteAssembly , useDeleteMaterial } from '../../../../hooks/bom.hooks' ;
11+ import {
12+ useAssignMaterialToAssembly ,
13+ useDeleteAssembly ,
14+ useDeleteMaterial ,
15+ useEditMaterialStatus
16+ } from '../../../../hooks/bom.hooks' ;
1217import LoadingIndicator from '../../../../components/LoadingIndicator' ;
1318import EditMaterialModal from './MaterialForm/EditMaterialModal' ;
1419import { Button , Link , Typography } from '@mui/material' ;
1520import { bomBaseColDef } from '../../../../utils/bom.utils' ;
1621import NERModal from '../../../../components/NERModal' ;
17- import { renderStatusBOM } from './BOMTableCustomCells' ;
22+ import { StatusDropdownCell } from './BOMTableCustomCells' ;
1823import LinkIcon from '@mui/icons-material/Link' ;
1924import NotesIcon from '@mui/icons-material/Notes' ;
2025import { routes } from '../../../../utils/routes' ;
@@ -42,6 +47,7 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
4247 const [ modalShow , setModalShow ] = useState ( false ) ;
4348 const { mutateAsync : deleteMaterialMutateAsync , isLoading : deleteMaterialIsLoading } = useDeleteMaterial ( project . wbsNum ) ;
4449 const { mutateAsync : deleteAssemblyMutateAsync , isLoading : deleteAssemblyIsLoading } = useDeleteAssembly ( project . wbsNum ) ;
50+ const { mutateAsync : editMaterialStatus } = useEditMaterialStatus ( project . wbsNum ) ;
4551 const { mutateAsync : assignMaterialToAssembly } = useAssignMaterialToAssembly ( ) ;
4652
4753 const [ windowWidth , setWindowWidth ] = useState ( window . innerWidth ) ;
@@ -275,10 +281,44 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
275281 } ,
276282 {
277283 ...bomBaseColDef ,
278- flex : 1.2 ,
284+ flex : 1.4 ,
279285 field : 'status' ,
280286 headerName : 'Status' ,
281- renderCell : renderStatusBOM ,
287+ renderCell : ( params ) => {
288+ if ( ! params . value || String ( params . row . id ) . startsWith ( 'assembly' ) ) return null ;
289+ const material = materials . find ( ( m ) => m . materialId === params . row . materialId ) ;
290+ if ( ! material ) return null ;
291+ return (
292+ < StatusDropdownCell
293+ status = { params . value }
294+ disabled = { ! editPerms }
295+ onStatusChange = { async ( newStatus ) => {
296+ try {
297+ await editMaterialStatus ( {
298+ materialId : material . materialId ,
299+ payload : {
300+ name : material . name ,
301+ status : newStatus ,
302+ materialTypeName : material . materialTypeName ,
303+ manufacturerName : material . manufacturerName ,
304+ manufacturerPartNumber : material . manufacturerPartNumber ,
305+ pdmFileName : material . pdmFileName ,
306+ price : material . price ,
307+ quantity : material . quantity ,
308+ unitName : material . unitName ,
309+ linkUrl : material . linkUrl ,
310+ notes : material . notes ,
311+ assemblyId : material . assemblyId
312+ }
313+ } ) ;
314+ toast . success ( 'Status updated successfully' ) ;
315+ } catch ( e : unknown ) {
316+ if ( e instanceof Error ) toast . error ( e . message , 6000 ) ;
317+ }
318+ } }
319+ />
320+ ) ;
321+ } ,
282322 sortable : false ,
283323 filterable : false ,
284324 hide : hideColumn [ 1 ]
0 commit comments