feat(FE-114,137): enhance RecordingForm to handle stock usage and depletion total changes with improved input handling

This commit is contained in:
rstubryan
2025-10-24 12:26:33 +07:00
parent 00de4782e7
commit 0c49978033
@@ -440,6 +440,15 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
}, [stockProducts, getProjectFlockLocation()]); }, [stockProducts, getProjectFlockLocation()]);
// Handle stock usage amount change
const handleStockUsageAmountChangeWrapper = useCallback(
(idx: number) => (e: React.ChangeEvent<HTMLInputElement>) => {
const value = parseInt(e.target.value.replace(/[^\d.-]/g, '')) || 0;
formik.setFieldValue(`stocks.${idx}.usage_amount`, value);
},
[formik]
);
// Unified Stock remove handlers // Unified Stock remove handlers
const removeStock = (idx: number) => { const removeStock = (idx: number) => {
const updatedStocks = formik.values.stocks?.filter((_, i) => i !== idx); const updatedStocks = formik.values.stocks?.filter((_, i) => i !== idx);
@@ -466,6 +475,15 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
formik.setFieldValue('depletions', newDepletions); formik.setFieldValue('depletions', newDepletions);
}; };
// Handle depletion total change
const handleDepletionTotalChangeWrapper = useCallback(
(idx: number) => (e: React.ChangeEvent<HTMLInputElement>) => {
const value = parseInt(e.target.value.replace(/[^\d.-]/g, '')) || 0;
formik.setFieldValue(`depletions.${idx}.total`, value);
},
[formik]
);
const removeDepletion = (idx: number) => { const removeDepletion = (idx: number) => {
const updatedDepletions = formik.values.depletions?.filter( const updatedDepletions = formik.values.depletions?.filter(
(_, i) => i !== idx (_, i) => i !== idx
@@ -942,14 +960,14 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
<NumberInput <NumberInput
required required
name={`stocks.${idx}.usage_amount`} name={`stocks.${idx}.usage_amount`}
value={stock.usage_amount || 0} value={stock.usage_amount}
onChange={formik.handleChange} onChange={handleStockUsageAmountChangeWrapper(idx)}
onBlur={formik.handleBlur} onBlur={formik.handleBlur}
maskType='number' maskType='number'
decimals={0} decimals={0}
min={0} min={0}
thousandSeparator=',' thousandSeparator=','
decimalSeparator='.' decimalSeparator=''
isError={ isError={
isRepeaterInputError('stocks', 'usage_amount', idx) isRepeaterInputError('stocks', 'usage_amount', idx)
.isError .isError
@@ -1127,17 +1145,17 @@ const RecordingForm = ({ type = 'add', initialValues }: RecordingFormProps) => {
/> />
</td> </td>
<td> <td>
<TextInput <NumberInput
required required
name={`depletions.${idx}.total`} name={`depletions.${idx}.total`}
type='number' value={depletion.total}
value={ onChange={handleDepletionTotalChangeWrapper(idx)}
typeof depletion.total === 'number'
? depletion.total.toString()
: depletion.total
}
onChange={formik.handleChange}
onBlur={formik.handleBlur} onBlur={formik.handleBlur}
maskType='number'
decimals={0}
min={0}
thousandSeparator=','
decimalSeparator=''
isError={ isError={
isRepeaterInputError('depletions', 'total', idx) isRepeaterInputError('depletions', 'total', idx)
.isError .isError