Skip to content

Commit 10c8bb4

Browse files
authored
feat(protocol-designer): populate singleDispense values when appropriate (#18736)
This PR checks that with the preliminary settings defined for a multiDispense transfer in form step 1 cannot accommodate multiDispense behavior, we pre-populate the liquid class advanced settings with those from the class's `singleDispense` object rather than `multiDispense`.
1 parent 49cde9d commit 10c8bb4

File tree

1 file changed

+32
-5
lines changed
  • protocol-designer/src/steplist/formLevel/handleFormChange

1 file changed

+32
-5
lines changed

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

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -523,8 +523,27 @@ const getNoLiquidClassValuesMoveLiquid = (
523523
return {}
524524
}
525525
const { aspirate, singleDispense, multiDispense } = liquidClassValuesForTip
526+
const { multiWellHandling } = getTransferPlanAndReferenceVolumes({
527+
pipetteSpecs,
528+
tiprackDefinition: null,
529+
conditioningByVolume: (multiDispense?.conditioningByVolume ?? []) as Array<
530+
[number, number]
531+
>,
532+
disposalByVolume: (multiDispense?.disposalByVolume ?? []) as Array<
533+
[number, number]
534+
>,
535+
volume,
536+
path: rawForm.path as PathOption,
537+
numDispenseWells: rawForm.dispense_wells.length,
538+
aspirateAirGapByVolume: aspirate.retract.airGapByVolume as Array<
539+
[number, number]
540+
>,
541+
})
542+
const { isSupported: isMultiDispenseSupported } = multiWellHandling
526543
const dispense =
527-
multiDispense != null && path === 'multiDispense'
544+
multiDispense != null &&
545+
path === 'multiDispense' &&
546+
isMultiDispenseSupported
528547
? multiDispense
529548
: singleDispense
530549
const aspirateFlowRateFields = getFlowRateFields(
@@ -753,7 +772,10 @@ const getLiquidClassValuesMoveLiquid = (args: {
753772
Object.values(labwareEntities).find(
754773
({ labwareDefURI }) => labwareDefURI === tipRack
755774
)?.def ?? null
756-
const byVolumeLookup = getTransferPlanAndReferenceVolumes({
775+
const {
776+
referenceVolumes: byVolumeLookup,
777+
multiWellHandling,
778+
} = getTransferPlanAndReferenceVolumes({
757779
pipetteSpecs,
758780
tiprackDefinition,
759781
conditioningByVolume,
@@ -764,7 +786,8 @@ const getLiquidClassValuesMoveLiquid = (args: {
764786
aspirateAirGapByVolume: aspirate.retract.airGapByVolume as Array<
765787
[number, number]
766788
>,
767-
}).referenceVolumes
789+
})
790+
const { isSupported: isMultiDispenseSupported } = multiWellHandling
768791
// top-level aspirate fields
769792
const aspiratePositionReferenceFields = getPositionReferenceFields(
770793
aspiratePositionReference,
@@ -833,7 +856,9 @@ const getLiquidClassValuesMoveLiquid = (args: {
833856
})
834857
const dispenseSubmergeFields = getSubmergeRetractFields({
835858
submergeRetractLookup:
836-
path === 'multiDispense' && multiDispense != null
859+
path === 'multiDispense' &&
860+
multiDispense != null &&
861+
isMultiDispenseSupported
837862
? multiDispense.submerge
838863
: singleDispense.submerge,
839864
volumes: byVolumeLookup,
@@ -851,7 +876,9 @@ const getLiquidClassValuesMoveLiquid = (args: {
851876
})
852877
const dispenseRetractFields = getSubmergeRetractFields({
853878
submergeRetractLookup:
854-
path === 'multiDispense' && multiDispense != null
879+
path === 'multiDispense' &&
880+
multiDispense != null &&
881+
isMultiDispenseSupported
855882
? multiDispense.retract
856883
: singleDispense.retract,
857884
volumes: byVolumeLookup,

0 commit comments

Comments
 (0)