@@ -313,6 +313,174 @@ describe('Select test', () => {
313313 ] ) ;
314314 expect ( inputValue ) . toEqual ( [ 'd' , 'c' ] ) ;
315315 } ) ;
316+
317+ it ( 'selects all values' , async ( ) => {
318+ field = { ...field , isMulti : true , options : [ { label : 'Select all' , selectAll : true } , ...field . options ] } ;
319+
320+ await act ( async ( ) => {
321+ wrapper = mount (
322+ < FormRenderer
323+ { ...rendererProps }
324+ schema = { {
325+ fields : [
326+ {
327+ ...field ,
328+ component : componentTypes . SELECT ,
329+ name : 'select'
330+ }
331+ ]
332+ } }
333+ />
334+ ) ;
335+ } ) ;
336+ wrapper . update ( ) ;
337+
338+ await act ( async ( ) => {
339+ wrapper
340+ . find ( '#onChange' )
341+ . props ( )
342+ . onClick ( [ { label : 'Select all' , selectAll : true } ] ) ;
343+ } ) ;
344+ wrapper . update ( ) ;
345+
346+ expect ( state . value ) . toEqual ( [
347+ { label : 'Select all' , selectAll : true } ,
348+ { label : 'Dogs' , value : 'd' } ,
349+ { label : 'Cats' , value : 'c' } ,
350+ { label : 'Hamsters' , value : 'h' }
351+ ] ) ;
352+ expect ( inputValue ) . toEqual ( [ 'd' , 'c' , 'h' ] ) ;
353+
354+ // remove hamsters
355+ await act ( async ( ) => {
356+ wrapper
357+ . find ( '#onChange' )
358+ . props ( )
359+ . onClick ( [
360+ { label : 'Select all' , selectAll : true } ,
361+ { label : 'Dogs' , value : 'd' } ,
362+ { label : 'Cats' , value : 'c' }
363+ ] ) ;
364+ } ) ;
365+ wrapper . update ( ) ;
366+
367+ expect ( state . value ) . toEqual ( [
368+ { label : 'Dogs' , value : 'd' } ,
369+ { label : 'Cats' , value : 'c' }
370+ ] ) ;
371+ expect ( inputValue ) . toEqual ( [ 'd' , 'c' ] ) ;
372+ } ) ;
373+
374+ it ( 'selects none' , async ( ) => {
375+ field = { ...field , isMulti : true , options : [ { label : 'Select none' , selectNone : true } , ...field . options ] , initialValue : [ 'd' , 'c' , 'h' ] } ;
376+
377+ await act ( async ( ) => {
378+ wrapper = mount (
379+ < FormRenderer
380+ { ...rendererProps }
381+ schema = { {
382+ fields : [
383+ {
384+ ...field ,
385+ component : componentTypes . SELECT ,
386+ name : 'select'
387+ }
388+ ]
389+ } }
390+ />
391+ ) ;
392+ } ) ;
393+ wrapper . update ( ) ;
394+
395+ await act ( async ( ) => {
396+ wrapper
397+ . find ( '#onChange' )
398+ . props ( )
399+ . onClick ( [ { label : 'Select none' , selectNone : true } ] ) ;
400+ } ) ;
401+ wrapper . update ( ) ;
402+
403+ expect ( state . value ) . toEqual ( [ { label : 'Select none' , selectNone : true } ] ) ;
404+ expect ( inputValue ) . toEqual ( '' ) ;
405+
406+ // adds one
407+ await act ( async ( ) => {
408+ wrapper
409+ . find ( '#onChange' )
410+ . props ( )
411+ . onClick ( [
412+ { label : 'Select none' , selectNone : true } ,
413+ { label : 'Dogs' , value : 'd' }
414+ ] ) ;
415+ } ) ;
416+ wrapper . update ( ) ;
417+
418+ expect ( state . value ) . toEqual ( [ { label : 'Dogs' , value : 'd' } ] ) ;
419+ expect ( inputValue ) . toEqual ( [ 'd' ] ) ;
420+ } ) ;
421+
422+ it ( 'with select all and select none at that same time' , async ( ) => {
423+ field = {
424+ ...field ,
425+ isMulti : true ,
426+ options : [
427+ { label : 'Select all' , selectAll : true , value : 'select-all' } ,
428+ { label : 'Select none' , selectNone : true , value : 'select-none' } ,
429+ ...field . options
430+ ]
431+ } ;
432+
433+ await act ( async ( ) => {
434+ wrapper = mount (
435+ < FormRenderer
436+ { ...rendererProps }
437+ schema = { {
438+ fields : [
439+ {
440+ ...field ,
441+ component : componentTypes . SELECT ,
442+ name : 'select'
443+ }
444+ ]
445+ } }
446+ />
447+ ) ;
448+ } ) ;
449+ wrapper . update ( ) ;
450+
451+ await act ( async ( ) => {
452+ wrapper
453+ . find ( '#onChange' )
454+ . props ( )
455+ . onClick ( [ { label : 'Select all' , selectAll : true , value : 'select-all' } ] ) ;
456+ } ) ;
457+ wrapper . update ( ) ;
458+
459+ expect ( state . value ) . toEqual ( [
460+ { label : 'Select all' , selectAll : true , value : 'select-all' } ,
461+ { label : 'Dogs' , value : 'd' } ,
462+ { label : 'Cats' , value : 'c' } ,
463+ { label : 'Hamsters' , value : 'h' }
464+ ] ) ;
465+ expect ( inputValue ) . toEqual ( [ 'd' , 'c' , 'h' ] ) ;
466+
467+ await act ( async ( ) => {
468+ wrapper
469+ . find ( '#onChange' )
470+ . props ( )
471+ . onClick ( [
472+ { label : 'Select all' , selectAll : true } ,
473+ { label : 'Dogs' , value : 'd' } ,
474+ { label : 'Cats' , value : 'c' } ,
475+ { label : 'Hamsters' , value : 'h' } ,
476+ { label : 'Select none' , selectNone : true , value : 'select-none' }
477+ ] ) ;
478+ } ) ;
479+ wrapper . update ( ) ;
480+
481+ expect ( state . value ) . toEqual ( [ { label : 'Select none' , selectNone : true , value : 'select-none' } ] ) ;
482+ expect ( inputValue ) . toEqual ( [ ] ) ;
483+ } ) ;
316484 } ) ;
317485
318486 describe ( 'loadOptions' , ( ) => {
0 commit comments