@@ -2,38 +2,77 @@ uis.directive('uiSelectHeaderGroupSelectable', ['$timeout', function($timeout) {
2
2
return {
3
3
restrict : 'EA' ,
4
4
require : [ '^uiSelect' ] ,
5
- scope : true ,
5
+ scope : {
6
+ isEnabled : "<?uiSelectHeaderGroupSelectable"
7
+ } ,
6
8
link : function ( $scope , $element , attrs , select ) {
7
9
// TODO Why that???
8
10
var $select = select [ 0 ] ;
11
+ if ( angular . isUndefined ( $scope . isEnabled ) ) {
12
+ $scope . isEnabled = true ;
13
+ }
9
14
10
- $scope . $watch ( '$select.groups' , function ( ) {
15
+ function isEnabled ( ) {
16
+ return angular . isUndefined ( $scope . isEnabled ) || $scope . isEnabled ;
17
+ }
18
+
19
+ function getElements ( ) {
11
20
if ( $select . multiple && $select . groups ) {
12
- var elements = $element . querySelectorAll ( '.ui-select-choices-group-label' ) ;
21
+ return $element . querySelectorAll ( '.ui-select-choices-group-label' ) ;
22
+ } else {
23
+ console . error ( 'Use uiSelectHeaderGroupSelectable with no multiple uiSelect or without groupBy' ) ;
24
+ return [ ] ;
25
+ }
26
+ }
13
27
14
- angular . forEach ( elements , function ( e ) {
28
+ function enableClick ( ) {
29
+ if ( isEnabled ( ) ) {
30
+ angular . forEach ( getElements ( ) , function ( e ) {
15
31
var element = angular . element ( e ) ;
16
32
17
33
// Check the onClick event is not already listen
18
34
if ( ! element . hasClass ( 'ui-select-header-group-selectable' ) ) {
19
35
element . addClass ( 'ui-select-header-group-selectable' ) ;
20
36
21
37
element . on ( 'click' , function ( ) {
22
- // TODO It's the good way?
23
- var group = $select . findGroupByName ( element . text ( ) , true ) ;
38
+ if ( isEnabled ( ) ) {
39
+ var group = $select . findGroupByName ( element . text ( ) , true ) ;
24
40
25
- angular . forEach ( group . items , function ( item ) {
26
- $timeout ( function ( ) {
27
- $select . select ( item , false , ' ' ) ;
41
+ angular . forEach ( group . items , function ( item ) {
42
+ $timeout ( function ( ) {
43
+ $select . select ( item , false , ' ' ) ;
44
+ } ) ;
28
45
} ) ;
29
- } ) ;
46
+ }
30
47
} ) ;
31
48
}
32
49
} ) ;
50
+ }
51
+ }
52
+
53
+ function disableClick ( ) {
54
+ if ( ! isEnabled ( ) ) {
55
+ angular . forEach ( getElements ( ) , function ( e ) {
56
+ var element = angular . element ( e ) ;
57
+ element . removeClass ( 'ui-select-header-group-selectable' ) ;
58
+ element . off ( 'click' ) ;
59
+ } ) ;
60
+ }
61
+ }
62
+
63
+ // Watch element to trigger select event
64
+ $scope . $watch ( 'isEnabled' , function ( ) {
65
+ if ( ! isEnabled ( ) ) {
66
+ disableClick ( ) ;
33
67
} else {
34
- console . error ( 'Use uiSelectHeaderGroupSelectable with no multiple uiSelect or without groupBy' ) ;
68
+ enableClick ( ) ;
35
69
}
36
70
} ) ;
71
+
72
+ $scope . $watch ( '$select.groups' , enableClick ) ;
73
+ $scope . $watch ( function ( ) {
74
+ return $select . selected && $select . selected . length ? $select . selected . length : - 1 ;
75
+ } , enableClick ) ;
37
76
}
38
77
} ;
39
78
} ] ) ;
0 commit comments