diff --git a/src/frontend/src/components/forms/fields/TableField.tsx b/src/frontend/src/components/forms/fields/TableField.tsx index fb626a3992..7f3c6439eb 100644 --- a/src/frontend/src/components/forms/fields/TableField.tsx +++ b/src/frontend/src/components/forms/fields/TableField.tsx @@ -29,7 +29,6 @@ export interface TableFieldRowProps { function TableFieldRow({ item, - idx, rowId, errors, definition, @@ -37,7 +36,6 @@ function TableFieldRow({ removeFn }: Readonly<{ item: any; - idx: number; rowId: string | number; errors: any; definition: ApiFormFieldType; @@ -59,7 +57,6 @@ function TableFieldRow({ return definition.modelRenderer({ item: item, - idx: idx, rowId: rowId, rowErrors: errors, changeFn: changeFn, @@ -127,6 +124,7 @@ function TableFieldComponent({ generatedRowIdCounterRef.current += 1; const generatedId = `table-row-generated-${generatedRowIdCounterRef.current}`; generatedRowIdsRef.current.set(item, generatedId); + return generatedId; } @@ -243,7 +241,7 @@ function TableFieldComponent({ {definition.headers?.map((header, index) => { return ( {header.title} @@ -262,7 +260,6 @@ function TableFieldComponent({ (props.item?.quantity ?? 0); + + const callChangeFn = useCallback( + (identifier: number | string, key: string, value: any) => { + queueMicrotask(() => { + props.changeFn(identifier, key, value); + }); + }, + [props.changeFn] + ); + + useWhyDidYouUpdate('BuildConsumeItemRow', { props, record, quantity }); + return ( @@ -824,9 +838,10 @@ function BuildConsumeItemRow({ { let nextValue: number | '' = ''; @@ -837,13 +852,14 @@ function BuildConsumeItemRow({ nextValue = Number.isFinite(parsed) ? parsed : ''; } - props.changeFn(props.idx, 'quantity', nextValue); + setQuantity(nextValue === '' ? 0 : nextValue); + callChangeFn(props.rowId, 'quantity', nextValue); }} error={props.rowErrors?.quantity?.message} /> - props.removeFn(props.idx)} /> + props.removeFn(props.rowId)} /> ); @@ -879,7 +895,7 @@ export function useConsumeBuildItemsForm({ ); return ( - + ); } }, @@ -898,6 +914,7 @@ export function useConsumeBuildItemsForm({ initialData: { items: allocatedItems.map((item) => { return { + id: item.pk, build_item: item.pk, quantity: item.quantity }; @@ -942,7 +959,7 @@ function BuildConsumeLineRow({ /> - props.removeFn(props.idx)} /> + props.removeFn(props.rowId)} /> );