1
- import { useCallback , useContext , useEffect , useRef } from 'react'
1
+ import { useCallback , useContext , useEffect , useRef , useState } from 'react'
2
2
import { useTranslation } from 'react-i18next'
3
3
import { useQueryClient } from 'react-query'
4
4
import { useDispatch } from 'react-redux'
@@ -135,7 +135,14 @@ export function useProtocolReceiptToast(): void {
135
135
} , [ protocolIds ] )
136
136
}
137
137
138
- export function useGetNewModules ( ) : AttachedModule [ ] {
138
+ const MODULES_NOT_REQUIRING_PIPETTE_FOR_SETUP : ModuleType [ ] = [
139
+ ABSORBANCE_READER_TYPE ,
140
+ FLEX_STACKER_MODULE_TYPE ,
141
+ ]
142
+
143
+ const MODULES_NOT_REQUIRING_CALIBRATION = MODULES_NOT_REQUIRING_PIPETTE_FOR_SETUP
144
+
145
+ export function useGetUnlocatedModules ( ) : AttachedModule [ ] {
139
146
const attachedModules =
140
147
useAttachedModules ( {
141
148
refetchInterval : ATTACHED_MODULE_POLL_MS ,
@@ -148,59 +155,54 @@ export function useGetNewModules(): AttachedModule[] {
148
155
const modulesInDeckConfig = deckConfig
149
156
?. filter ( c => c . opentronsModuleSerialNumber )
150
157
. map ( m => m . opentronsModuleSerialNumber )
151
- const newModules = attachedModules . filter (
152
- m =>
153
- m . moduleOffset === undefined &&
154
- ! modulesInDeckConfig . includes ( m . serialNumber )
158
+ return attachedModules . filter (
159
+ m => ! modulesInDeckConfig . includes ( m . serialNumber )
155
160
)
156
- return newModules
157
161
}
158
162
return [ ]
159
163
}
160
164
161
- const MODULES_NOT_REQUIRING_PIPETTE_FOR_SETUP : ModuleType [ ] = [
162
- ABSORBANCE_READER_TYPE ,
163
- FLEX_STACKER_MODULE_TYPE ,
164
- ]
165
+ export function useGetModulesNeedingSetup ( ) : AttachedModule [ ] {
166
+ const allNewModules = useGetUnlocatedModules ( )
167
+ console . log ( `ugmns: ${ allNewModules } ` )
168
+ return allNewModules . filter (
169
+ m =>
170
+ MODULES_NOT_REQUIRING_CALIBRATION . includes ( m . moduleType ) ||
171
+ m . moduleOffset === undefined
172
+ )
173
+ }
174
+
175
+ export function useGetModulesNeedingSetupThatCanCurrentlyBeSetUp ( ) : AttachedModule [ ] {
176
+ const modulesRequiringSetup = useGetModulesNeedingSetup ( )
177
+ const attachedPipettes = useAttachedPipettes ( modulesRequiringSetup . length > 0 )
178
+ console . log ( `ugmnstccbs: ${ modulesRequiringSetup } ` )
179
+ return modulesRequiringSetup . filter (
180
+ m =>
181
+ MODULES_NOT_REQUIRING_PIPETTE_FOR_SETUP . includes ( m . moduleType ) ||
182
+ attachedPipettes . left != null ||
183
+ attachedPipettes . right != null
184
+ )
185
+ }
165
186
166
187
export function useModuleAttachedToast (
167
188
launchModuleSetupCallback : ( ) => void
168
189
) : void {
169
- const newModules = useGetNewModules ( )
170
- const currentRunId = useCurrentRunId ( { refetchInterval : CURRENT_RUN_POLL } )
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 ) )
190
+ const currentlySetuppableModules = useGetModulesNeedingSetupThatCanCurrentlyBeSetUp ( )
191
+ console . log ( `umat: ${ currentlySetuppableModules } ` )
179
192
180
- const attachedPipettes = useAttachedPipettes (
181
- moduleSerialsRequiringPipette . length > 0
182
- )
193
+ const currentRunId = useCurrentRunId ( { refetchInterval : CURRENT_RUN_POLL } )
183
194
const { t, i18n } = useTranslation ( [ 'module_wizard_flows' , 'shared' ] )
184
195
const { makeToast } = useToaster ( )
185
- const moduleSerials = newModules . map ( m => m . serialNumber )
196
+ const moduleSerials = currentlySetuppableModules . map ( m => m . serialNumber )
186
197
const moduleSerialsRef = useRef ( moduleSerials )
187
198
const runInProgress = currentRunId != null
188
199
200
+ const [ firstRun , setFirstRun ] = useState < boolean > ( true )
201
+
189
202
useEffect ( ( ) => {
190
203
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
- )
197
- const hasPipette =
198
- attachedPipettes . left != null || attachedPipettes . right != null
199
- if (
200
- ! runInProgress &&
201
- ( ( hasPipette && newModulesRequiringPipette . length > 0 ) ||
202
- newModulesNotRequiringPipette . length > 0 )
203
- ) {
204
+ console . log ( `umat effect: ${ newModuleSerials } ` )
205
+ if ( ! runInProgress && newModuleSerials . length > 0 ) {
204
206
makeToast ( t ( 'module_added' ) as string , 'info' , {
205
207
buttonText : i18n . format ( t ( 'shared:close' ) , 'capitalize' ) ,
206
208
linkText : t ( 'module_added_link' ) ,
@@ -210,9 +212,10 @@ export function useModuleAttachedToast(
210
212
} )
211
213
}
212
214
moduleSerialsRef . current = moduleSerials
215
+ setFirstRun ( false )
213
216
// dont want this hook to rerun when other deps change
214
217
// eslint-disable-next-line react-hooks/exhaustive-deps
215
- } , [ moduleSerials , runInProgress , moduleSerialsRequiringPipette ] )
218
+ } , [ moduleSerials , runInProgress , firstRun ] )
216
219
}
217
220
218
221
export function useScrollRef ( ) : {
0 commit comments