173173 |
174174 </slot >
175175 </template >
176- <template v-if =" selected_rows_info " >
176+ <template v-if =" selected_rows_info && checkbox_rows " >
177177 <slot name =" selected-rows-info" :selectedItemsCount =" selectedItemsCount" >
178178 {{selectedItemsCount}} rows selected
179179 </slot >
@@ -503,20 +503,37 @@ export default {
503503 this .sort ();
504504 }
505505 },
506- isShiftSelection (shiftKey ,rowIndex ){
507- return (shiftKey == true ) && (this .lastSelectedItemIndex != null ) && (this .lastSelectedItemIndex != rowIndex);
508- },
509506 handleAddRow (payload ) {
510- let row = this .vbt_rows [payload .rowIndex ];
511- if (this .isShiftSelection (payload .shiftKey ,payload .rowIndex )) {
512- let rows = this .getShiftSelectionRows (payload .rowIndex );
513- rows .forEach ((_row ) => {this .addSelectedItem (_row)});
514- } else {
515- this .addSelectedItem (row);
507+ if (payload .shiftKey ) {
508+ this .handleShiftSelection (payload);
509+ return ;
516510 }
517511
518- this .$emit (' on-select-row' , {" selected_items" : cloneDeep (this .selected_items ) ," selected_item" : row});
512+ let row = this .vbt_rows [payload .rowIndex ];
513+ this .lastSelectedItemIndex = payload .rowIndex ;
514+ this .addSelectedItem (row);
515+ this .checkAllRowsSelected ();
516+ },
517+ handleRemoveRow (payload ) {
518+ if (payload .shiftKey ) {
519+ this .handleShiftSelection (payload);
520+ return ;
521+ }
519522
523+ let row = this .vbt_rows [payload .rowIndex ];
524+ this .removeSelectedItem (row);
525+ this .allRowsSelected = false ;
526+ },
527+ handleShiftSelection (payload ) {
528+ let lastSelectedItemIndex = (this .lastSelectedItemIndex != null ) ? this .lastSelectedItemIndex : payload .rowIndex ;
529+ let start = Math .min (lastSelectedItemIndex, payload .rowIndex );
530+ let end = Math .max (lastSelectedItemIndex, payload .rowIndex );
531+ let rows = this .vbt_rows .slice (start,end + 1 );
532+ this .unSelectAllItems ();
533+ rows .forEach ((_row ) => {this .addSelectedItem (_row)});
534+ this .checkAllRowsSelected ();
535+ },
536+ checkAllRowsSelected () {
520537 let difference = [];
521538
522539 if (this .server_mode && ! this .hasUniqueId ) {
@@ -525,31 +542,10 @@ export default {
525542 difference = differenceBy (this .vbt_rows , this .selected_items , this .uniqueId );
526543 }
527544
528- if (difference .length == 0 ) {
529- this .allRowsSelected = true ;
530- // EventBus.$emit('select-select-all-items-checkbox', "from main");
531- } else {
532- this .allRowsSelected = false ;
533- // EventBus.$emit('unselect-select-all-items-checkbox', "from main");
534- }
535-
536- this .lastSelectedItemIndex = payload .rowIndex ;
537- },
538- handleRemoveRow (payload ) {
539- let row = this .vbt_rows [payload .rowIndex ];
540- if (this .isShiftSelection (payload .shiftKey ,payload .rowIndex )) {
541- let rows = this .getShiftSelectionRows (payload .rowIndex );
542- rows .forEach ((_row ) => {this .removeSelectedItem (_row)});
543- } else {
544- this .removeSelectedItem (row);
545- }
546- this .$emit (' on-unselect-row' , {" selected_items" : cloneDeep (this .selected_items )," unselected_item" : row});
547- // EventBus.$emit('unselect-select-all-items-checkbox');
548- this .allRowsSelected = false ;
549- this .lastSelectedItemIndex = payload .rowIndex ;
545+ this .allRowsSelected = difference .length == 0 ;
550546 },
551- addSelectedItem (item ) {
552547
548+ addSelectedItem (item ) {
553549 let index = - 1 ;
554550 if (this .server_mode && ! this .hasUniqueId ) {
555551 index = findIndex (this .selected_items , (selected_item ) => {return isEqual (selected_item, item)});
@@ -560,6 +556,8 @@ export default {
560556 if (index == - 1 ) {
561557 this .selected_items .push (item);
562558 }
559+
560+ this .$emit (' on-select-row' , {" selected_items" : _ .cloneDeep (this .selected_items ) ," selected_item" : item});
563561 },
564562 selectAllItems () {
565563
@@ -601,18 +599,7 @@ export default {
601599 return true ;
602600 }
603601 });
604- },
605- getShiftSelectionRows (rowIndex ) {
606- let start = 0 ;
607- let end = 0 ;
608- if (this .lastSelectedItemIndex < rowIndex) {
609- start = this .lastSelectedItemIndex ;
610- end = rowIndex + 1 ;
611- } else if (this .lastSelectedItemIndex > rowIndex) {
612- start = rowIndex;
613- end = this .lastSelectedItemIndex + 1 ;
614- }
615- return this .vbt_rows .slice (start,end);
602+ this .$emit (' on-unselect-row' , {" selected_items" : _ .cloneDeep (this .selected_items )," unselected_item" : item});
616603 },
617604 updateFilter (payload ) {
618605 let event = payload .event ;
0 commit comments