@@ -47,10 +47,11 @@ function MultiDragPlugin() {
4747 }
4848
4949 if ( sortable . options . group ) {
50- if ( multiDragGroupMembers [ sortable . options . group . name ] === undefined ) {
51- multiDragGroupMembers [ sortable . options . group . name ] = [ ] ;
50+ const group = typeof sortable . options . group === 'string' ? { name : sortable . options . group } : sortable . options . group ;
51+ if ( multiDragGroupMembers [ group . name ] === undefined ) {
52+ multiDragGroupMembers [ group . name ] = [ ] ;
5253 }
53- multiDragGroupMembers [ sortable . options . group . name ] . push ( sortable ) ;
54+ multiDragGroupMembers [ group . name ] . push ( sortable ) ;
5455 }
5556
5657 on ( document , 'keydown' , this . _checkKeyDown ) ;
@@ -145,7 +146,7 @@ function MultiDragPlugin() {
145146
146147 dragStartGlobal ( { sortable } ) {
147148 if ( ! this . isMultiDrag && multiDragSortable ) {
148- multiDragSortable . multiDrag . _deselectMultiDrag ( ) ;
149+ MultiDrag . utils . clear ( ) ;
149150 }
150151
151152 multiDragElements . forEach ( multiDragElement => {
@@ -356,7 +357,7 @@ function MultiDragPlugin() {
356357 // Multi-drag selection
357358 if ( ! dragStarted ) {
358359 if ( options . multiDragKey && ! this . multiDragKeyDown ) {
359- this . _deselectMultiDrag ( ) ;
360+ MultiDrag . utils . clear ( ) ;
360361 }
361362 toggleClass ( dragEl , options . selectedClass , ! ~ multiDragElements . indexOf ( dragEl ) ) ;
362363
@@ -506,7 +507,8 @@ function MultiDragPlugin() {
506507 } ,
507508
508509 destroyGlobal ( ) {
509- this . _deselectMultiDrag ( ) ;
510+ MultiDrag . utils . clear ( ) ;
511+
510512 off ( document , 'pointerup' , this . _deselectMultiDrag ) ;
511513 off ( document , 'mouseup' , this . _deselectMultiDrag ) ;
512514 off ( document , 'touchend' , this . _deselectMultiDrag ) ;
@@ -525,31 +527,18 @@ function MultiDragPlugin() {
525527 } ,
526528
527529 _deselectMultiDrag ( evt ) {
528- if ( typeof dragStarted !== "undefined" && dragStarted ) return ;
529-
530530 // Only deselect if selection is in this sortable
531531 if ( multiDragSortable !== this . sortable ) return ;
532532
533- const groupSortables = findAllMembersInSortableGroup ( this . sortable ) || [ this . sortable ] ;
534-
535- // Only deselect if target is not item in any sortable in group (including this)
536- if ( evt && ~ groupSortables . findIndex ( ( sortable ) => closest ( evt . target , this . options . draggable , sortable . el , false ) ) ) return ;
537-
538- // Only deselect if left click
539- if ( evt && evt . button !== 0 ) return ;
533+ if ( evt ) {
534+ // Only deselect if left click
535+ if ( evt . button !== 0 ) return ;
540536
541- while ( multiDragElements . length ) {
542- let el = multiDragElements [ 0 ] ;
543- toggleClass ( el , this . options . selectedClass , false ) ;
544- multiDragElements . shift ( ) ;
545- dispatchEvent ( {
546- sortable : this . sortable ,
547- rootEl : this . sortable . el ,
548- name : 'deselect' ,
549- targetEl : el ,
550- originalEvent : evt
551- } ) ;
537+ // Only deselect if target is not item in any sortable in group (including this)
538+ if ( itemElIsInSortableGroup ( evt . target , this . sortable ) ) return ;
552539 }
540+
541+ MultiDrag . utils . clear ( evt ) ;
553542 } ,
554543
555544 _checkKeyDown ( evt ) {
@@ -577,7 +566,9 @@ function MultiDragPlugin() {
577566 let sortable = el . parentNode [ expando ] ;
578567 if ( ! sortable || ! sortable . options . multiDrag || ~ multiDragElements . indexOf ( el ) ) return ;
579568 if ( multiDragSortable && multiDragSortable !== sortable ) {
580- multiDragSortable . multiDrag . _deselectMultiDrag ( ) ;
569+ if ( ! itemElIsInSortableGroup ( el , multiDragSortable ) ) {
570+ MultiDrag . utils . clear ( ) ;
571+ }
581572 multiDragSortable = sortable ;
582573 }
583574 toggleClass ( el , sortable . options . selectedClass , true ) ;
@@ -593,6 +584,24 @@ function MultiDragPlugin() {
593584 if ( ! sortable || ! sortable . options . multiDrag || ! ~ index ) return ;
594585 toggleClass ( el , sortable . options . selectedClass , false ) ;
595586 multiDragElements . splice ( index , 1 ) ;
587+ } ,
588+ clear ( evt ) {
589+ if ( typeof dragStarted !== "undefined" && dragStarted ) return ;
590+
591+ while ( multiDragElements . length ) {
592+ const el = multiDragElements [ 0 ] ;
593+ const sortableEl = getParentOrHost ( el ) ;
594+ const sortable = sortableEl [ expando ] ;
595+ toggleClass ( el , sortable . options . selectedClass , false ) ;
596+ multiDragElements . shift ( ) ;
597+ dispatchEvent ( {
598+ sortable : sortable ,
599+ rootEl : sortableEl ,
600+ name : 'deselect' ,
601+ targetEl : el ,
602+ originalEvent : evt
603+ } ) ;
604+ }
596605 }
597606 } ,
598607 eventProperties ( ) {
@@ -684,4 +693,8 @@ function findAllMembersInSortableGroup(sortable) {
684693 return multiDragGroupMembers [ sortable . options . group . name ] || [ ] ;
685694}
686695
696+ function itemElIsInSortableGroup ( itemEl , sortable ) {
697+ return ~ ( findAllMembersInSortableGroup ( sortable ) || [ sortable ] ) . findIndex ( ( sortable ) => closest ( itemEl , sortable . options . draggable , sortable . el , false ) ) ;
698+ }
699+
687700export default MultiDragPlugin ;
0 commit comments