Skip to content
This repository was archived by the owner on Dec 16, 2019. It is now read-only.

Commit b735f14

Browse files
committed
Changed currentGroups attribute to a extraSetting field named selectByGroups
- selectByGroups is an array with objects with a label and a value
1 parent 23f23f8 commit b735f14

File tree

1 file changed

+19
-25
lines changed

1 file changed

+19
-25
lines changed

src/angularjs-dropdown-multiselect.js

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)