@@ -3,6 +3,7 @@ import { useTranslation } from 'react-i18next'
33
44import { InlineNotification , StyledText } from '@opentrons/components'
55
6+ import { useToaster } from '/app/organisms/ToasterOven'
67import {
78 SOURCE_ROBOT_SETTINGS ,
89 useCameraAnalytics ,
@@ -17,8 +18,11 @@ import styles from './preferences.module.css'
1718import { UsagePreferencesSettings } from './UsagePreferencesSettings'
1819
1920import type { ReactNode } from 'react'
21+ import type { Protocol } from '@opentrons/api-client'
2022import type { RobotStorageInfo } from '/app/resources/health/useIsImageStorageLow'
2123
24+ const TOAST_DURATION_MS = 3000
25+
2226export interface CameraSettingsProps {
2327 /* A header element for the page content. */
2428 headerElement : ReactNode
@@ -34,6 +38,7 @@ export interface CameraSettingsProps {
3438 not general settings context. */
3539 storageInfo : RobotStorageInfo | null
3640 isCameraRequired : boolean | null
41+ protocolRecord : Protocol | null
3742}
3843
3944export function CameraSettings ( {
@@ -48,8 +53,12 @@ export function CameraSettings({
4853 toggleLiveStreamEnabled,
4954 isRecoveryCaptureEnabled,
5055 isLiveVideoEnabled,
56+ protocolRecord,
5157} : CameraSettingsProps ) : JSX . Element {
58+ const { t } = useTranslation ( 'protocol_setup' )
5259 const isCameraSettingsEnabled = useFeatureFlag ( 'camera' )
60+ const isQuickTransfer = protocolRecord ?. data . protocolKind === 'quick-transfer'
61+ const { makeSnackbar } = useToaster ( )
5362 const [ showControls , setShowControls ] = useState ( false )
5463 const toggleShowControls = ( ) : void => {
5564 setShowControls ( ! showControls )
@@ -59,14 +68,17 @@ export function CameraSettings({
5968 robotType : robotType ,
6069 source : SOURCE_ROBOT_SETTINGS ,
6170 } )
71+ const recoveryEnabledByRunType = isQuickTransfer
72+ ? false
73+ : isRecoveryCaptureEnabled
6274
6375 const handleToggleCamera = ( ) : void => {
6476 toggleCameraEnabled ( )
6577 if ( isCameraRequired === null ) {
6678 reportCameraEnablementSettings ( {
6779 cameraEnabled : ! isCameraEnabled ,
6880 liveFeedEnabled : isLiveVideoEnabled ,
69- recoveryCaptureEnabled : isRecoveryCaptureEnabled ,
81+ recoveryCaptureEnabled : recoveryEnabledByRunType ,
7082 } )
7183 }
7284 }
@@ -76,19 +88,26 @@ export function CameraSettings({
7688 reportCameraEnablementSettings ( {
7789 cameraEnabled : isCameraEnabled ,
7890 liveFeedEnabled : ! isLiveVideoEnabled ,
79- recoveryCaptureEnabled : isRecoveryCaptureEnabled ,
91+ recoveryCaptureEnabled : recoveryEnabledByRunType ,
8092 } )
8193 }
8294 }
8395
8496 const handleToggleRecovery = ( ) : void => {
85- toggleRecoveryEnabled ( )
86- if ( isCameraRequired === null ) {
87- reportCameraEnablementSettings ( {
88- cameraEnabled : isCameraEnabled ,
89- liveFeedEnabled : isLiveVideoEnabled ,
90- recoveryCaptureEnabled : ! isRecoveryCaptureEnabled ,
91- } )
97+ if ( isQuickTransfer ) {
98+ makeSnackbar (
99+ t ( 'no_camera_during_quick_transfer' ) as string ,
100+ TOAST_DURATION_MS
101+ )
102+ } else {
103+ toggleRecoveryEnabled ( )
104+ if ( isCameraRequired === null ) {
105+ reportCameraEnablementSettings ( {
106+ cameraEnabled : isCameraEnabled ,
107+ liveFeedEnabled : isLiveVideoEnabled ,
108+ recoveryCaptureEnabled : ! isRecoveryCaptureEnabled ,
109+ } )
110+ }
92111 }
93112 }
94113 if ( showControls ) {
@@ -123,7 +142,7 @@ export function CameraSettings({
123142 toggleLiveVideoEnabled = { handleToggleLiveStream }
124143 toggleRecoveryCaptureEnabled = { handleToggleRecovery }
125144 isLiveVideoEnabled = { isLiveVideoEnabled }
126- isRecoveryCaptureEnabled = { isRecoveryCaptureEnabled }
145+ isRecoveryCaptureEnabled = { recoveryEnabledByRunType }
127146 robotName = { robotName }
128147 />
129148 { isCameraSettingsEnabled && (
0 commit comments