1
1
import { defineComponent , shallowRef , watchEffect } from 'vue'
2
- import Toggle from '../../toggle/Toggle.vue'
3
2
import { ITEM_DATA_ATTR , createCollection } from '../index.ts'
4
3
5
4
interface ItemData { disabled : boolean }
@@ -20,6 +19,9 @@ const List = defineComponent({
20
19
} )
21
20
22
21
const Item = defineComponent ( {
22
+ // props: {
23
+ // disabled: { type: Boolean, default: false },
24
+ // },
23
25
setup ( _ , { slots, attrs } ) {
24
26
const currentElement = shallowRef < HTMLElement > ( )
25
27
Collection . useCollectionItem ( currentElement , attrs )
@@ -33,11 +35,14 @@ const Item = defineComponent({
33
35
} )
34
36
35
37
const LogItems = defineComponent ( {
36
- setup ( ) {
38
+ props : {
39
+ name : { type : String , default : 'items' } ,
40
+ } ,
41
+ setup ( props ) {
37
42
const getItems = useCollection ( )
38
43
39
44
watchEffect ( ( ) => {
40
- console . warn ( 'Items:' , getItems ( ) )
45
+ console . warn ( ` ${ props . name } ` , getItems ( ) )
41
46
} )
42
47
43
48
return ( ) => null
@@ -46,8 +51,6 @@ const LogItems = defineComponent({
46
51
47
52
export default { title : 'Utilities/Collection' }
48
53
49
- export const Styled = ( ) => < Toggle class = "root" > Toggle</ Toggle >
50
-
51
54
export function Basic ( ) {
52
55
return (
53
56
< List >
@@ -60,3 +63,139 @@ export function Basic() {
60
63
</ List >
61
64
)
62
65
}
66
+
67
+ export function WithElementInBetween ( ) {
68
+ return (
69
+ < List >
70
+ < div style = { { fontVariant : 'small-caps' } } > Colors</ div >
71
+ < Item > Red</ Item >
72
+ < Item { ...{ disabled : true } } > Green</ Item >
73
+ < Item > Blue</ Item >
74
+ < div style = { { fontVariant : 'small-caps' } } > Words</ div >
75
+ < Item > Hello</ Item >
76
+ < Item > World</ Item >
77
+ < LogItems />
78
+ </ List >
79
+ )
80
+ }
81
+
82
+ const Tomato = ( ) => < Item style = { { color : 'tomato' } } > Tomato</ Item >
83
+
84
+ export function WithWrappedItem ( ) {
85
+ return (
86
+ < List >
87
+ < Item > Red</ Item >
88
+ < Item { ...{ disabled : true } } > Green</ Item >
89
+ < Item > Blue</ Item >
90
+ < Tomato />
91
+ < LogItems />
92
+ </ List >
93
+ )
94
+ }
95
+
96
+ export function WithFragment ( ) {
97
+ const countries = (
98
+ < >
99
+ < Item > France</ Item >
100
+ < Item { ...{ disabled : true } } > UK</ Item >
101
+ < Item > Spain</ Item >
102
+ </ >
103
+ )
104
+ return (
105
+ < List >
106
+ { countries }
107
+ < LogItems />
108
+ </ List >
109
+ )
110
+ }
111
+
112
+ const DynamicInsertionDemo = defineComponent ( {
113
+ setup ( ) {
114
+ const hasTomato = shallowRef ( false )
115
+
116
+ function setHasTomato ( value : boolean ) {
117
+ hasTomato . value = value
118
+ }
119
+
120
+ function log ( ) {
121
+ console . warn ( 'Items:' , Array . from ( document . querySelectorAll ( `[${ ITEM_DATA_ATTR } ]` ) ) )
122
+ }
123
+
124
+ return ( ) => (
125
+ < >
126
+ < button onClick = { ( ) => setHasTomato ( ! hasTomato . value ) } >
127
+ { hasTomato ? 'Remove' : 'Add' }
128
+ { ' ' }
129
+ Tomato
130
+ </ button >
131
+ < button onClick = { ( ) => log ( ) } style = { { marginLeft : 10 } } >
132
+ Force Update
133
+ </ button >
134
+
135
+ < List >
136
+ < Item > Red</ Item >
137
+ { hasTomato . value && < Tomato /> }
138
+ < Item { ...{ disabled : true } } >
139
+ Green
140
+ </ Item >
141
+ < Item > Blue</ Item >
142
+ < LogItems />
143
+ </ List >
144
+ </ >
145
+ )
146
+ } ,
147
+ } )
148
+
149
+ export function DynamicInsertion ( ) {
150
+ return < DynamicInsertionDemo />
151
+ }
152
+
153
+ const WithChangingItemDemo = defineComponent ( {
154
+ setup ( ) {
155
+ const isDisabled = shallowRef ( false )
156
+
157
+ function setIsDisabled ( value : boolean ) {
158
+ isDisabled . value = value
159
+ }
160
+
161
+ return ( ) => (
162
+ < >
163
+ < button onClick = { ( ) => setIsDisabled ( ! isDisabled . value ) } >
164
+ { isDisabled ? 'Enable' : 'Disable' }
165
+ { ' ' }
166
+ Green
167
+ </ button >
168
+
169
+ < List >
170
+ < Item > Red</ Item >
171
+ < Item { ...{ disabled : isDisabled . value } } > Green</ Item >
172
+ < Item > Blue</ Item >
173
+ < LogItems />
174
+ </ List >
175
+ </ >
176
+ )
177
+ } ,
178
+ } )
179
+
180
+ export function WithChangingItem ( ) {
181
+ return < WithChangingItemDemo />
182
+ }
183
+
184
+ export function Nested ( ) {
185
+ return (
186
+ < List >
187
+ < Item > 1</ Item >
188
+ < Item >
189
+ 2
190
+ < List >
191
+ < Item > 2.1</ Item >
192
+ < Item > 2.2</ Item >
193
+ < Item > 2.3</ Item >
194
+ < LogItems name = "items inside 2" />
195
+ </ List >
196
+ </ Item >
197
+ < Item > 3</ Item >
198
+ < LogItems name = "top-level items" />
199
+ </ List >
200
+ )
201
+ }
0 commit comments