@@ -22,8 +22,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
2222 events : '=' ,
2323 searchFilter : '=?' ,
2424 translationTexts : '=' ,
25- groupBy : '@' ,
26- currentGroups : '=selectByGroups'
25+ groupBy : '@'
2726 } ,
2827 template : function ( element , attrs ) {
2928 var checkboxes = attrs . checkboxes ? true : false ;
@@ -34,16 +33,17 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
3433 template += '<ul class="dropdown-menu dropdown-menu-form" ng-if="open" ng-style="{display: open ? \'block\' : \'none\', height : settings.scrollable ? settings.scrollableHeight : \'auto\', overflow: \'auto\' }" >' ;
3534 template += '<li ng-if="settings.showCheckAll && settings.selectionLimit !== 1"><a ng-keydown="keyDownLink($event)" data-ng-click="selectAll()" tabindex="-1" id="selectAll"><span class="glyphicon glyphicon-ok"></span> {{texts.checkAll}}</a>' ;
3635 template += '<li ng-if="settings.showUncheckAll"><a ng-keydown="keyDownLink($event)" data-ng-click="deselectAll();" tabindex="-1" id="deselectAll"><span class="glyphicon glyphicon-remove"></span> {{texts.uncheckAll}}</a></li>' ;
37- template += '<li ng-if="currentGroups && ((settings.showCheckAll && settings.selectionLimit > 0) || settings.showUncheckAll)" class="divider"></li>' ;
38- template += '<li ng-repeat="currentGroup in currentGroups track by $index"><a ng-bind="::currentGroup.title" ng-click="selectCurrentGroup(currentGroup)" ng-class="{\'dropdown-selected-group\': selectedGroup == currentGroup.value}" tabindex="-1"></a></li>' ;
36+ template += '<li ng-if="settings.selectByGroups && ((settings.showCheckAll && settings.selectionLimit > 0) || settings.showUncheckAll)" class="divider"></li>' ;
37+ template += '<li ng-repeat="currentGroup in settings.selectByGroups track by $index" ng-click="selectCurrentGroup(currentGroup)"><a ng-class="{\'dropdown-selected-group\': selectedGroup === currentGroup.value}" tabindex="-1">{{::texts.selectGroup}} {{::currentGroup.label}}</a></li>' ;
38+ template += '<li ng-if="settings.selectByGroups" class="divider"></li>' ;
3939 template += '<li ng-if="settings.showEnableSearchButton && settings.enableSearch"><a ng-keydown="keyDownLink($event); keyDownToggleSearch();" ng-click="toggleSearch($event);" tabindex="-1">{{texts.disableSearch}}</a></li>' ;
4040 template += '<li ng-if="settings.showEnableSearchButton && !settings.enableSearch"><a ng-keydown="keyDownLink($event); keyDownToggleSearch();" ng-click="toggleSearch($event);" tabindex="-1">{{texts.enableSearch}}</a></li>' ;
41- template += '<li ng-if="(settings.showCheckAll && settings.selectionLimit > 0) || settings.showUncheckAll || settings.showEnableSearchButton || currentGroups " class="divider"></li>' ;
41+ template += '<li ng-if="(settings.showCheckAll && settings.selectionLimit > 0) || settings.showUncheckAll || settings.showEnableSearchButton" class="divider"></li>' ;
4242 template += '<li ng-if="settings.enableSearch"><div class="dropdown-header"><input type="text" class="form-control searchField" ng-keydown="keyDownSearchDefault($event); keyDownSearch($event, input.searchFilter);" ng-style="{width: \'100%\'}" ng-model="input.searchFilter" placeholder="{{texts.searchPlaceholder}}" /></li>' ;
4343 template += '<li ng-if="settings.enableSearch" class="divider"></li>' ;
4444
4545 if ( groups ) {
46- template += '<li ng-repeat-start="option in orderedItems | filter:getFilter(input.searchFilter)" ng-show="getPropertyForObject(option, settings.groupBy) !== getPropertyForObject(orderedItems[$index - 1], settings.groupBy)" role="presentation" class="dropdown-header">{{ getGroupTitle (getPropertyForObject(option, settings.groupBy)) }}</li>' ;
46+ template += '<li ng-repeat-start="option in orderedItems | filter:getFilter(input.searchFilter)" ng-show="getPropertyForObject(option, settings.groupBy) !== getPropertyForObject(orderedItems[$index - 1], settings.groupBy)" role="presentation" class="dropdown-header">{{ getGroupLabel (getPropertyForObject(option, settings.groupBy)) }}</li>' ;
4747 template += '<li ng-class="{\'active\': isChecked(getPropertyForObject(option,settings.idProp)) && settings.styleActive}" ng-repeat-end role="presentation">' ;
4848 } else {
4949 template += '<li ng-class="{\'active\': isChecked(getPropertyForObject(option,settings.idProp)) && settings.styleActive}" role="presentation" ng-repeat="option in options | filter:getFilter(input.searchFilter)">' ;
@@ -99,7 +99,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
9999 onDeselectAll : angular . noop ,
100100 onInitDone : angular . noop ,
101101 onMaxSelectionReached : angular . noop ,
102- onSelectionChanged : angular . noop
102+ onSelectionChanged : angular . noop
103103 } ;
104104
105105 $scope . settings = {
@@ -136,8 +136,9 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
136136 searchPlaceholder : 'Search...' ,
137137 buttonDefaultText : 'Select' ,
138138 dynamicButtonTextSuffix : 'checked' ,
139- disableSearch : 'Disable search' ,
140- enableSearch : 'Enable search'
139+ disableSearch : 'Disable search' ,
140+ enableSearch : 'Enable search' ,
141+ selectGroup : 'Select all:'
141142 } ;
142143
143144 $scope . input = {
@@ -160,23 +161,16 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
160161 }
161162 } ) ;
162163
163- $scope . selectCurrentGroup = function ( currentGroup ) {
164- $scope . selectedGroup = currentGroup . value ;
164+ $scope . selectCurrentGroup = function ( currentGroup ) {
165+ $scope . selectedModel . splice ( 0 , $scope . selectedModel . length ) ;
165166 if ( $scope . orderedItems ) {
166- for ( var i = 0 ; i < $scope . orderedItems . length ; i ++ ) {
167- var item = $scope . orderedItems [ i ] ;
168- var indexInSelected = $scope . selectedModel . map ( function ( it ) { return it . id ; } ) . indexOf ( item . id ) ;
169- if ( item [ $scope . groupBy ] == currentGroup . value ) {
170- if ( indexInSelected == - 1 ) {
171- $scope . selectedModel . push ( { id : item . id } ) ;
172- }
173- } else {
174- if ( indexInSelected != - 1 ) {
175- $scope . selectedModel . splice ( indexInSelected , 1 ) ;
176- }
167+ $scope . orderedItems . forEach ( function ( item ) {
168+ if ( item [ $scope . groupBy ] === currentGroup . value ) {
169+ $scope . setSelectedItem ( $scope . getPropertyForObject ( item , $scope . settings . idProp ) , false , false )
177170 }
178- }
171+ } ) ;
179172 }
173+ $scope . externalEvents . onSelectionChanged ( ) ;
180174 } ;
181175
182176 angular . extend ( $scope . settings , $scope . extraSettings || [ ] ) ;
@@ -233,7 +227,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
233227 } ) ;
234228 }
235229
236- $scope . getGroupTitle = function ( groupValue ) {
230+ $scope . getGroupLabel = function ( groupValue ) {
237231 if ( $scope . settings . groupByTextProvider !== null ) {
238232 return $scope . settings . groupByTextProvider ( groupValue ) ;
239233 }
@@ -354,7 +348,7 @@ directiveModule.directive('ngDropdownMultiselect', ['$filter', '$document', '$co
354348 }
355349 }
356350 if ( fireSelectionChange ) {
357- $scope . externalEvents . onSelectionChanged ( ) ;
351+ $scope . externalEvents . onSelectionChanged ( ) ;
358352 }
359353 $scope . selectedGroup = null ;
360354 } ;
0 commit comments