File tree Expand file tree Collapse file tree 7 files changed +93
-10
lines changed Expand file tree Collapse file tree 7 files changed +93
-10
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ ' svelte-ux ' : patch
3
+ ---
4
+
5
+ [ MultiSelect(Field|Menu)] Improve actions with mode="immediate"
Original file line number Diff line number Diff line change 268
268
class ={cls (
269
269
' actions' ,
270
270
' flex items-center justify-end' ,
271
- mode === ' actions ' && ' border-t border-surface-content/10 pt-2' ,
271
+ ' [&:not(:has(>:first-child))]:hidden border-t border-surface-content/10 pt-2' ,
272
272
settingsClasses .actions ,
273
273
classes .actions
274
274
)}
Original file line number Diff line number Diff line change 22
22
// MultiSelectMenu props
23
23
export let options: MultiSelectMenuProps [' options' ];
24
24
export let value: MultiSelectMenuProps [' value' ];
25
+ export let mode: MultiSelectMenuProps [' mode' ] | undefined = undefined ;
26
+ export let maintainOrder: MultiSelectMenuProps [' maintainOrder' ] | undefined = undefined ;
25
27
export let indeterminateSelected: typeof value = [];
26
28
/** Maximum number of options that can be selected */
27
29
export let max: number | undefined = undefined ;
203
205
<MultiSelectMenu
204
206
{options }
205
207
{value }
208
+ {mode }
209
+ {maintainOrder }
206
210
{indeterminateSelected }
207
211
{max }
208
212
{placement }
237
241
</slot >
238
242
</svelte:fragment >
239
243
240
- <slot name ="actions" slot ="actions" let:selection {selection }>
241
- <div ></div >
242
- </slot >
244
+ <slot name ="actions" slot ="actions" let:selection {selection } />
243
245
</MultiSelectMenu >
244
246
</div >
Original file line number Diff line number Diff line change 13
13
14
14
export let options: MultiSelectProps [' options' ];
15
15
export let value: MultiSelectProps [' value' ];
16
+ export let mode: MultiSelectProps [' mode' ] | undefined = undefined ;
17
+ export let maintainOrder: MultiSelectProps [' maintainOrder' ] | undefined = undefined ;
16
18
export let indeterminateSelected: typeof value = [];
17
19
export let open = false ;
18
20
export let duration = 200 ;
53
55
<MultiSelect
54
56
{options }
55
57
{value }
58
+ {mode }
59
+ {maintainOrder }
56
60
{indeterminateSelected }
57
61
{max }
58
62
{open }
69
73
... settingsClasses .multiSelect ,
70
74
... classes .multiSelect ,
71
75
}}
72
- on:cancel ={() => close ()}
76
+ on:cancel ={() => mode !== ' immediate ' && close ()}
73
77
on:cancel
74
- on:change ={() => close ()}
78
+ on:change ={() => mode !== ' immediate ' && close ()}
75
79
on:change
76
80
>
77
81
<slot name ="beforeOptions" slot ="beforeOptions" let:selection {selection } />
95
99
</slot >
96
100
</svelte:fragment >
97
101
98
- <slot name ="actions" slot ="actions" let:selection {selection }>
99
- <div ></div >
100
- </slot >
102
+ <slot name ="actions" slot ="actions" let:selection {selection } />
101
103
</MultiSelect >
102
104
</Menu >
Original file line number Diff line number Diff line change 42
42
<MultiSelect {options } {value } maintainOrder on:change ={(e ) => (value = e .detail .value )} />
43
43
</Preview >
44
44
45
- <h2 >Immediate apply changes (no actions)</h2 >
45
+ <h2 >Immediately apply changes (no actions)</h2 >
46
46
47
47
<Preview >
48
48
{value .length } selected
Original file line number Diff line number Diff line change 79
79
/>
80
80
</Preview >
81
81
82
+ <h2 >Immediately apply changes (no actions)</h2 >
83
+
84
+ <Preview >
85
+ <MultiSelectField
86
+ {options }
87
+ {value }
88
+ on:change ={(e ) => (value = e .detail .value )}
89
+ mode =" immediate"
90
+ maintainOrder
91
+ />
92
+ </Preview >
93
+
94
+ <h2 >Immediately apply changes (with custom action)</h2 >
95
+
96
+ <Preview >
97
+ <MultiSelectField
98
+ {options }
99
+ {value }
100
+ on:change ={(e ) => (value = e .detail .value )}
101
+ mode =" immediate"
102
+ maintainOrder
103
+ >
104
+ <div slot =" actions" >
105
+ <Button color ="primary" icon ={mdiPlus }>Add item</Button >
106
+ </div >
107
+ </MultiSelectField >
108
+ </Preview >
109
+
82
110
<h2 >formatSelected</h2 >
83
111
84
112
<Preview >
Original file line number Diff line number Diff line change 129
129
</span >
130
130
</Preview >
131
131
132
+ <h2 >Immediately apply changes (no actions)</h2 >
133
+ <Preview >
134
+ <span >
135
+ <ToggleButton let:on ={open } let:toggleOff transition ={false }>
136
+ {value .length } selected
137
+ <MultiSelectMenu
138
+ {options }
139
+ {value }
140
+ mode =" immediate"
141
+ maintainOrder
142
+ on:change ={(e ) => {
143
+ // @ts-expect-error
144
+ value = e .detail .value ;
145
+ }}
146
+ {open }
147
+ on:close ={toggleOff }
148
+ />
149
+ </ToggleButton >
150
+ </span >
151
+ </Preview >
152
+
153
+ <h2 >Immediately apply changes (with custom action)</h2 >
154
+ <Preview >
155
+ <span >
156
+ <ToggleButton let:on ={open } let:toggleOff transition ={false }>
157
+ {value .length } selected
158
+ <MultiSelectMenu
159
+ {options }
160
+ {value }
161
+ mode =" immediate"
162
+ maintainOrder
163
+ on:change ={(e ) => {
164
+ // @ts-expect-error
165
+ value = e .detail .value ;
166
+ }}
167
+ {open }
168
+ on:close ={toggleOff }
169
+ >
170
+ <div slot =" actions" >
171
+ <Button color ="primary" icon ={mdiPlus }>Add item</Button >
172
+ </div >
173
+ </MultiSelectMenu >
174
+ </ToggleButton >
175
+ </span >
176
+ </Preview >
177
+
132
178
<h2 >actions slot</h2 >
133
179
134
180
<Preview >
You can’t perform that action at this time.
0 commit comments