@@ -2,38 +2,77 @@ uis.directive('uiSelectHeaderGroupSelectable', ['$timeout', function($timeout) {
22 return {
33 restrict : 'EA' ,
44 require : [ '^uiSelect' ] ,
5- scope : true ,
5+ scope : {
6+ isEnabled : "<?uiSelectHeaderGroupSelectable"
7+ } ,
68 link : function ( $scope , $element , attrs , select ) {
79 // TODO Why that???
810 var $select = select [ 0 ] ;
11+ if ( angular . isUndefined ( $scope . isEnabled ) ) {
12+ $scope . isEnabled = true ;
13+ }
914
10- $scope . $watch ( '$select.groups' , function ( ) {
15+ function isEnabled ( ) {
16+ return angular . isUndefined ( $scope . isEnabled ) || $scope . isEnabled ;
17+ }
18+
19+ function getElements ( ) {
1120 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+ }
1327
14- angular . forEach ( elements , function ( e ) {
28+ function enableClick ( ) {
29+ if ( isEnabled ( ) ) {
30+ angular . forEach ( getElements ( ) , function ( e ) {
1531 var element = angular . element ( e ) ;
1632
1733 // Check the onClick event is not already listen
1834 if ( ! element . hasClass ( 'ui-select-header-group-selectable' ) ) {
1935 element . addClass ( 'ui-select-header-group-selectable' ) ;
2036
2137 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 ) ;
2440
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+ } ) ;
2845 } ) ;
29- } ) ;
46+ }
3047 } ) ;
3148 }
3249 } ) ;
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 ( ) ;
3367 } else {
34- console . error ( 'Use uiSelectHeaderGroupSelectable with no multiple uiSelect or without groupBy' ) ;
68+ enableClick ( ) ;
3569 }
3670 } ) ;
71+
72+ $scope . $watch ( '$select.groups' , enableClick ) ;
73+ $scope . $watch ( function ( ) {
74+ return $select . selected && $select . selected . length ? $select . selected . length : - 1 ;
75+ } , enableClick ) ;
3776 }
3877 } ;
3978} ] ) ;
0 commit comments