Skip to content

Commit 43f4828

Browse files
committed
"fix" (app): allow setup with no pipette
We want to allow module setup flows when there aren't pipettes attached, if the module can be setup without pipettes. Which is some of them, some of the time, from 3 different places. "Closes" RQA-4481
1 parent 95b9d6e commit 43f4828

16 files changed

+120
-43
lines changed

app/src/App/hooks.ts

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import {
1515
useCreateLiveCommandMutation,
1616
useHost,
1717
} from '@opentrons/react-api-client'
18+
import {
19+
ABSORBANCE_READER_TYPE,
20+
FLEX_STACKER_MODULE_TYPE,
21+
} from '@opentrons/shared-data'
1822

1923
import { useToaster } from '/app/organisms/ToasterOven'
2024
import { checkShellUpdate } from '/app/redux/shell'
@@ -26,7 +30,10 @@ import { useCurrentRunId } from '../resources/runs'
2630
import { SharedScrollRefContext } from './ODDProviders/ScrollRefProvider'
2731

2832
import type { AttachedModule } from '@opentrons/api-client'
29-
import type { SetStatusBarCreateCommand } from '@opentrons/shared-data'
33+
import type {
34+
ModuleType,
35+
SetStatusBarCreateCommand,
36+
} from '@opentrons/shared-data'
3037
import type { Dispatch } from '/app/redux/types'
3138

3239
const UPDATE_RECHECK_INTERVAL_MS = 60000
@@ -151,12 +158,28 @@ export function useGetNewModules(): AttachedModule[] {
151158
return []
152159
}
153160

161+
const MODULES_NOT_REQUIRING_PIPETTE_FOR_SETUP: ModuleType[] = [
162+
ABSORBANCE_READER_TYPE,
163+
FLEX_STACKER_MODULE_TYPE,
164+
]
165+
154166
export function useModuleAttachedToast(
155167
launchModuleSetupCallback: () => void
156168
): void {
157169
const newModules = useGetNewModules()
158170
const currentRunId = useCurrentRunId({ refetchInterval: CURRENT_RUN_POLL })
159-
const attachedPipettes = useAttachedPipettes(newModules.length > 0)
171+
const modulesNotRequiringPipette = newModules
172+
.filter(thisModule =>
173+
MODULES_NOT_REQUIRING_PIPETTE_FOR_SETUP.includes(thisModule.moduleType)
174+
)
175+
.map(thisModule => thisModule.serialNumber)
176+
const moduleSerialsRequiringPipette = newModules
177+
.map(thisModule => thisModule.serialNumber)
178+
.filter(thisSerial => !modulesNotRequiringPipette.includes(thisSerial))
179+
180+
const attachedPipettes = useAttachedPipettes(
181+
moduleSerialsRequiringPipette.length > 0
182+
)
160183
const { t, i18n } = useTranslation(['module_wizard_flows', 'shared'])
161184
const { makeToast } = useToaster()
162185
const moduleSerials = newModules.map(m => m.serialNumber)
@@ -165,9 +188,19 @@ export function useModuleAttachedToast(
165188

166189
useEffect(() => {
167190
const newModuleSerials = difference(moduleSerials, moduleSerialsRef.current)
191+
const newModulesRequiringPipette = newModuleSerials.filter(serial =>
192+
moduleSerialsRequiringPipette.includes(serial)
193+
)
194+
const newModulesNotRequiringPipette = newModuleSerials.filter(
195+
serial => !moduleSerialsRequiringPipette.includes(serial)
196+
)
168197
const hasPipette =
169198
attachedPipettes.left != null || attachedPipettes.right != null
170-
if (!runInProgress && hasPipette && newModuleSerials.length > 0) {
199+
if (
200+
!runInProgress &&
201+
((hasPipette && newModulesRequiringPipette.length > 0) ||
202+
newModulesNotRequiringPipette.length > 0)
203+
) {
171204
makeToast(t('module_added') as string, 'info', {
172205
buttonText: i18n.format(t('shared:close'), 'capitalize'),
173206
linkText: t('module_added_link'),
@@ -179,7 +212,7 @@ export function useModuleAttachedToast(
179212
moduleSerialsRef.current = moduleSerials
180213
// dont want this hook to rerun when other deps change
181214
// eslint-disable-next-line react-hooks/exhaustive-deps
182-
}, [moduleSerials, runInProgress])
215+
}, [moduleSerials, runInProgress, moduleSerialsRequiringPipette])
183216
}
184217

185218
export function useScrollRef(): {

app/src/molecules/UpdateBanner/index.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,17 @@ export const UpdateBanner = ({
5151
return t('module_calibration_required')
5252
}
5353

54-
const canProceed =
55-
updateType === 'firmware'
56-
? true
57-
: !isEstopNotDisengaged &&
58-
!isTooHot &&
59-
!attachPipetteRequired &&
60-
!calibratePipetteRequired &&
61-
!updatePipetteFWRequired
54+
const proceedChecks = {
55+
firmware: () => true,
56+
calibration: () =>
57+
!isEstopNotDisengaged &&
58+
!isTooHot &&
59+
!attachPipetteRequired &&
60+
!calibratePipetteRequired &&
61+
!updatePipetteFWRequired,
62+
setup: () => true,
63+
}
64+
const canProceed = proceedChecks[updateType]()
6265

6366
const getMessage = (): string => {
6467
switch (updateType) {

app/src/organisms/ModuleWizardFlows/AttachProbe.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import { SimpleWizardInProgressBody } from '/app/molecules/SimpleWizardBody'
2121
import { getFixtureIdByCutoutId } from './getFixtureIdByCutoutId'
2222

2323
import type { CreateCommand, DeckConfiguration } from '@opentrons/shared-data'
24-
import type { ModuleSetupWizardStepProps } from './types'
24+
import type { ModuleSetupWizardRequiresPipetteStepProps } from './types'
2525

26-
interface AttachProbeProps extends ModuleSetupWizardStepProps {
26+
interface AttachProbeProps extends ModuleSetupWizardRequiresPipetteStepProps {
2727
adapterId: string | null
2828
deckConfig: DeckConfiguration
2929
}

app/src/organisms/ModuleWizardFlows/BeforeBeginning.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ import { GenericWizardTile } from '/app/molecules/GenericWizardTile'
1212
import { WizardRequiredEquipmentList } from '/app/molecules/WizardRequiredEquipmentList'
1313

1414
import type { AttachedModule } from '@opentrons/api-client'
15-
import type { ModuleSetupWizardStepProps } from './types'
15+
import type { ModuleSetupWizardMaybePipetteStepProps } from './types'
1616

1717
interface EqipmentItem {
1818
loadName: string
1919
displayName: string
2020
subtitle?: string
2121
}
2222

23-
interface BeforeBeginningProps extends ModuleSetupWizardStepProps {}
23+
interface BeforeBeginningProps extends ModuleSetupWizardMaybePipetteStepProps {}
2424

2525
export function BeforeBeginning(props: BeforeBeginningProps): JSX.Element {
2626
const { proceed, attachedModule, setErrorMessage } = props

app/src/organisms/ModuleWizardFlows/CheckStackerInstall.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ import { useSendIdentifyStacker } from './hooks'
1111

1212
import type { AttachedModule } from '@opentrons/api-client'
1313
import type { DeckConfiguration } from '@opentrons/shared-data'
14-
import type { ModuleSetupWizardStepProps } from './types'
14+
import type { ModuleSetupWizardMaybePipetteStepProps } from './types'
1515

16-
interface CheckStackerInstallProps extends ModuleSetupWizardStepProps {
16+
interface CheckStackerInstallProps
17+
extends ModuleSetupWizardMaybePipetteStepProps {
1718
deckConfig: DeckConfiguration
1819
attachedModules: AttachedModule[]
1920
doorOpenStatus: boolean

app/src/organisms/ModuleWizardFlows/CloseStackerDoor.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ import {
1313
} from '/app/molecules/SimpleWizardBody'
1414

1515
import type { CreateCommand, DeckConfiguration } from '@opentrons/shared-data'
16-
import type { ModuleSetupWizardStepProps } from './types'
16+
import type { ModuleSetupWizardMaybePipetteStepProps } from './types'
1717

18-
interface CloseDoorProps extends ModuleSetupWizardStepProps {
18+
interface CloseDoorProps extends ModuleSetupWizardMaybePipetteStepProps {
1919
deckConfig: DeckConfiguration
2020
}
2121

app/src/organisms/ModuleWizardFlows/DetachProbe.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import detachProbe8 from '/app/assets/videos/pipette-wizard-flows/Pipette_Detach
1515
import detachProbe96 from '/app/assets/videos/pipette-wizard-flows/Pipette_Detach_Probe_96.webm'
1616
import { GenericWizardTile } from '/app/molecules/GenericWizardTile'
1717

18-
import type { ModuleSetupWizardStepProps } from './types'
18+
import type { ModuleSetupWizardRequiresPipetteStepProps } from './types'
1919

2020
const BODY_STYLE = css`
2121
${TYPOGRAPHY.pRegular};
@@ -26,7 +26,9 @@ const BODY_STYLE = css`
2626
}
2727
`
2828

29-
export function DetachProbe(props: ModuleSetupWizardStepProps): JSX.Element {
29+
export function DetachProbe(
30+
props: ModuleSetupWizardRequiresPipetteStepProps
31+
): JSX.Element {
3032
const { attachedPipette, proceed, goBack } = props
3133
const { t, i18n } = useTranslation('module_wizard_flows')
3234

app/src/organisms/ModuleWizardFlows/InstallShuttle.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ import { SimpleWizardBody } from '/app/molecules/SimpleWizardBody'
2222

2323
import type { AttachedModule } from '@opentrons/api-client'
2424
import type { DeckConfiguration } from '@opentrons/shared-data'
25-
import type { ModuleSetupWizardStepProps } from './types'
25+
import type { ModuleSetupWizardMaybePipetteStepProps } from './types'
2626

27-
interface InstallShuttleProps extends ModuleSetupWizardStepProps {
27+
interface InstallShuttleProps extends ModuleSetupWizardMaybePipetteStepProps {
2828
deckConfig: DeckConfiguration
2929
attachedModules: AttachedModule[]
3030
}

app/src/organisms/ModuleWizardFlows/PlaceAdapter.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ import { SimpleWizardInProgressBody } from '/app/molecules/SimpleWizardBody'
3333
import { LEFT_SLOTS } from './constants'
3434

3535
import type { CreateCommand, DeckConfiguration } from '@opentrons/shared-data'
36-
import type { ModuleSetupWizardStepProps } from './types'
36+
import type { ModuleSetupWizardRequiresPipetteStepProps } from './types'
3737

38-
interface PlaceAdapterProps extends ModuleSetupWizardStepProps {
38+
interface PlaceAdapterProps extends ModuleSetupWizardRequiresPipetteStepProps {
3939
deckConfig: DeckConfiguration
4040
setCreatedAdapterId: (adapterId: string) => void
4141
}

app/src/organisms/ModuleWizardFlows/SelectLocation.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import type {
4242
CutoutId,
4343
DeckConfiguration,
4444
} from '@opentrons/shared-data'
45-
import type { ModuleSetupWizardStepProps } from './types'
45+
import type { ModuleSetupWizardMaybePipetteStepProps } from './types'
4646

4747
export const BODY_STYLE = css`
4848
${TYPOGRAPHY.pRegular};
@@ -52,7 +52,8 @@ export const BODY_STYLE = css`
5252
line-height: 1.75rem;
5353
}
5454
`
55-
export interface SelectLocationProps extends ModuleSetupWizardStepProps {
55+
export interface SelectLocationProps
56+
extends ModuleSetupWizardMaybePipetteStepProps {
5657
deckConfig: DeckConfiguration
5758
createMaintenanceRun: CreateMaintenanceRunType
5859
isLoadedInRun: boolean

0 commit comments

Comments
 (0)