diff --git a/app/src/assets/localization/en/protocol_command_text.json b/app/src/assets/localization/en/protocol_command_text.json index f026cd6e865..e7f50460e79 100644 --- a/app/src/assets/localization/en/protocol_command_text.json +++ b/app/src/assets/localization/en/protocol_command_text.json @@ -1,4 +1,6 @@ { + "adapter_in_mod_in_slot": "{{adapter}} on {{module}} in {{slot}}", + "adapter_in_slot": "{{adapter}} in {{slot}}", "aspirate": "Aspirating {{volume}} µL from well {{well_name}} of {{labware}} in {{labware_location}} at {{flow_rate}} µL/sec", "blowout": "Blowing out at well {{well_name}} of {{labware}} in {{labware_location}} at {{flow_rate}} µL/sec", "closing_tc_lid": "Closing Thermocycler lid", @@ -34,6 +36,7 @@ "pause_on": "Pause on {{robot_name}}", "pause": "Pause", "pickup_tip": "Picking up tip from {{well_name}} of {{labware}} in {{labware_location}}", + "return_tip": "Returning tip to {{well_name}} of {{labware}} in {{labware_location}}", "save_position": "Saving position", "set_and_await_hs_shake": "Setting Heater-Shaker to shake at {{rpm}} rpm and waiting until reached", "setting_hs_temp": "Setting Target Temperature of Heater-Shaker to {{temp}}", diff --git a/app/src/organisms/CommandText/PipettingCommandText.tsx b/app/src/organisms/CommandText/PipettingCommandText.tsx index 5249386dfe5..64c55b23f66 100644 --- a/app/src/organisms/CommandText/PipettingCommandText.tsx +++ b/app/src/organisms/CommandText/PipettingCommandText.tsx @@ -1,7 +1,5 @@ import { useTranslation } from 'react-i18next' -import { getLoadedLabware } from './utils/accessors' -import { getLabwareName, getLabwareDisplayLocation } from './utils' -import type { +import { CompletedProtocolAnalysis, AspirateRunTimeCommand, DispenseRunTimeCommand, @@ -9,7 +7,11 @@ import type { MoveToWellRunTimeCommand, DropTipRunTimeCommand, PickUpTipRunTimeCommand, + getLabwareDefURI, } from '@opentrons/shared-data' +import { getLabwareDefinitionsFromCommands } from '../LabwarePositionCheck/utils/labware' +import { getLoadedLabware } from './utils/accessors' +import { getLabwareName, getLabwareDisplayLocation } from './utils' type PipettingRunTimeCommmand = | AspirateRunTimeCommand @@ -32,6 +34,7 @@ export const PipettingCommandText = ({ const { labwareId, wellName } = command.params const labwareLocation = getLoadedLabware(robotSideAnalysis, labwareId) ?.location + const displayLocation = labwareLocation != null ? getLabwareDisplayLocation(robotSideAnalysis, labwareLocation, t) @@ -74,11 +77,23 @@ export const PipettingCommandText = ({ }) } case 'dropTip': { - return t('drop_tip', { - well_name: wellName, - labware: getLabwareName(robotSideAnalysis, labwareId), - labware_location: displayLocation, - }) + const loadedLabware = getLoadedLabware(robotSideAnalysis, labwareId) + const labwareDefinitions = getLabwareDefinitionsFromCommands( + robotSideAnalysis.commands + ) + const labwareDef = labwareDefinitions.find( + lw => getLabwareDefURI(lw) === loadedLabware?.definitionUri + ) + return labwareDef?.parameters.isTiprack + ? t('return_tip', { + well_name: wellName, + labware: getLabwareName(robotSideAnalysis, labwareId), + labware_location: displayLocation, + }) + : t('drop_tip', { + well_name: wellName, + labware: getLabwareName(robotSideAnalysis, labwareId), + }) } case 'pickUpTip': { return t('pickup_tip', { diff --git a/app/src/organisms/CommandText/__tests__/CommandText.test.tsx b/app/src/organisms/CommandText/__tests__/CommandText.test.tsx index 072da01a1ea..19473a26dda 100644 --- a/app/src/organisms/CommandText/__tests__/CommandText.test.tsx +++ b/app/src/organisms/CommandText/__tests__/CommandText.test.tsx @@ -10,7 +10,11 @@ import type { LoadLabwareRunTimeCommand, LoadLiquidRunTimeCommand, } from '@opentrons/shared-data/protocol/types/schemaV7/command/setup' -import { LabwareDefinition2, RunTimeCommand } from '@opentrons/shared-data' +import { + LabwareDefinition2, + RunTimeCommand, + DropTipRunTimeCommand, +} from '@opentrons/shared-data' describe('CommandText', () => { it('renders correct text for aspirate', () => { @@ -107,6 +111,26 @@ describe('CommandText', () => { getByText('Dropping tip in A1 of Fixed Trash') } }) + it('renders correct text for dropTip into a labware', () => { + const { getByText } = renderWithProviders( + , + { i18nInstance: i18n } + )[0] + getByText('Returning tip to A1 of Opentrons 96 Tip Rack 300 µL in Slot 9') + }) it('renders correct text for pickUpTip', () => { const command = mockRobotSideAnalysis.commands.find( c => c.commandType === 'pickUpTip' diff --git a/app/src/organisms/CommandText/utils/getLabwareDisplayLocation.ts b/app/src/organisms/CommandText/utils/getLabwareDisplayLocation.ts index 1d8e09a6a00..3852d4655ca 100644 --- a/app/src/organisms/CommandText/utils/getLabwareDisplayLocation.ts +++ b/app/src/organisms/CommandText/utils/getLabwareDisplayLocation.ts @@ -67,7 +67,7 @@ export function getLabwareDisplayLocation( } else if ('slotName' in adapter.location) { return t('adapter_in_slot', { adapter: adapterDisplayName, - slot_name: adapter.location.slotName, + slot: adapter.location.slotName, }) } else if ('moduleId' in adapter.location) { const moduleIdUnderAdapter = adapter.location.moduleId @@ -82,14 +82,14 @@ export function getLabwareDisplayLocation( robotSideAnalysis, adapter.location.moduleId ) - return t('adapter_in_module_in_slot', { + return t('adapter_in_mod_in_slot', { count: getOccludedSlotCountForModule( getModuleType(moduleModel), robotSideAnalysis.robotType ?? OT2_STANDARD_MODEL ), module: getModuleDisplayName(moduleModel), adapter: adapterDisplayName, - slot_name: slotName, + slot: slotName, }) } else { console.warn(