@@ -4,19 +4,40 @@ import { getAllDefinitions, getAllPipetteNames } from '@opentrons/shared-data'
44
55import { RobotWorkSpace } from '../Deck'
66import { LabwareRender } from '../Labware'
7- import { PipetteRender } from './'
7+ import { PipetteRender as PipetteRenderComponent } from './'
88
9- import type { Meta , Story } from '@storybook/react'
9+ import type { Meta , StoryObj } from '@storybook/react'
1010import type { LabwareDefinition , PipetteName } from '@opentrons/shared-data'
1111
1212const DECK_MAP_VIEWBOX = '0 -140 230 230'
1313
14- const opentrons300UlTiprack = getAllDefinitions ( ) . opentrons96Tiprack300UlV1
15- const opentrons10UlTiprack = getAllDefinitions ( ) . opentrons96Tiprack10UlV1
16- const nest12Reservoir15ml = getAllDefinitions ( ) . nest12Reservoir15MlV1
17- const axygenReservoir90ml = getAllDefinitions ( ) . axygen1Reservoir90MlV1
14+ const allDefinitions = getAllDefinitions ( )
15+
16+ // Find labware definitions by loadName
17+ const findLabwareByLoadName = (
18+ loadName : string
19+ ) : LabwareDefinition | undefined => {
20+ const definitions = Object . values ( allDefinitions ) as LabwareDefinition [ ]
21+ return definitions . find ( def => def . parameters . loadName === loadName )
22+ }
23+
24+ const allDefsArray = Object . values ( allDefinitions ) as LabwareDefinition [ ]
25+ const defaultDef = allDefsArray [ 0 ]
26+
27+ if ( defaultDef == null ) {
28+ throw new Error ( 'No labware definitions found' )
29+ }
30+
31+ const opentrons300UlTiprack =
32+ findLabwareByLoadName ( 'opentrons_96_tiprack_300ul' ) ?? defaultDef
33+ const opentrons10UlTiprack =
34+ findLabwareByLoadName ( 'opentrons_96_tiprack_10ul' ) ?? defaultDef
35+ const nest12Reservoir15ml =
36+ findLabwareByLoadName ( 'nest_12_reservoir_15ml' ) ?? defaultDef
37+ const axygenReservoir90ml =
38+ findLabwareByLoadName ( 'axygen_1_reservoir_90ml' ) ?? defaultDef
1839const opentrons6TuberackNest50mlConical =
19- getAllDefinitions ( ) . opentrons6TuberackNest50MlConicalV1
40+ findLabwareByLoadName ( 'opentrons_6_tuberack_nest_50ml_conical' ) ?? defaultDef
2041
2142const labwareDefMap : Record < string , LabwareDefinition > = {
2243 [ opentrons300UlTiprack . metadata . displayName ] : opentrons300UlTiprack ,
@@ -27,47 +48,57 @@ const labwareDefMap: Record<string, LabwareDefinition> = {
2748 opentrons6TuberackNest50mlConical ,
2849}
2950const pipetteNames = Object . keys ( getAllPipetteNames ( ) ) as PipetteName [ ]
51+ const labwareDisplayNames = Object . keys ( labwareDefMap )
3052
31- export default {
32- title : 'Library/Molecules/Simulation/Pipette/PipetteRender' ,
33- } as Meta
34-
35- const Template : Story < {
53+ interface StoryArgs {
3654 labwareName : string
3755 pipetteName : PipetteName
38- } > = args => {
39- const labwareDef = labwareDefMap [ args . labwareName ]
40- return (
41- < RobotWorkSpace viewBox = { DECK_MAP_VIEWBOX } >
42- { ( ) => (
43- < Fragment >
44- < LabwareRender definition = { labwareDef } />
45- < PipetteRender
46- labwareDef = { labwareDef }
47- pipetteName = { args . pipetteName }
48- />
49- </ Fragment >
50- ) }
51- </ RobotWorkSpace >
52- )
5356}
54- export const Pipette = Template . bind ( { } )
5557
56- Pipette . argTypes = {
57- labwareName : {
58- control : {
59- type : 'select' ,
60- options : Object . keys ( labwareDefMap ) . map (
61- d => labwareDefMap [ d ] . metadata . displayName
62- ) ,
58+ const meta : Meta < StoryArgs > = {
59+ title : 'Library/Molecules/Simulation/Pipette/PipetteRender' ,
60+ argTypes : {
61+ labwareName : {
62+ control : {
63+ type : 'select' ,
64+ } ,
65+ options : labwareDisplayNames ,
6366 } ,
64- defaultValue : opentrons300UlTiprack . metadata . displayName ,
65- } ,
66- pipetteName : {
67- control : {
68- type : 'select' ,
67+ pipetteName : {
68+ control : {
69+ type : 'select' ,
70+ } ,
6971 options : pipetteNames ,
7072 } ,
71- defaultValue : pipetteNames [ 0 ] ,
73+ } ,
74+ decorators : [
75+ Story => (
76+ < RobotWorkSpace viewBox = { DECK_MAP_VIEWBOX } >
77+ { ( ) => < Story /> }
78+ </ RobotWorkSpace >
79+ ) ,
80+ ] ,
81+ }
82+
83+ export default meta
84+
85+ type Story = StoryObj < StoryArgs >
86+
87+ export const PipetteRender : Story = {
88+ args : {
89+ labwareName : opentrons300UlTiprack . metadata . displayName ,
90+ pipetteName : pipetteNames [ 0 ] ,
91+ } ,
92+ render : args => {
93+ const labwareDef = labwareDefMap [ args . labwareName ] ?? opentrons300UlTiprack
94+ return (
95+ < Fragment >
96+ < LabwareRender definition = { labwareDef } positioningMode = "passThrough" />
97+ < PipetteRenderComponent
98+ labwareDef = { labwareDef }
99+ pipetteName = { args . pipetteName }
100+ />
101+ </ Fragment >
102+ )
72103 } ,
73104}
0 commit comments