This repository was archived by the owner on Oct 2, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Expand file tree
/
Copy pathuiSelectHeaderGroupSelectableDirective.js
More file actions
78 lines (69 loc) · 2.33 KB
/
uiSelectHeaderGroupSelectableDirective.js
File metadata and controls
78 lines (69 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
uis.directive('uiSelectHeaderGroupSelectable', ['$timeout', function($timeout) {
return {
restrict: 'EA',
require: ['^uiSelect'],
scope: {
isEnabled: "<?uiSelectHeaderGroupSelectable"
},
link: function ($scope, $element, attrs, select) {
// TODO Why that???
var $select = select[0];
if (angular.isUndefined($scope.isEnabled)) {
$scope.isEnabled = true;
}
function isEnabled() {
return angular.isUndefined($scope.isEnabled) || $scope.isEnabled;
}
function getElements() {
if ($select.multiple && $select.groups) {
return $element.querySelectorAll('.ui-select-choices-group-label');
} else {
console.error('Use uiSelectHeaderGroupSelectable with no multiple uiSelect or without groupBy');
return [];
}
}
function enableClick() {
if (isEnabled()) {
angular.forEach(getElements(), function(e) {
var element = angular.element(e);
// Check the onClick event is not already listen
if (!element.hasClass('ui-select-header-group-selectable')) {
element.addClass('ui-select-header-group-selectable');
element.on('click', function () {
if (isEnabled()) {
var group = $select.findGroupByName(element.text(), true);
angular.forEach(group.items, function(item) {
$timeout(function() {
$select.select(item, false, ' ');
});
});
}
});
}
});
}
}
function disableClick() {
if (!isEnabled()) {
angular.forEach(getElements(), function(e) {
var element = angular.element(e);
element.removeClass('ui-select-header-group-selectable');
element.off('click');
});
}
}
// Watch element to trigger select event
$scope.$watch('isEnabled', function() {
if (!isEnabled()) {
disableClick();
} else {
enableClick();
}
});
$scope.$watch('$select.groups', enableClick);
$scope.$watch(function() {
return $select.selected && $select.selected.length ? $select.selected.length : -1;
}, enableClick);
}
};
}]);