diff --git a/protocol-designer/src/assets/localization/en/feature_flags.json b/protocol-designer/src/assets/localization/en/feature_flags.json index 92a074088ba..851f8deb5a9 100644 --- a/protocol-designer/src/assets/localization/en/feature_flags.json +++ b/protocol-designer/src/assets/localization/en/feature_flags.json @@ -12,10 +12,6 @@ "title": "Allow all tip rack options", "description": "Enable selection of all tip racks for each pipette." }, - "OT_PD_ENABLE_ABSORBANCE_READER": { - "title": "Enable absorbance plate reader", - "description": "Enable absorbance plate reader support." - }, "OT_PD_ENABLE_COMMENT": { "title": "Enable comment step", "description": "You can add comments anywhere between timeline steps." diff --git a/protocol-designer/src/feature-flags/reducers.ts b/protocol-designer/src/feature-flags/reducers.ts index 336014c6691..efec2f863dd 100644 --- a/protocol-designer/src/feature-flags/reducers.ts +++ b/protocol-designer/src/feature-flags/reducers.ts @@ -23,8 +23,6 @@ const initialFlags: Flags = { process.env.OT_PD_DISABLE_MODULE_RESTRICTIONS === '1' || false, OT_PD_ALLOW_ALL_TIPRACKS: process.env.OT_PD_ALLOW_ALL_TIPRACKS === '1' || false, - OT_PD_ENABLE_ABSORBANCE_READER: - process.env.OT_PD_ENABLE_ABSORBANCE_READER === '1' || false, OT_PD_ENABLE_COMMENT: process.env.OT_PD_ENABLE_COMMENT === '1' || false, OT_PD_ENABLE_RETURN_TIP: process.env.OT_PD_ENABLE_RETURN_TIP === '1' || false, OT_PD_ENABLE_HOT_KEYS_DISPLAY: diff --git a/protocol-designer/src/feature-flags/selectors.ts b/protocol-designer/src/feature-flags/selectors.ts index 6b8a70f8b30..d673ad6bf09 100644 --- a/protocol-designer/src/feature-flags/selectors.ts +++ b/protocol-designer/src/feature-flags/selectors.ts @@ -25,10 +25,6 @@ export const getAllowAllTipracks: Selector = createSelector( getFeatureFlagData, flags => flags.OT_PD_ALLOW_ALL_TIPRACKS ?? false ) -export const getEnableAbsorbanceReader: Selector = createSelector( - getFeatureFlagData, - flags => flags.OT_PD_ENABLE_ABSORBANCE_READER ?? false -) export const getEnableComment: Selector = createSelector( getFeatureFlagData, flags => flags.OT_PD_ENABLE_COMMENT ?? false diff --git a/protocol-designer/src/feature-flags/types.ts b/protocol-designer/src/feature-flags/types.ts index 6840786d149..53ea6615c8b 100644 --- a/protocol-designer/src/feature-flags/types.ts +++ b/protocol-designer/src/feature-flags/types.ts @@ -25,13 +25,13 @@ export const DEPRECATED_FLAGS = [ 'OT_PD_ENABLE_MULTI_TIP', 'OT_PD_ENABLE_MOAM', 'OT_PD_ENABLE_REDESIGN', + 'OT_PD_ENABLE_ABSORBANCE_READER', ] // union of feature flag string constant IDs export type FlagTypes = | 'PRERELEASE_MODE' | 'OT_PD_DISABLE_MODULE_RESTRICTIONS' | 'OT_PD_ALLOW_ALL_TIPRACKS' - | 'OT_PD_ENABLE_ABSORBANCE_READER' | 'OT_PD_ENABLE_COMMENT' | 'OT_PD_ENABLE_RETURN_TIP' | 'OT_PD_ENABLE_HOT_KEYS_DISPLAY' @@ -46,7 +46,6 @@ export const userFacingFlags: FlagTypes[] = [ export const allFlags: FlagTypes[] = [ ...userFacingFlags, 'PRERELEASE_MODE', - 'OT_PD_ENABLE_ABSORBANCE_READER', 'OT_PD_ENABLE_COMMENT', 'OT_PD_ENABLE_RETURN_TIP', 'OT_PD_ENABLE_REACT_SCAN', diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx index 19e757ee0dc..717a6b2b762 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/SelectModules.tsx @@ -1,5 +1,4 @@ import { useTranslation } from 'react-i18next' -import { useSelector } from 'react-redux' import { ALIGN_CENTER, BORDERS, @@ -25,7 +24,6 @@ import { TEMPERATURE_MODULE_TYPE, } from '@opentrons/shared-data' import { uuid } from '../../utils' -import { getEnableAbsorbanceReader } from '../../feature-flags/selectors' import { useKitchen } from '../../organisms/Kitchen/hooks' import { ModuleDiagram } from './ModuleDiagram' import { WizardBody } from './WizardBody' @@ -51,7 +49,6 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { const fields = watch('fields') const modules = watch('modules') const additionalEquipment = watch('additionalEquipment') - const enableAbsorbanceReader = useSelector(getEnableAbsorbanceReader) const robotType = fields.robotType const supportedModules = robotType === FLEX_ROBOT_TYPE @@ -166,8 +163,7 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { > - {(filteredSupportedModules.length > 0 && enableAbsorbanceReader) || - // note (kk:09/26/2024) the condition for absorbanceReaderV1 will be removed when ff is removed + {filteredSupportedModules.length > 0 || !( filteredSupportedModules.length === 1 && filteredSupportedModules[0] === 'absorbanceReaderV1' @@ -179,11 +175,6 @@ export function SelectModules(props: WizardTileProps): JSX.Element | null { {filteredSupportedModules .sort((moduleA, moduleB) => moduleA.localeCompare(moduleB)) - .filter(module => - enableAbsorbanceReader - ? module - : module !== ABSORBANCE_READER_V1 - ) .map(moduleModel => { const numSlotsAvailable = getNumSlotsAvailable( modules, diff --git a/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/SelectModules.test.tsx b/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/SelectModules.test.tsx index c8c0a07cf7b..2d23f3a1fef 100644 --- a/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/SelectModules.test.tsx +++ b/protocol-designer/src/pages/CreateNewProtocolWizard/__tests__/SelectModules.test.tsx @@ -3,7 +3,6 @@ import '@testing-library/jest-dom/vitest' import { FLEX_ROBOT_TYPE, OT2_ROBOT_TYPE } from '@opentrons/shared-data' import { fireEvent, screen } from '@testing-library/react' import { i18n } from '../../../assets/localization' -import { getEnableAbsorbanceReader } from '../../../feature-flags/selectors' import { renderWithProviders } from '../../../__testing-utils__' import { SelectModules } from '../SelectModules' @@ -44,7 +43,6 @@ describe('SelectModules', () => { props = { ...mockWizardTileProps, } as WizardTileProps - vi.mocked(getEnableAbsorbanceReader).mockReturnValue(true) }) afterEach(() => { vi.restoreAllMocks() diff --git a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx index 51ceab2e937..d997835e831 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/DeckSetupTools.tsx @@ -49,7 +49,6 @@ import { selectNestedLabware, selectZoomedIntoSlot, } from '../../../labware-ingred/actions' -import { getEnableAbsorbanceReader } from '../../../feature-flags/selectors' import { useBlockingHint } from '../../../organisms/BlockingHintModal/useBlockingHint' import { selectors } from '../../../labware-ingred/selectors' import { useKitchen } from '../../../organisms/Kitchen/hooks' @@ -110,7 +109,6 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { 'change_magnet_module_model' ) const dispatch = useDispatch>() - const enableAbsorbanceReader = useSelector(getEnableAbsorbanceReader) const deckSetup = useSelector(getDeckSetupForActiveItem) const { selectedLabwareDefUri, @@ -144,9 +142,7 @@ export function DeckSetupTools(props: DeckSetupToolsProps): JSX.Element | null { }, [selectedModuleModel, selectedFixture]) const moduleModels = - slot != null - ? getModuleModelsBySlot(enableAbsorbanceReader, robotType, slot) - : null + slot != null ? getModuleModelsBySlot(robotType, slot) : null const [tab, setTab] = useState<'hardware' | 'labware'>( moduleModels?.length === 0 || slot === 'offDeck' ? 'labware' : 'hardware' ) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx b/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx index 0daab2f845e..df6c982a132 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/LabwareTools.tsx @@ -49,7 +49,6 @@ import { selectLabware, selectNestedLabware, } from '../../../labware-ingred/actions' -import { getEnableAbsorbanceReader } from '../../../feature-flags/selectors' import { ALL_ORDERED_CATEGORIES, CUSTOM_CATEGORY, @@ -134,8 +133,6 @@ export function LabwareTools(props: LabwareToolsProps): JSX.Element { robotType === OT2_ROBOT_TYPE ? isNextToHeaterShaker : false ) - const enablePlateReader = useSelector(getEnableAbsorbanceReader) - const getLabwareCompatible = useCallback( (def: LabwareDefinition2) => { // assume that custom (non-standard) labware is (potentially) compatible @@ -171,8 +168,7 @@ export function LabwareTools(props: LabwareToolsProps): JSX.Element { moduleType !== HEATERSHAKER_MODULE_TYPE) || (isAdapter96Channel && !has96Channel) || (slot === 'offDeck' && isAdapter) || - (!enablePlateReader && - PLATE_READER_LOADNAME === parameters.loadName && + (PLATE_READER_LOADNAME === parameters.loadName && moduleType !== ABSORBANCE_READER_TYPE) ) }, diff --git a/protocol-designer/src/pages/Designer/DeckSetup/__tests__/DeckSetupTools.test.tsx b/protocol-designer/src/pages/Designer/DeckSetup/__tests__/DeckSetupTools.test.tsx index 0283b9ab724..cfc366baf85 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/__tests__/DeckSetupTools.test.tsx +++ b/protocol-designer/src/pages/Designer/DeckSetup/__tests__/DeckSetupTools.test.tsx @@ -17,7 +17,6 @@ import { getSavedStepForms, } from '../../../../step-forms/selectors' import { getRobotType } from '../../../../file-data/selectors' -import { getEnableAbsorbanceReader } from '../../../../feature-flags/selectors' import { deleteDeckFixture } from '../../../../step-forms/actions/additionalItems' import { selectors } from '../../../../labware-ingred/selectors' import { getDismissedHints } from '../../../../tutorial/selectors' @@ -68,7 +67,6 @@ describe('DeckSetupTools', () => { }) vi.mocked(LabwareTools).mockReturnValue(
mock labware tools
) vi.mocked(getRobotType).mockReturnValue(FLEX_ROBOT_TYPE) - vi.mocked(getEnableAbsorbanceReader).mockReturnValue(true) vi.mocked(getDeckSetupForActiveItem).mockReturnValue({ labware: {}, modules: {}, diff --git a/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts b/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts index 7d48c7ea71d..c2925185923 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts +++ b/protocol-designer/src/pages/Designer/DeckSetup/__tests__/utils.test.ts @@ -16,10 +16,10 @@ import { FLEX_MODULE_MODELS, OT2_MODULE_MODELS } from '../constants' describe('getModuleModelsBySlot', () => { it('renders no modules for ot-2 middle slot', () => { - expect(getModuleModelsBySlot(false, OT2_ROBOT_TYPE, '5')).toEqual([]) + expect(getModuleModelsBySlot(OT2_ROBOT_TYPE, '5')).toEqual([]) }) it('renders all ot-2 modules for slot 7', () => { - expect(getModuleModelsBySlot(false, OT2_ROBOT_TYPE, '7')).toEqual( + expect(getModuleModelsBySlot(OT2_ROBOT_TYPE, '7')).toEqual( OT2_MODULE_MODELS ) }) @@ -28,7 +28,7 @@ describe('getModuleModelsBySlot', () => { model => model !== THERMOCYCLER_MODULE_V1 && model !== THERMOCYCLER_MODULE_V2 ) - expect(getModuleModelsBySlot(false, OT2_ROBOT_TYPE, '1')).toEqual(noTC) + expect(getModuleModelsBySlot(OT2_ROBOT_TYPE, '1')).toEqual(noTC) }) it('renders ot-2 modules minus thermocyclers & heater-shaker for slot 9', () => { const noTCAndHS = OT2_MODULE_MODELS.filter( @@ -37,15 +37,15 @@ describe('getModuleModelsBySlot', () => { model !== THERMOCYCLER_MODULE_V2 && model !== HEATERSHAKER_MODULE_V1 ) - expect(getModuleModelsBySlot(false, OT2_ROBOT_TYPE, '9')).toEqual(noTCAndHS) + expect(getModuleModelsBySlot(OT2_ROBOT_TYPE, '9')).toEqual(noTCAndHS) }) it('renders flex modules for middle slots', () => { - expect(getModuleModelsBySlot(false, FLEX_ROBOT_TYPE, 'B2')).toEqual([ + expect(getModuleModelsBySlot(FLEX_ROBOT_TYPE, 'B2')).toEqual([ MAGNETIC_BLOCK_V1, ]) }) it('renders all flex modules for B1', () => { - expect(getModuleModelsBySlot(true, FLEX_ROBOT_TYPE, 'B1')).toEqual( + expect(getModuleModelsBySlot(FLEX_ROBOT_TYPE, 'B1')).toEqual( FLEX_MODULE_MODELS.filter(model => model !== ABSORBANCE_READER_V1) ) }) @@ -54,7 +54,7 @@ describe('getModuleModelsBySlot', () => { model => model !== THERMOCYCLER_MODULE_V2 && model !== ABSORBANCE_READER_V1 ) - expect(getModuleModelsBySlot(true, FLEX_ROBOT_TYPE, 'C1')).toEqual(noTC) + expect(getModuleModelsBySlot(FLEX_ROBOT_TYPE, 'C1')).toEqual(noTC) }) }) diff --git a/protocol-designer/src/pages/Designer/DeckSetup/utils.ts b/protocol-designer/src/pages/Designer/DeckSetup/utils.ts index 0b1a455f3d4..1da3609df68 100644 --- a/protocol-designer/src/pages/Designer/DeckSetup/utils.ts +++ b/protocol-designer/src/pages/Designer/DeckSetup/utils.ts @@ -61,7 +61,6 @@ export function getCutoutIdForAddressableArea( } export function getModuleModelsBySlot( - enableAbsorbanceReader: boolean, robotType: RobotType, slot: DeckSlotId ): ModuleModelExtended[] { @@ -88,7 +87,7 @@ export function getModuleModelsBySlot( if (model === THERMOCYCLER_MODULE_V2) { return slot === 'B1' } else if (model === ABSORBANCE_READER_V1) { - return FLEX_RIGHT_SLOTS.has(slot) && enableAbsorbanceReader + return FLEX_RIGHT_SLOTS.has(slot) } else if ( model === TEMPERATURE_MODULE_V2 || model === HEATERSHAKER_MODULE_V1 diff --git a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/AddStepButton.tsx b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/AddStepButton.tsx index 52460aee461..16d7add611e 100644 --- a/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/AddStepButton.tsx +++ b/protocol-designer/src/pages/Designer/ProtocolSteps/Timeline/AddStepButton.tsx @@ -45,10 +45,7 @@ import { ConfirmDeleteModal, getMainPagePortalEl, } from '../../../../organisms' -import { - getEnableAbsorbanceReader, - getEnableComment, -} from '../../../../feature-flags/selectors' +import { getEnableComment } from '../../../../feature-flags/selectors' import { AddStepOverflowButton } from './AddStepOverflowButton' import type { MouseEvent } from 'react' @@ -87,7 +84,6 @@ export function AddStepButton({ hasText }: AddStepButtonProps): JSX.Element { const [enqueuedStepType, setEnqueuedStepType] = useState( null ) - const enableAbsorbanceReader = useSelector(getEnableAbsorbanceReader) const getSupportedSteps = (): Array< Exclude @@ -116,9 +112,7 @@ export function AddStepButton({ hasText }: AddStepButtonProps): JSX.Element { temperature: getIsModuleOnDeck(modules, TEMPERATURE_MODULE_TYPE), thermocycler: getIsModuleOnDeck(modules, THERMOCYCLER_MODULE_TYPE), heaterShaker: getIsModuleOnDeck(modules, HEATERSHAKER_MODULE_TYPE), - absorbanceReader: - getIsModuleOnDeck(modules, ABSORBANCE_READER_TYPE) && - enableAbsorbanceReader, + absorbanceReader: getIsModuleOnDeck(modules, ABSORBANCE_READER_TYPE), } const addStep = (stepType: StepType): ReturnType => diff --git a/protocol-designer/src/step-forms/selectors/index.ts b/protocol-designer/src/step-forms/selectors/index.ts index 3dcac3bd735..160410217e4 100644 --- a/protocol-designer/src/step-forms/selectors/index.ts +++ b/protocol-designer/src/step-forms/selectors/index.ts @@ -675,15 +675,13 @@ export const getInvariantContext: Selector< getAdditionalEquipmentEntities, featureFlagSelectors.getDisableModuleRestrictions, featureFlagSelectors.getAllowAllTipracks, - featureFlagSelectors.getEnableAbsorbanceReader, ( labwareEntities, moduleEntities, pipetteEntities, additionalEquipmentEntities, disableModuleRestrictions, - allowAllTipracks, - enableAbsorbanceReader + allowAllTipracks ) => ({ labwareEntities, moduleEntities, @@ -692,7 +690,6 @@ export const getInvariantContext: Selector< config: { OT_PD_ALLOW_ALL_TIPRACKS: Boolean(allowAllTipracks), OT_PD_DISABLE_MODULE_RESTRICTIONS: Boolean(disableModuleRestrictions), - OT_PD_ENABLE_ABSORBANCE_READER: Boolean(enableAbsorbanceReader), }, }) )