Skip to content

Commit b1c15cc

Browse files
authored
feat(app): remove position screen from delay (#18836)
* feat(app): remove position screen from delay
1 parent 86f41ee commit b1c15cc

File tree

9 files changed

+5
-179
lines changed

9 files changed

+5
-179
lines changed

app/src/assets/localization/en/quick_transfer.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@
5555
"delay_after_aspirating": "Delay after aspirating",
5656
"delay_before_dispensing": "Delay before dispensing",
5757
"delay_duration_s": "Delay duration (seconds)",
58-
"delay_position_mm": "Delay position from bottom of well (mm)",
59-
"delay_value": "{{delay}}s, {{position}} mm from bottom",
58+
"delay_value": "{{delay}}s",
6059
"delay": "Delay",
6160
"delete_this_transfer": "Delete this quick transfer?",
6261
"delete_transfer": "Delete quick transfer",

app/src/organisms/ODD/QuickTransferFlow/Aspirate/hooks/useAspirateSettingsConfig.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ export function useAspirateSettingsConfig({
120120
state.delayAspirate !== undefined
121121
? t('delay_value', {
122122
delay: state.delayAspirate.delayDuration,
123-
position: state.delayAspirate.positionFromBottom,
124123
})
125124
: '',
126125
enabled: true,

app/src/organisms/ODD/QuickTransferFlow/Dispense/hooks/useDispenseSettingsConfig.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ export function useDispenseSettingsConfig({
9292
state.delayDispense !== undefined
9393
? t('delay_value', {
9494
delay: state.delayDispense.delayDuration,
95-
position: state.delayDispense.positionFromBottom,
9695
})
9796
: '',
9897
enabled: true,

app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/Delay.tsx

Lines changed: 2 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,6 @@ export function Delay(props: DelayProps): JSX.Element {
5353
? state.delayAspirate?.delayDuration ?? null
5454
: state.delayDispense?.delayDuration ?? null
5555
)
56-
const [position, setPosition] = useState<number | null>(
57-
kind === 'aspirate'
58-
? state.delayAspirate?.positionFromBottom ?? null
59-
: state.delayDispense?.positionFromBottom ?? null
60-
)
6156

6257
const action =
6358
kind === 'aspirate'
@@ -103,14 +98,11 @@ export function Delay(props: DelayProps): JSX.Element {
10398
setCurrentStep(2)
10499
}
105100
} else if (currentStep === 2) {
106-
setCurrentStep(3)
107-
} else {
108-
if (delayDuration != null && position != null) {
101+
if (delayDuration != null) {
109102
dispatch({
110103
type: action,
111104
delaySettings: {
112105
delayDuration,
113-
positionFromBottom: position,
114106
},
115107
})
116108
trackEventWithRobotSerial({
@@ -125,37 +117,7 @@ export function Delay(props: DelayProps): JSX.Element {
125117
}
126118

127119
const setSaveOrContinueButtonText =
128-
delayIsEnabled && currentStep < 3 ? t('shared:continue') : t('shared:save')
129-
130-
let wellHeight = 1
131-
if (kind === 'aspirate') {
132-
wellHeight = Math.max(
133-
...state.sourceWells.map(well =>
134-
state.source != null ? state.source.wells[well].depth : 0
135-
)
136-
)
137-
} else if (kind === 'dispense') {
138-
const destLabwareDefinition =
139-
state.destination === 'source' ? state.source : state.destination
140-
wellHeight = Math.max(
141-
...state.destinationWells.map(well =>
142-
destLabwareDefinition != null
143-
? destLabwareDefinition.wells[well].depth
144-
: 0
145-
)
146-
)
147-
}
148-
149-
// the maxiumum allowed position for delay is 2x the height of the well
150-
const positionRange = { min: 1, max: Math.floor(wellHeight * 2) }
151-
const positionError =
152-
position != null &&
153-
(position < positionRange.min || position > positionRange.max)
154-
? t(`value_out_of_range`, {
155-
min: positionRange.min,
156-
max: positionRange.max,
157-
})
158-
: null
120+
delayIsEnabled && currentStep < 2 ? t('shared:continue') : t('shared:save')
159121

160122
// allow a maximum of 10 digits for delay duration
161123
const durationRange = { min: 1, max: 9999999999 }
@@ -170,8 +132,6 @@ export function Delay(props: DelayProps): JSX.Element {
170132
let buttonIsDisabled = false
171133
if (currentStep === 2) {
172134
buttonIsDisabled = delayDuration == null || durationError != null
173-
} else if (currentStep === 3) {
174-
buttonIsDisabled = positionError != null || position == null
175135
}
176136

177137
return createPortal(
@@ -249,47 +209,6 @@ export function Delay(props: DelayProps): JSX.Element {
249209
</Flex>
250210
</Flex>
251211
) : null}
252-
{currentStep === 3 ? (
253-
<Flex
254-
alignSelf={ALIGN_CENTER}
255-
gridGap={SPACING.spacing48}
256-
paddingX={SPACING.spacing40}
257-
padding={`${SPACING.spacing16} ${SPACING.spacing40} ${SPACING.spacing40}`}
258-
marginTop="7.75rem" // using margin rather than justify due to content moving with error message
259-
alignItems={ALIGN_CENTER}
260-
height="22rem"
261-
>
262-
<Flex
263-
width="30.5rem"
264-
height="100%"
265-
gridGap={SPACING.spacing24}
266-
flexDirection={DIRECTION_COLUMN}
267-
marginTop={SPACING.spacing68}
268-
>
269-
<InputField
270-
type="number"
271-
value={position}
272-
title={t('delay_position_mm')}
273-
error={positionError}
274-
readOnly
275-
/>
276-
</Flex>
277-
<Flex
278-
paddingX={SPACING.spacing24}
279-
height="21.25rem"
280-
marginTop="7.75rem"
281-
borderRadius="0"
282-
>
283-
<NumericalKeyboard
284-
keyboardRef={keyboardRef}
285-
initialValue={String(position ?? '')}
286-
onChange={e => {
287-
setPosition(Number(e))
288-
}}
289-
/>
290-
</Flex>
291-
</Flex>
292-
) : null}
293212
</Flex>,
294213
getTopPortalEl()
295214
)

app/src/organisms/ODD/QuickTransferFlow/QuickTransferAdvancedSettings/index.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,6 @@ export function QuickTransferAdvancedSettings(
186186
state.delayAspirate !== undefined
187187
? t('delay_value', {
188188
delay: state.delayAspirate.delayDuration,
189-
position: state.delayAspirate.positionFromBottom,
190189
})
191190
: '',
192191
enabled: true,
@@ -269,7 +268,6 @@ export function QuickTransferAdvancedSettings(
269268
state.delayDispense !== undefined
270269
? t('delay_value', {
271270
delay: state.delayDispense.delayDuration,
272-
position: state.delayDispense.positionFromBottom,
273271
})
274272
: '',
275273
enabled: true,

app/src/organisms/ODD/QuickTransferFlow/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,6 @@ export interface QuickTransferSummaryState {
112112
}
113113
delayAspirate?: {
114114
delayDuration: number
115-
positionFromBottom: number
116115
}
117116
touchTipAspirate?: number
118117
touchTipAspirateSpeed?: number
@@ -134,7 +133,6 @@ export interface QuickTransferSummaryState {
134133
}
135134
delayDispense?: {
136135
delayDuration: number
137-
positionFromBottom: number
138136
}
139137
touchTipDispense?: number
140138
touchTipDispenseSpeed?: number

app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/Delay.test.tsx

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -144,62 +144,6 @@ describe('Delay', () => {
144144
expect(nextBtn).toBeDisabled()
145145
})
146146

147-
it('has correct range for delay height for aspirate', () => {
148-
render(props)
149-
const enabledBtn = screen.getByText('Enabled')
150-
fireEvent.click(enabledBtn)
151-
const continueBtn = screen.getByText('Continue')
152-
fireEvent.click(continueBtn)
153-
const oneButton = screen.getByText('1')
154-
fireEvent.click(oneButton)
155-
const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button')
156-
fireEvent.click(nextBtn)
157-
const zeroButton = screen.getByText('0')
158-
fireEvent.click(zeroButton)
159-
expect(vi.mocked(InputField)).toHaveBeenCalledWith(
160-
{
161-
title: 'Delay position from bottom of well (mm)',
162-
error: 'Value must be between 1 to 100',
163-
readOnly: true,
164-
type: 'number',
165-
value: 0,
166-
},
167-
{}
168-
)
169-
const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button')
170-
expect(saveBtn).toBeDisabled()
171-
})
172-
173-
it('has correct range for delay height for dispense', () => {
174-
props = {
175-
...props,
176-
kind: 'dispense',
177-
}
178-
render(props)
179-
const enabledBtn = screen.getByText('Enabled')
180-
fireEvent.click(enabledBtn)
181-
const continueBtn = screen.getByText('Continue')
182-
fireEvent.click(continueBtn)
183-
const oneButton = screen.getByText('1')
184-
fireEvent.click(oneButton)
185-
const nextBtn = screen.getByTestId('ChildNavigation_Primary_Button')
186-
fireEvent.click(nextBtn)
187-
const zeroButton = screen.getByText('0')
188-
fireEvent.click(zeroButton)
189-
expect(vi.mocked(InputField)).toHaveBeenCalledWith(
190-
{
191-
title: 'Delay position from bottom of well (mm)',
192-
error: 'Value must be between 1 to 400',
193-
readOnly: true,
194-
type: 'number',
195-
value: 0,
196-
},
197-
{}
198-
)
199-
const saveBtn = screen.getByTestId('ChildNavigation_Primary_Button')
200-
expect(saveBtn).toBeDisabled()
201-
})
202-
203147
it('calls dispatch when an in range value is entered and saved', () => {
204148
render(props)
205149
const enabledBtn = screen.getByText('Enabled')
@@ -225,7 +169,6 @@ describe('Delay', () => {
225169
...props.state,
226170
delayAspirate: {
227171
delayDuration: 15,
228-
positionFromBottom: 55,
229172
},
230173
},
231174
}
@@ -242,17 +185,6 @@ describe('Delay', () => {
242185
},
243186
{}
244187
)
245-
fireEvent.click(continueBtn)
246-
expect(vi.mocked(InputField)).toHaveBeenCalledWith(
247-
{
248-
title: 'Delay position from bottom of well (mm)',
249-
error: null,
250-
readOnly: true,
251-
type: 'number',
252-
value: 55,
253-
},
254-
{}
255-
)
256188
})
257189

258190
it('persists previously set value saved in state for dispense', () => {
@@ -263,7 +195,6 @@ describe('Delay', () => {
263195
...props.state,
264196
delayDispense: {
265197
delayDuration: 20,
266-
positionFromBottom: 84,
267198
},
268199
},
269200
}
@@ -280,16 +211,5 @@ describe('Delay', () => {
280211
},
281212
{}
282213
)
283-
fireEvent.click(continueBtn)
284-
expect(vi.mocked(InputField)).toHaveBeenCalledWith(
285-
{
286-
title: 'Delay position from bottom of well (mm)',
287-
error: null,
288-
readOnly: true,
289-
type: 'number',
290-
value: 84,
291-
},
292-
{}
293-
)
294214
})
295215
})

app/src/organisms/ODD/QuickTransferFlow/__tests__/QuickTransferAdvancedSettings/QuickTransferAdvancedSettings.test.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -261,13 +261,12 @@ describe('QuickTransferAdvancedSettings', () => {
261261
...props.state,
262262
delayAspirate: {
263263
delayDuration: 5,
264-
positionFromBottom: 17,
265264
},
266265
},
267266
}
268267
render(props)
269268
const delayAspirate = screen.getAllByText('Delay')[0]
270-
screen.getByText('5s, 17 mm from bottom')
269+
screen.getByText('5s')
271270
fireEvent.click(delayAspirate)
272271
expect(vi.mocked(Delay)).toHaveBeenCalled()
273272
})
@@ -371,13 +370,12 @@ describe('QuickTransferAdvancedSettings', () => {
371370
...props.state,
372371
delayDispense: {
373372
delayDuration: 10,
374-
positionFromBottom: 4,
375373
},
376374
},
377375
}
378376
render(props)
379377
const delayDispense = screen.getAllByText('Delay')[1]
380-
screen.getByText('10s, 4 mm from bottom')
378+
screen.getByText('10s')
381379
fireEvent.click(delayDispense)
382380
expect(vi.mocked(Delay)).toHaveBeenCalled()
383381
})

app/src/organisms/ODD/QuickTransferFlow/types.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ export interface QuickTransferSummaryState {
7979
}
8080
delayAspirate?: {
8181
delayDuration: number
82-
positionFromBottom: number
8382
}
8483
touchTipAspirate?: number
8584
touchTipAspirateSpeed?: number
@@ -99,7 +98,6 @@ export interface QuickTransferSummaryState {
9998
}
10099
delayDispense?: {
101100
delayDuration: number
102-
positionFromBottom: number
103101
}
104102
touchTipDispense?: number
105103
touchTipDispenseSpeed?: number
@@ -191,7 +189,6 @@ interface SetDelayAspirate {
191189
type: typeof ACTIONS.SET_DELAY_ASPIRATE
192190
delaySettings?: {
193191
delayDuration: number
194-
positionFromBottom: number
195192
}
196193
}
197194
interface SetTouchTipAspirate {
@@ -229,7 +226,6 @@ interface SetDelayDispense {
229226
type: typeof ACTIONS.SET_DELAY_DISPENSE
230227
delaySettings?: {
231228
delayDuration: number
232-
positionFromBottom: number
233229
}
234230
}
235231
interface SetTouchTipDispense {

0 commit comments

Comments
 (0)