diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/LabwareStackModal.tsx b/app/src/organisms/Devices/ProtocolRun/SetupLabware/LabwareStackModal.tsx index 83fdf1d9260..80bd38a3255 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/LabwareStackModal.tsx +++ b/app/src/organisms/Devices/ProtocolRun/SetupLabware/LabwareStackModal.tsx @@ -23,9 +23,17 @@ import { getLocationInfoNames } from '../utils/getLocationInfoNames' import { getSlotLabwareDefinition } from '../utils/getSlotLabwareDefinition' import { Divider } from '../../../../atoms/structure' import { getModuleImage } from '../SetupModuleAndDeck/utils' -import { getModuleDisplayName } from '@opentrons/shared-data' +import { + FLEX_ROBOT_TYPE, + getModuleDisplayName, + getModuleType, + TC_MODULE_LOCATION_OT2, + TC_MODULE_LOCATION_OT3, +} from '@opentrons/shared-data' import tiprackAdapter from '../../../../assets/images/labware/opentrons_flex_96_tiprack_adapter.png' +import type { RobotType } from '@opentrons/shared-data' + const HIDE_SCROLLBAR = css` ::-webkit-scrollbar { display: none; @@ -36,12 +44,13 @@ interface LabwareStackModalProps { labwareIdTop: string runId: string closeModal: () => void + robotType?: RobotType } export const LabwareStackModal = ( props: LabwareStackModalProps ): JSX.Element | null => { - const { labwareIdTop, runId, closeModal } = props + const { labwareIdTop, runId, closeModal, robotType = FLEX_ROBOT_TYPE } = props const { t } = useTranslation('protocol_setup') const isOnDevice = useSelector(getIsOnDevice) const protocolData = useMostRecentCompletedAnalysis(runId) @@ -60,6 +69,14 @@ export const LabwareStackModal = ( const topDefinition = getSlotLabwareDefinition(labwareIdTop, commands) const adapterDef = getSlotLabwareDefinition(adapterId ?? '', commands) + const isModuleThermocycler = + moduleModel == null + ? false + : getModuleType(moduleModel) === 'thermocyclerModuleType' + const thermocyclerLocation = + robotType === FLEX_ROBOT_TYPE + ? TC_MODULE_LOCATION_OT3 + : TC_MODULE_LOCATION_OT2 const moduleDisplayName = moduleModel != null ? getModuleDisplayName(moduleModel) : null ?? '' const tiprackAdapterImg = ( @@ -80,7 +97,9 @@ export const LabwareStackModal = ( header={{ title: ( - + ), @@ -156,7 +175,11 @@ export const LabwareStackModal = ( onClose={closeModal} closeOnOutsideClick title={t('stacked_slot')} - titleElement1={} + titleElement1={ + + } titleElement2={} childrenPadding={0} marginLeft="0" diff --git a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx b/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx index 9a3c04fdc5f..8a35d8d203e 100644 --- a/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx +++ b/app/src/organisms/Devices/ProtocolRun/SetupLabware/SetupLabwareMap.tsx @@ -180,6 +180,7 @@ export function SetupLabwareMap({ closeModal={() => { setLabwareStackDetailsLabwareId(null) }} + robotType={robotType} /> )} diff --git a/app/src/organisms/ProtocolSetupLabware/index.tsx b/app/src/organisms/ProtocolSetupLabware/index.tsx index 919d887f491..cbc8d363b4b 100644 --- a/app/src/organisms/ProtocolSetupLabware/index.tsx +++ b/app/src/organisms/ProtocolSetupLabware/index.tsx @@ -98,6 +98,7 @@ export function ProtocolSetupLabware({ | (LabwareDefinition2 & { location: LabwareLocation nickName: string | null + id: string }) | null >(null) @@ -143,13 +144,21 @@ export function ProtocolSetupLabware({ ...labwareDef, location: foundLabware.location, nickName: nickName ?? null, + id: labwareId, }) setShowLabwareDetailsModal(true) } } + const selectedLabwareIsTopOfStack = mostRecentAnalysis?.commands.some( + command => + command.commandType === 'loadLabware' && + command.result?.labwareId === selectedLabware?.id && + typeof command.params.location === 'object' && + ('moduleId' in command.params.location || + 'labwareId' in command.params.location) + ) let location: JSX.Element | string | null = null - let topLabwareId: string | null = null if ( selectedLabware != null && typeof selectedLabware.location === 'object' && @@ -178,17 +187,6 @@ export function ProtocolSetupLabware({ module.moduleId === selectedLabware.location.moduleId ) if (matchedModule != null) { - topLabwareId = - mostRecentAnalysis?.commands.find( - (command): command is LoadLabwareRunTimeCommand => { - return ( - command.commandType === 'loadLabware' && - typeof command.params.location === 'object' && - 'moduleId' in command.params.location && - command.params.location.moduleId === matchedModule.moduleId - ) - } - )?.result?.labwareId ?? null location = } } else if ( @@ -203,17 +201,6 @@ export function ProtocolSetupLabware({ command.result?.labwareId === adapterId )?.params.location if (adapterLocation != null && adapterLocation !== 'offDeck') { - topLabwareId = - mostRecentAnalysis?.commands.find( - (command): command is LoadLabwareRunTimeCommand => { - return ( - command.commandType === 'loadLabware' && - typeof command.params.location === 'object' && - 'labwareId' in command.params.location && - command.params.location.labwareId === adapterId - ) - } - )?.result?.labwareId ?? null if ('slotName' in adapterLocation) { location = } else if ('moduleId' in adapterLocation) { @@ -232,7 +219,7 @@ export function ProtocolSetupLabware({ {createPortal( <> {showLabwareDetailsModal && - topLabwareId == null && + !selectedLabwareIsTopOfStack && selectedLabware != null ? ( { @@ -357,9 +344,11 @@ export function ProtocolSetupLabware({ })} )} - {showLabwareDetailsModal && topLabwareId != null ? ( + {showLabwareDetailsModal && + selectedLabware != null && + selectedLabwareIsTopOfStack ? ( { setSelectedLabware(null) diff --git a/components/src/hardware-sim/Labware/LabwareStackRender.tsx b/components/src/hardware-sim/Labware/LabwareStackRender.tsx index d9184e327f0..6b1b9aec35d 100644 --- a/components/src/hardware-sim/Labware/LabwareStackRender.tsx +++ b/components/src/hardware-sim/Labware/LabwareStackRender.tsx @@ -1,6 +1,6 @@ import * as React from 'react' import { WellLabels, StaticLabware } from './labwareInternals' -import { LabwareAdapter } from './LabwareAdapter' +import { LabwareAdapter, labwareAdapterLoadNames } from './LabwareAdapter' import { COLORS } from '../../helix-design-system' import { Svg } from '../..' @@ -8,7 +8,6 @@ import type { LabwareDefinition2 } from '@opentrons/shared-data' import type { HighlightedWellLabels } from './labwareInternals/types' import type { LabwareAdapterLoadName } from './LabwareAdapter' import type { WellLabelOption } from '../..' - const HIGHLIGHT_COLOR = COLORS.blue30 const STROKE_WIDTH = 1 const SKEW_ANGLE_DEGREES = 30 @@ -87,7 +86,9 @@ export const LabwareStackRender = ( definitionBottom.parameters.loadName === 'opentrons_flex_96_tiprack_adapter' ) { const { xDimension, yDimension } = definitionTop.dimensions - const isTopAdapter = definitionTop.metadata.displayCategory === 'adapter' + const isTopAdapter = labwareAdapterLoadNames.includes( + definitionTop.parameters.loadName + ) return isTopAdapter ? ( // adapter render