@@ -129,34 +129,34 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
129129
130130 const processRowUpdate = async ( newRow : BomRow , oldRow : BomRow ) : Promise < BomRow > => {
131131 // assemblies are not editable
132- if ( String ( newRow . id ) . startsWith ( 'assembly' ) ) return newRow ;
132+ if ( newRow . id . startsWith ( 'assembly' ) ) return newRow ;
133133
134134 const material = materials . find ( ( m ) => m . materialId === newRow . materialId ) ;
135135 if ( ! material ) return newRow ;
136136
137- const newQuantity = typeof newRow . quantity === 'number' ? ( newRow . quantity as number ) : null ;
138- const newPriceDollars = typeof newRow . price === 'number' ? ( newRow . price as number ) : null ;
137+ const quantityChanged = newRow . quantityRaw !== oldRow . quantityRaw ;
138+ const priceChanged = newRow . priceRaw !== oldRow . priceRaw ;
139139
140140 if (
141141 newRow . name === oldRow . name &&
142142 newRow . type === oldRow . type &&
143143 newRow . manufacturer === oldRow . manufacturer &&
144144 newRow . manufacturerPN === oldRow . manufacturerPN &&
145145 newRow . pdmFileName === oldRow . pdmFileName &&
146- newQuantity === null &&
147- newPriceDollars === null
146+ ! quantityChanged &&
147+ ! priceChanged
148148 )
149149 return newRow ;
150150
151151 if ( newRow . name !== undefined && ! newRow . name . trim ( ) ) {
152152 toast . error ( 'Name cannot be empty' ) ;
153153 return oldRow ;
154154 }
155- if ( newQuantity !== null && ( isNaN ( newQuantity ) || newQuantity <= 0 ) ) {
155+ if ( quantityChanged && newRow . quantityRaw !== undefined && ( isNaN ( newRow . quantityRaw ) || newRow . quantityRaw <= 0 ) ) {
156156 toast . error ( 'Quantity must be a positive number' ) ;
157157 return oldRow ;
158158 }
159- if ( newPriceDollars !== null && ( isNaN ( newPriceDollars ) || newPriceDollars < 0 ) ) {
159+ if ( priceChanged && newRow . priceRaw !== undefined && ( isNaN ( newRow . priceRaw ) || newRow . priceRaw < 0 ) ) {
160160 toast . error ( 'Price must be a non-negative number' ) ;
161161 return oldRow ;
162162 }
@@ -167,11 +167,12 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
167167 if ( newRow . manufacturer !== oldRow . manufacturer ) changedFields . push ( 'Manufacturer' ) ;
168168 if ( newRow . manufacturerPN !== oldRow . manufacturerPN ) changedFields . push ( 'Manufacturer PN' ) ;
169169 if ( newRow . pdmFileName !== oldRow . pdmFileName ) changedFields . push ( 'PDM File Name' ) ;
170- if ( newQuantity !== null ) changedFields . push ( 'Quantity' ) ;
171- if ( newPriceDollars !== null ) changedFields . push ( 'Price' ) ;
170+ if ( quantityChanged ) changedFields . push ( 'Quantity' ) ;
171+ if ( priceChanged ) changedFields . push ( 'Price' ) ;
172172
173- const priceInCents = newPriceDollars !== null ? Math . round ( newPriceDollars * 100 ) : material . price ;
174- const quantityValue = newQuantity !== null ? newQuantity : Number ( material . quantity ) ;
173+ const priceInCents = priceChanged && newRow . priceRaw !== undefined ? Math . round ( newRow . priceRaw * 100 ) : material . price ;
174+ const quantityValue =
175+ quantityChanged && newRow . quantityRaw != null ? new Decimal ( newRow . quantityRaw ) : material . quantity ;
175176
176177 try {
177178 await editMaterial ( {
@@ -183,8 +184,8 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
183184 manufacturerName : newRow . manufacturer || undefined ,
184185 manufacturerPartNumber : newRow . manufacturerPN || undefined ,
185186 pdmFileName : newRow . pdmFileName ,
186- price : priceInCents ,
187- quantity : new Decimal ( quantityValue ) ,
187+ price : priceInCents ,
188+ quantity : quantityValue ,
188189 unitName : material . unitName ,
189190 linkUrl : material . linkUrl ,
190191 notes : material . notes ,
@@ -195,7 +196,6 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
195196 return {
196197 ...newRow ,
197198 quantity : material . unitName ? `${ quantityValue } ${ material . unitName } ` : `${ quantityValue } ` ,
198- quantityRaw : quantityValue ,
199199 price : priceInCents !== undefined ? `$${ centsToDollar ( priceInCents ) } ` : newRow . price ,
200200 priceRaw : priceInCents !== undefined ? priceInCents / 100 : newRow . priceRaw
201201 } ;
@@ -209,7 +209,7 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
209209
210210 const getActions = ( params : GridRowParams ) => {
211211 const actions : JSX . Element [ ] = [ ] ;
212- const rowId = String ( params . row . id ) ;
212+ const rowId = params . row . id ;
213213 const material = materials . find ( ( mat ) => mat . materialId === params . row . materialId ) ;
214214 const shouldShowInMenu = windowWidth < 1000 ;
215215
@@ -371,7 +371,7 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
371371 headerName : 'Status' ,
372372 renderCell : ( params ) => {
373373 // assemblies are not editable
374- if ( ! params . value || String ( params . row . id ) . startsWith ( 'assembly' ) ) return null ;
374+ if ( ! params . value || params . row . id . startsWith ( 'assembly' ) ) return null ;
375375 const material = materials . find ( ( m ) => m . materialId === params . row . materialId ) ;
376376 if ( ! material ) return null ;
377377 return (
@@ -483,23 +483,21 @@ const BOMTableWrapper: React.FC<BOMTableWrapperProps> = ({
483483 } ,
484484 {
485485 ...bomBaseColDef ,
486- field : 'quantity ' ,
486+ field : 'quantityRaw ' ,
487487 headerName : 'Quantity' ,
488488 type : 'number' ,
489489 editable : editPerms ,
490- valueGetter : ( params ) => params . row . quantityRaw ,
491490 renderCell : ( params ) => params . row . quantity ,
492491 sortable : false ,
493492 filterable : false ,
494493 hide : hideColumn [ 7 ]
495494 } ,
496495 {
497496 ...bomBaseColDef ,
498- field : 'price ' ,
497+ field : 'priceRaw ' ,
499498 headerName : 'Price per Unit' ,
500499 type : 'number' ,
501500 editable : editPerms ,
502- valueGetter : ( params ) => params . row . priceRaw ,
503501 renderCell : ( params ) => params . row . price ,
504502 sortable : false ,
505503 filterable : false ,
0 commit comments