Skip to content

Commit 0d70a5d

Browse files
authored
fix max disposal volume logic (#19045)
Correctly get tiprack def URI passed to `getMaxDisposalVolumeForMultiDispense` in `DisposalField` Closes [RQA-4442](https://opentrons.atlassian.net/browse/RQA-4442)
1 parent 5faf80c commit 0d70a5d

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

protocol-designer/src/pages/Designer/ProtocolSteps/StepForm/PipetteFields/DisposalField.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
InputStepFormField,
1010
} from '../../../../../components/molecules'
1111
import { selectors as stepFormSelectors } from '../../../../../step-forms'
12-
import { getMaxDisposalVolumeForMultidispense } from '../../../../../steplist/formLevel/handleFormChange/utils'
12+
import { getMaxDisposalVolumeForMultiDispense } from '../../../../../steplist/formLevel/handleFormChange/utils'
1313
import { selectors as uiLabwareSelectors } from '../../../../../ui/labware'
1414
import { getBlowoutLocationOptionsForForm } from '../utils'
1515
import { FlowRateField } from './FlowRateField'
@@ -26,7 +26,6 @@ interface DisposalFieldProps {
2626
volume: string | null
2727
aspirate_airGap_checkbox?: boolean | null
2828
aspirate_airGap_volume?: string | null
29-
tipRack?: string | null
3029
}
3130

3231
export function DisposalField(props: DisposalFieldProps): JSX.Element {
@@ -38,7 +37,6 @@ export function DisposalField(props: DisposalFieldProps): JSX.Element {
3837
propsForFields,
3938
aspirate_airGap_checkbox,
4039
aspirate_airGap_volume,
41-
tipRack,
4240
formData,
4341
} = props
4442
const { t } = useTranslation(['application', 'form'])
@@ -49,7 +47,8 @@ export function DisposalField(props: DisposalFieldProps): JSX.Element {
4947
path,
5048
stepType,
5149
})
52-
const maxDisposalVolume = getMaxDisposalVolumeForMultidispense(
50+
const tipRack = formData.tipRack
51+
const maxDisposalVolume = getMaxDisposalVolumeForMultiDispense(
5352
{
5453
aspirate_airGap_checkbox,
5554
aspirate_airGap_volume,

protocol-designer/src/steplist/formLevel/handleFormChange/dependentFieldsUpdateMoveLiquid.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
getAllWellsFromPrimaryWells,
2323
getChannels,
2424
getDefaultWells,
25-
getMaxDisposalVolumeForMultidispense,
25+
getMaxDisposalVolumeForMultiDispense,
2626
} from './utils'
2727

2828
import type { NozzleConfigurationStyle } from '@opentrons/shared-data'
@@ -416,7 +416,7 @@ const clampDisposalVolume = (
416416
const isDecimalString = appliedPatch.disposalVolume_volume === '.'
417417
// @ts-expect-error(sa, 2021-6-14): appliedPatch isn't well-typed, address in #3161
418418
if (appliedPatch.path !== 'multiDispense' || isDecimalString) return patch
419-
const maxDisposalVolume = getMaxDisposalVolumeForMultidispense(
419+
const maxDisposalVolume = getMaxDisposalVolumeForMultiDispense(
420420
// @ts-expect-error(sa, 2021-6-14): appliedPatch isn't well-typed, address in #3161
421421
appliedPatch,
422422
pipetteEntities

protocol-designer/src/steplist/formLevel/handleFormChange/utils.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import max from 'lodash/max'
12
import min from 'lodash/min'
23
import round from 'lodash/round'
34
import uniq from 'lodash/uniq'
@@ -148,7 +149,7 @@ export function getChannels(
148149
return pipette.spec.channels
149150
}
150151
export const DISPOSAL_VOL_DIGITS = 1
151-
export function getMaxDisposalVolumeForMultidispense(
152+
export function getMaxDisposalVolumeForMultiDispense(
152153
values: {
153154
aspirate_airGap_checkbox?: boolean | null
154155
aspirate_airGap_volume?: string | null
@@ -172,7 +173,10 @@ export function getMaxDisposalVolumeForMultidispense(
172173
const airGapChecked = values.aspirate_airGap_checkbox
173174
let airGapVolume = airGapChecked ? Number(values.aspirate_airGap_volume) : 0
174175
airGapVolume = Number.isFinite(airGapVolume) ? airGapVolume : 0
175-
return round(pipetteCapacity - volume * 2 - airGapVolume, DISPOSAL_VOL_DIGITS)
176+
return max([
177+
round(pipetteCapacity - volume * 2 - airGapVolume, DISPOSAL_VOL_DIGITS),
178+
0,
179+
])
176180
}
177181
// Ensures that 2x volume can fit in pipette
178182
// NOTE: ensuring that disposalVolume_volume will not exceed pipette capacity

0 commit comments

Comments
 (0)