Skip to content

Commit 84420c3

Browse files
committed
fix(angular-ui#271) if option is set only on activate the refresh function is getting the request.
1 parent 1ed8346 commit 84420c3

File tree

3 files changed

+38
-5
lines changed

3 files changed

+38
-5
lines changed

src/uiSelectChoicesDirective.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,9 @@ uis.directive('uiSelectChoices',
5555

5656

5757
$select.parseRepeatAttr(attrs.repeat, groupByExp, groupFilterExp); //Result ready at $select.parserResult
58-
58+
$select.refreshOnActive = scope.$eval(attrs.refreshOnActive);
5959
$select.disableChoiceExpression = attrs.uiDisableChoice;
6060
$select.onHighlightCallback = attrs.onHighlight;
61-
6261
$select.dropdownPosition = attrs.position ? attrs.position.toLowerCase() : uiSelectConfig.dropdownPosition;
6362

6463
scope.$on('$destroy', function() {
@@ -68,7 +67,7 @@ uis.directive('uiSelectChoices',
6867
scope.$watch('$select.search', function(newValue) {
6968
if(newValue && !$select.open && $select.multiple) $select.activate(false, true);
7069
$select.activeIndex = $select.tagging.isActivated ? -1 : 0;
71-
if (!attrs.minimumInputLength || $select.search.length >= attrs.minimumInputLength) {
70+
if ((!attrs.minimumInputLength || $select.search.length >= attrs.minimumInputLength) && (!$select.refreshOnActive || ($select.refreshOnActive && $select.refreshIsActive))) {
7271
$select.refresh(attrs.refresh);
7372
} else {
7473
$select.items = [];
@@ -81,6 +80,15 @@ uis.directive('uiSelectChoices',
8180
$select.refreshDelay = refreshDelay !== undefined ? refreshDelay : uiSelectConfig.refreshDelay;
8281
});
8382

83+
if(!angular.isUndefined($select.refreshOnActive)){
84+
//only add a watch when refreshonactive is set.
85+
scope.$watch('$select.refreshIsActive', function(newValue, oldValue){
86+
if(angular.isUndefined(oldValue) && newValue){
87+
$select.refresh(attrs.refresh);
88+
}
89+
});
90+
}
91+
8492
scope.$watch('$select.open', function(open) {
8593
if (open) {
8694
tElement.attr('role', 'listbox');

src/uiSelectController.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ uis.controller('uiSelectCtrl',
1919
ctrl.paste = uiSelectConfig.paste;
2020
ctrl.resetSearchInput = uiSelectConfig.resetSearchInput;
2121
ctrl.refreshing = false;
22+
ctrl.refreshOnActive = undefined;
23+
ctrl.refreshIsActive = undefined;
2224
ctrl.spinnerEnabled = uiSelectConfig.spinnerEnabled;
2325
ctrl.spinnerClass = uiSelectConfig.spinnerClass;
2426

@@ -109,6 +111,14 @@ uis.controller('uiSelectCtrl',
109111
return result;
110112
}
111113

114+
function _setrefreshIsActive(){
115+
//only set a value if the refreshOnActive attr is set.
116+
if(!angular.isUndefined(ctrl.refreshOnActive))
117+
{
118+
ctrl.refreshIsActive = true;
119+
}
120+
}
121+
112122
// When the user clicks on ui-select, displays the dropdown list
113123
ctrl.activate = function(initSearchValue, avoidReset) {
114124
if (!ctrl.disabled && !ctrl.open) {
@@ -119,7 +129,8 @@ uis.controller('uiSelectCtrl',
119129
ctrl.open = true;
120130

121131
ctrl.activeIndex = ctrl.activeIndex >= ctrl.items.length ? 0 : ctrl.activeIndex;
122-
132+
133+
_setrefreshIsActive();
123134
// ensure that the index is set to zero for tagging variants
124135
// that where first option is auto-selected
125136
if ( ctrl.activeIndex === -1 && ctrl.taggingLabel !== false ) {

test/select.spec.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ describe('ui-select tests', function() {
168168
if (attrs.refresh !== undefined) { choicesAttrsHtml += ' refresh="' + attrs.refresh + '"'; }
169169
if (attrs.refreshDelay !== undefined) { choicesAttrsHtml += ' refresh-delay="' + attrs.refreshDelay + '"'; }
170170
if (attrs.backspaceReset !== undefined) { attrsHtml += ' backspace-reset="' + attrs.backspaceReset + '"';}
171+
if (attrs.refreshOnActive !== undefined) { choicesAttrsHtml += ' refresh-on-active="' + attrs.refreshOnActive + '"'; }
172+
171173
}
172174

173175
return compileTemplate(
@@ -3119,5 +3121,17 @@ describe('ui-select tests', function() {
31193121
expect(el.scope().$select.spinnerClass).toBe('randomclass');
31203122
});
31213123
});
3122-
3124+
3125+
describe('With refresh on active', function(){
3126+
it('should not refresh untill is activated', function(){
3127+
scope.fetchFromServer = function(){};
3128+
var el = createUiSelect({refresh:"fetchFromServer($select.search)",refreshOnActive:true,refreshDelay:0});
3129+
spyOn(scope, 'fetchFromServer');
3130+
$timeout.flush();
3131+
expect(scope.fetchFromServer.calls.any()).toEqual(false);
3132+
el.scope().$select.activate();
3133+
$timeout.flush();
3134+
expect(scope.fetchFromServer.calls.any()).toEqual(true);
3135+
});
3136+
});
31233137
});

0 commit comments

Comments
 (0)