Skip to content

Commit 03c368c

Browse files
committed
Final fixes to make display/behavior match old NMP
1 parent 98bad40 commit 03c368c

2 files changed

Lines changed: 47 additions & 31 deletions

File tree

frontend/src/views/CalculateNutrients/CalculateNutrientsComponents/FertilizerModal.tsx

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,24 @@ import type {
2525
NMPFileFieldData,
2626
CalculateNutrientsColumn,
2727
} from '@/types';
28-
import { calcFertBalance } from '../utils';
28+
import { calcFertBalance, renderBalanceCell } from '../utils';
2929
import { NMPFileFertilizer } from '@/types/calculateNutrients';
3030

3131
type FertilizerModalProps = {
3232
fieldIndex: number;
3333
initialModalData: NMPFileFertilizer | undefined;
3434
rowEditIndex: number | undefined;
35-
balanceRow: CalculateNutrientsColumn | undefined;
35+
balanceRow: CalculateNutrientsColumn;
3636
setFields: React.Dispatch<React.SetStateAction<NMPFileFieldData[]>>;
3737
onClose: () => void;
3838
};
3939

40+
type BalanceCalcRow = {
41+
reqN: number;
42+
reqP2o5: number;
43+
reqK2o: number;
44+
};
45+
4046
const NUTRIENT_COLUMNS: GridColDef[] = [
4147
{
4248
field: 'N',
@@ -65,26 +71,29 @@ const BALANCE_COLUMNS: GridColDef[] = [
6571
{
6672
field: 'reqN',
6773
headerName: 'N',
68-
74+
renderCell: renderBalanceCell('reqN', true),
6975
sortable: false,
7076
resizable: false,
7177
},
7278
{
7379
field: 'reqP2o5',
7480
headerName: 'P2O5',
75-
81+
renderCell: renderBalanceCell('reqP2o5', true),
7682
sortable: false,
7783
resizable: false,
7884
},
7985
{
8086
field: 'reqK2o',
8187
headerName: 'K2O',
82-
88+
renderCell: renderBalanceCell('reqK2o', true),
8389
sortable: false,
8490
resizable: false,
8591
},
8692
];
8793

94+
const DRY_CUSTOM_ID = 2;
95+
const LIQUID_CUSTOM_ID = 4;
96+
8897
const EMPTY_FERTILIZER_FORM_DATA: NMPFileFertilizer = {
8998
name: '',
9099
fertilizerTypeId: 0,
@@ -138,15 +147,14 @@ export default function FertilizerModal({
138147
const [fertilizerUnits, setFertilizerUnits] = useState<FertilizerUnit[]>([]);
139148
const [densityUnits, setDensityUnits] = useState<any[]>([]);
140149
const [liqDensityFactors, setLiqDensityFactors] = useState<any[]>([]);
141-
const [balanceCalcRow, setBalanceCacRow] = useState<CalculateNutrientsColumn | undefined>({
142-
...balanceRow,
143-
reqN: Math.min(balanceRow?.reqN ?? 0, 0),
144-
reqP2o5: Math.min(balanceRow?.reqP2o5 ?? 0, 0),
145-
reqK2o: Math.min(balanceRow?.reqK2o ?? 0, 0),
146-
} as CalculateNutrientsColumn);
150+
const [balanceCalcRow, setBalanceCacRow] = useState<BalanceCalcRow>({
151+
reqN: Math.min(balanceRow.reqN, 0),
152+
reqP2o5: Math.min(balanceRow.reqP2o5, 0),
153+
reqK2o: Math.min(balanceRow.reqK2o, 0),
154+
});
147155

148156
const [formState, setFormState] = useState<NMPFileFertilizer>(
149-
initialModalData ?? EMPTY_FERTILIZER_FORM_DATA,
157+
initialModalData || EMPTY_FERTILIZER_FORM_DATA,
150158
);
151159
const [formCustomFertilizer, setFormCustomFertilizer] =
152160
useState<Fertilizer>(EMPTY_CUSTOM_FERTILIZER);
@@ -331,13 +339,9 @@ export default function FertilizerModal({
331339
);
332340
setCalculateData(cropNutrients);
333341
setBalanceCacRow({
334-
name: 'calcOnly',
335-
reqN: Math.min(0, (balanceRow?.reqN ?? 0) + cropNutrients.N),
336-
reqP2o5: Math.min(0, (balanceRow?.reqP2o5 ?? 0) + cropNutrients.P2O5),
337-
reqK2o: Math.min(0, (balanceRow?.reqK2o ?? 0) + cropNutrients.K2O),
338-
remN: 0,
339-
remP2o5: 0,
340-
remK2o: 0,
342+
reqN: Math.min(0, balanceRow.reqN + cropNutrients.N),
343+
reqP2o5: Math.min(0, balanceRow.reqP2o5 + cropNutrients.P2O5),
344+
reqK2o: Math.min(0, balanceRow.reqK2o + cropNutrients.K2O),
341345
});
342346
setFormState((prev) => ({
343347
...prev,
@@ -368,12 +372,20 @@ export default function FertilizerModal({
368372
),
369373
);
370374

371-
if (value === 2) {
372-
// For custom dry fertilizers
373-
setFormCustomFertilizer((prev) => ({ ...prev, dryliquid: 'dry' }));
374-
} else if (value === 4) {
375-
// For custom liquid fertilizers
376-
setFormCustomFertilizer((prev) => ({ ...prev, dryliquid: 'liquid' }));
375+
if (value === DRY_CUSTOM_ID || value === LIQUID_CUSTOM_ID) {
376+
setFormCustomFertilizer((prev) => {
377+
// Reset if we're switching type
378+
if (formState.fertilizerTypeId !== value) {
379+
return {
380+
...EMPTY_CUSTOM_FERTILIZER,
381+
dryliquid: value === DRY_CUSTOM_ID ? 'dry' : 'liquid',
382+
};
383+
}
384+
return {
385+
...prev,
386+
dryliquid: value === DRY_CUSTOM_ID ? 'dry' : 'liquid',
387+
};
388+
});
377389
} else {
378390
// Reset for other values
379391
setFormCustomFertilizer(EMPTY_CUSTOM_FERTILIZER);
@@ -475,7 +487,7 @@ export default function FertilizerModal({
475487
<Grid size={{ xs: 4 }}>
476488
<TextField
477489
isRequired
478-
label="K2O"
490+
label="K2O (%)"
479491
type="number"
480492
name="potassium"
481493
value={formCustomFertilizer?.potassium.toString()}
@@ -576,7 +588,7 @@ export default function FertilizerModal({
576588
label=""
577589
type="date"
578590
name="applDate"
579-
value={formState.applDate ?? 0}
591+
value={formState.applDate || 0}
580592
onChange={(e: any) => {
581593
// Current NMP stores this, but not for calculations
582594
// Right now not passed to parent componet for storing.
@@ -604,7 +616,7 @@ export default function FertilizerModal({
604616
<DataGrid
605617
sx={{ ...customTableStyle }}
606618
columns={NUTRIENT_COLUMNS}
607-
rows={calculatedData !== null ? [calculatedData] : []}
619+
rows={calculatedData !== null ? [calculatedData] : [{ N: 0, P2O5: 0, K2O: 0 }]}
608620
getRowId={() => crypto.randomUUID()}
609621
disableRowSelectionOnClick
610622
disableColumnMenu
@@ -622,7 +634,7 @@ export default function FertilizerModal({
622634
<DataGrid
623635
sx={{ ...customTableStyle }}
624636
columns={BALANCE_COLUMNS}
625-
rows={balanceCalcRow !== undefined ? [balanceCalcRow] : [balanceRow]}
637+
rows={[balanceCalcRow]}
626638
getRowId={() => crypto.randomUUID()}
627639
disableRowSelectionOnClick
628640
disableColumnMenu

frontend/src/views/CalculateNutrients/utils.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ export const findBalanceMessage = (balanceType: string, balanceValue: number) =>
170170
return balanceValue >= low && balanceValue <= high;
171171
});
172172

173-
const renderBalanceCell = (balanceType: string) =>
173+
export const renderBalanceCell = (balanceType: string, showAsAbs?: boolean) =>
174174
function renderBalanceCellInner({ value }: any) {
175175
const message = findBalanceMessage(balanceType, value);
176176

@@ -185,7 +185,11 @@ const renderBalanceCell = (balanceType: string) =>
185185
alt: 'Balance icon',
186186
style: { width: '1em', height: '1em', marginRight: '0.5em' },
187187
}),
188-
React.createElement('span', { key: 'value' }, value),
188+
React.createElement(
189+
'span',
190+
{ key: 'value' },
191+
showAsAbs ? Math.abs(value as number) : value,
192+
),
189193
]
190194
: React.createElement('span', { style: { marginLeft: '1.5em' } }, value),
191195
);

0 commit comments

Comments
 (0)