1
1
import * as React from 'react' ;
2
2
3
- import { useArgs } from '@storybook/preview-api' ;
4
3
import { Meta , StoryObj } from '@storybook/react' ;
5
- import { Checkbox , Field , Flex } from '@strapi/design-system' ;
4
+ import { fn } from '@storybook/test' ;
5
+ import { Button , Checkbox , Flex } from '@strapi/design-system' ;
6
6
import { default as outdent } from 'outdent' ;
7
7
8
8
const meta : Meta < typeof Checkbox > = {
@@ -15,37 +15,22 @@ const meta: Meta<typeof Checkbox> = {
15
15
</ Flex >
16
16
) ,
17
17
] ,
18
+ args : {
19
+ children : 'Remember me' ,
20
+ onCheckedChange : fn ( ) ,
21
+ } ,
18
22
parameters : {
19
23
chromatic : { disableSnapshot : false } ,
20
24
} ,
25
+ render : ( args ) => {
26
+ return < Checkbox { ...args } /> ;
27
+ } ,
21
28
} ;
22
29
export default meta ;
23
30
24
31
type Story = StoryObj < typeof Checkbox > ;
25
32
26
- const Template : Story = {
27
- render : ( { children, checked, ...props } ) => {
28
- const [ , updateArgs ] = useArgs ( ) ;
29
-
30
- const handleChange = ( ) => {
31
- updateArgs ( { checked : ! checked } ) ;
32
- } ;
33
-
34
- return (
35
- < Checkbox { ...props } value = { checked } onChange = { handleChange } >
36
- { children }
37
- </ Checkbox >
38
- ) ;
39
- } ,
40
- } ;
41
-
42
33
export const Base = {
43
- ...Template ,
44
- args : {
45
- children : 'Label' ,
46
- checked : false ,
47
- } ,
48
-
49
34
parameters : {
50
35
docs : {
51
36
source : {
@@ -59,186 +44,67 @@ export const Base = {
59
44
name : 'base' ,
60
45
} ;
61
46
62
- export const CheckboxGroup = {
63
- render : ( ) => {
64
- const [ fruitsChecked , setFruitsChecked ] = React . useState ( [ true , false ] ) ;
65
- const [ veggiesChecked , setVeggiesChecked ] = React . useState ( [ true , true ] ) ;
66
- const [ sweetsChecked , setSweetsChecked ] = React . useState ( [ false , false ] ) ;
67
- const allFruitsChecked = fruitsChecked . every ( Boolean ) ;
68
- const allVeggiesChecked = veggiesChecked . every ( Boolean ) ;
69
- const allSweetsChecked = sweetsChecked . every ( Boolean ) ;
70
- const isFruitsIndeterminate = fruitsChecked . some ( Boolean ) && ! allFruitsChecked ;
71
- const isVeggiesIndeterminate = veggiesChecked . some ( Boolean ) && ! allVeggiesChecked ;
72
- const isSweetsIndeterminate = sweetsChecked . some ( Boolean ) && ! allSweetsChecked ;
73
-
74
- return (
75
- < ul >
76
- < li >
77
- < Checkbox
78
- id = "fruits"
79
- name = "fruits"
80
- indeterminate = { isFruitsIndeterminate }
81
- onValueChange = { ( value ) => setFruitsChecked ( [ value , value ] ) }
82
- value = { allFruitsChecked }
83
- >
84
- Fruits
85
- </ Checkbox >
86
- </ li >
87
- < li >
88
- < ul style = { { paddingLeft : '24px' } } >
89
- < li >
90
- < Checkbox
91
- id = "apple"
92
- name = "apple"
93
- onValueChange = { ( value ) => setFruitsChecked ( [ value , fruitsChecked [ 1 ] ] ) }
94
- value = { fruitsChecked [ 0 ] }
95
- >
96
- Apple
97
- </ Checkbox >
98
- </ li >
99
- < li >
100
- < Checkbox
101
- id = "banana"
102
- name = "banana"
103
- onValueChange = { ( value ) => setFruitsChecked ( [ fruitsChecked [ 0 ] , value ] ) }
104
- value = { fruitsChecked [ 1 ] }
105
- >
106
- Banana
107
- </ Checkbox >
108
- </ li >
109
- </ ul >
110
- </ li >
111
- < li >
112
- < Checkbox
113
- id = "vegetables"
114
- name = "vegetables"
115
- indeterminate = { isVeggiesIndeterminate }
116
- onValueChange = { ( value ) => setVeggiesChecked ( [ value , value ] ) }
117
- value = { allVeggiesChecked }
118
- >
119
- Vegetables
120
- </ Checkbox >
121
- </ li >
122
- < li >
123
- < ul style = { { paddingLeft : '24px' } } >
124
- < li >
125
- < Checkbox
126
- id = "beans"
127
- name = "beans"
128
- onValueChange = { ( value ) => setVeggiesChecked ( [ value , veggiesChecked [ 1 ] ] ) }
129
- value = { veggiesChecked [ 0 ] }
130
- >
131
- Beans
132
- </ Checkbox >
133
- </ li >
134
- < li >
135
- < Checkbox
136
- id = "pumpkin"
137
- name = "pumpkin"
138
- onValueChange = { ( value ) => setVeggiesChecked ( [ veggiesChecked [ 0 ] , value ] ) }
139
- value = { veggiesChecked [ 1 ] }
140
- >
141
- Pumpkin
142
- </ Checkbox >
143
- </ li >
144
- </ ul >
145
- </ li >
146
- < li >
147
- < Checkbox
148
- id = "sweets"
149
- name = "sweets"
150
- indeterminate = { isSweetsIndeterminate }
151
- onValueChange = { ( value ) => setSweetsChecked ( [ value , value ] ) }
152
- value = { allSweetsChecked }
153
- >
154
- Sweets
155
- </ Checkbox >
156
- </ li >
157
- < li >
158
- < ul style = { { paddingLeft : '24px' } } >
159
- < li >
160
- < Checkbox
161
- id = "chocolate"
162
- name = "chocolate"
163
- onValueChange = { ( value ) => setSweetsChecked ( [ value , sweetsChecked [ 1 ] ] ) }
164
- value = { sweetsChecked [ 0 ] }
165
- >
166
- Chocolate
167
- </ Checkbox >
168
- </ li >
169
- < li >
170
- < Checkbox
171
- id = "candy"
172
- name = "candy"
173
- onValueChange = { ( value ) => setSweetsChecked ( [ sweetsChecked [ 0 ] , value ] ) }
174
- value = { sweetsChecked [ 1 ] }
175
- >
176
- Candy
177
- </ Checkbox >
178
- </ li >
179
- </ ul >
180
- </ li >
181
- </ ul >
182
- ) ;
47
+ export const Indeterminate = {
48
+ argTypes : {
49
+ checked : {
50
+ control : 'select' ,
51
+ options : [ true , false , 'indeterminate' ] ,
52
+ } ,
183
53
} ,
184
-
185
- name : 'checkbox group' ,
54
+ args : {
55
+ checked : 'indeterminate' ,
56
+ } ,
57
+ name : 'indeterminate' ,
186
58
} satisfies Story ;
187
59
188
60
export const Disabled = {
189
- ...Template ,
190
61
args : {
191
- ...Base . args ,
192
62
disabled : true ,
193
63
} ,
194
64
name : 'disabled' ,
195
-
196
65
parameters : {
197
66
docs : {
198
67
source : {
199
- code : '<Checkbox disabled>Label </Checkbox>' ,
68
+ code : '<Checkbox disabled>Remember me </Checkbox>' ,
200
69
} ,
201
70
} ,
202
71
} ,
203
72
} satisfies Story ;
204
73
205
- export const WithField = {
206
- render : ( { checked, error, hint, children } ) => {
207
- const [ , updateArgs ] = useArgs ( ) ;
208
-
209
- const handleChange = ( ) => {
210
- updateArgs ( { checked : ! checked } ) ;
211
- } ;
212
-
213
- return (
214
- < Field . Root id = "with_field" error = { error } hint = { hint } >
215
- < Checkbox value = { checked } onChange = { handleChange } >
216
- { children }
217
- </ Checkbox >
218
- < Field . Error />
219
- < Field . Hint />
220
- </ Field . Root >
221
- ) ;
74
+ export const WithoutLabel = {
75
+ args : {
76
+ children : null ,
77
+ [ 'aria-label' ] : 'Select row 1' ,
222
78
} ,
79
+ name : 'without label' ,
80
+ } satisfies Story ;
81
+
82
+ export const WithNameAndValue = {
223
83
args : {
224
- ... Base . args ,
225
- error : 'Error ' ,
226
- hint : 'Description line lorem ipsum' ,
84
+ name : 'rememberMe' ,
85
+ value : 'yes ' ,
86
+ onSubmit : fn ( ) ,
227
87
} ,
228
- parameters : {
229
- docs : {
230
- source : {
231
- code : outdent `
232
- <Field.Root id="with_field" error={error} hint={hint}>
233
- <Checkbox value={checked} onChange={handleChange}>
234
- {children}
235
- </Checkbox>
236
- <Field.Error />
237
- <Field.Hint />
238
- </Field.Root>
239
- ` ,
240
- } ,
241
- } ,
88
+ render : ( { onSubmit, ...args } ) => {
89
+ return (
90
+ < Flex
91
+ tag = "form"
92
+ direction = "column"
93
+ gap = { 4 }
94
+ alignItems = "flex-start"
95
+ onSubmit = { ( e ) => {
96
+ e . preventDefault ( ) ;
97
+ if ( onSubmit ) {
98
+ const data = new FormData ( e . target as HTMLFormElement ) ;
99
+ // @ts -expect-error – We're demonstrating `value` and `name` here.
100
+ onSubmit ( data . get ( 'rememberMe' ) ) ;
101
+ }
102
+ } }
103
+ >
104
+ < Checkbox { ...args } />
105
+ < Button type = "submit" > Submit</ Button >
106
+ </ Flex >
107
+ ) ;
242
108
} ,
243
- name : 'with field ' ,
244
- } ;
109
+ name : 'with name and value ' ,
110
+ } satisfies Story ;
0 commit comments