Skip to content

Commit c0e49df

Browse files
authored
fix(dropdown): fix menu item refresh logic when using remote api
when apiSettings.cache is set false, the whole list is not refresh by clicking on the down arrow icon.
1 parent 68bd08f commit c0e49df

File tree

1 file changed

+50
-10
lines changed

1 file changed

+50
-10
lines changed

src/definitions/modules/dropdown.js

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ $.fn.dropdown = function(parameters) {
8787
internalChange = false,
8888
iconClicked = false,
8989
element = this,
90+
focused = false,
9091
instance = $module.data(moduleNamespace),
9192

9293
selectActionActive,
@@ -497,6 +498,11 @@ $.fn.dropdown = function(parameters) {
497498
;
498499
},
499500

501+
clearItems: function() {
502+
$menu.empty();
503+
module.refreshItems();
504+
},
505+
500506
toggle: function() {
501507
module.verbose('Toggling menu visibility');
502508
if( !module.is.active() ) {
@@ -512,6 +518,9 @@ $.fn.dropdown = function(parameters) {
512518
? callback
513519
: function(){}
514520
;
521+
if ((focused || iconClicked) && module.is.remote() && module.is.noApiCache()) {
522+
module.clearItems();
523+
}
515524
if(!module.can.show() && module.is.remote()) {
516525
module.debug('No API results retrieved, searching before show');
517526
module.queryRemote(module.get.query(), module.show, [callback, preventFocus]);
@@ -638,6 +647,7 @@ $.fn.dropdown = function(parameters) {
638647
if(module.is.multiple()) {
639648
$module
640649
.on(clickEvent + eventNamespace, module.event.click)
650+
.on(clickEvent + eventNamespace, module.event.search.focus)
641651
;
642652
}
643653
}
@@ -767,11 +777,13 @@ $.fn.dropdown = function(parameters) {
767777
if(!Array.isArray(preSelected)) {
768778
preSelected = preSelected && preSelected!=="" ? preSelected.split(settings.delimiter) : [];
769779
}
770-
$.each(preSelected,function(index,value){
771-
$item.filter('[data-value="'+value+'"]')
772-
.addClass(className.filtered)
773-
;
774-
});
780+
if (module.is.multiple()) {
781+
$.each(preSelected,function(index,value){
782+
$item.filter('[data-value="'+value+'"]')
783+
.addClass(className.filtered)
784+
;
785+
});
786+
}
775787
afterFiltered();
776788
});
777789
}
@@ -799,10 +811,14 @@ $.fn.dropdown = function(parameters) {
799811
},
800812
onError: function() {
801813
module.add.message(message.serverError);
814+
iconClicked = false;
815+
focused = false;
802816
callback.apply(null, callbackParameters);
803817
},
804818
onFailure: function() {
805819
module.add.message(message.serverError);
820+
iconClicked = false;
821+
focused = false;
806822
callback.apply(null, callbackParameters);
807823
},
808824
onSuccess : function(response) {
@@ -820,6 +836,15 @@ $.fn.dropdown = function(parameters) {
820836
if(values.length===0 && !settings.allowAdditions) {
821837
module.add.message(message.noResults);
822838
}
839+
else {
840+
var value = module.is.multiple() ? module.get.values() : module.get.value();
841+
if (value !== '') {
842+
module.verbose('Value(s) present after click icon, select value(s) in items');
843+
module.set.selected(value, null, null, true);
844+
}
845+
}
846+
iconClicked = false;
847+
focused = false;
823848
callback.apply(null, callbackParameters);
824849
}
825850
}
@@ -1052,6 +1077,7 @@ $.fn.dropdown = function(parameters) {
10521077
},
10531078
focus: function() {
10541079
if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {
1080+
focused = true;
10551081
module.show();
10561082
}
10571083
},
@@ -1101,7 +1127,8 @@ $.fn.dropdown = function(parameters) {
11011127
if(module.is.multiple()) {
11021128
module.remove.activeLabel();
11031129
}
1104-
if(settings.showOnFocus || (event.type !== 'focus' && event.type !== 'focusin')) {
1130+
if(!module.is.active() && (settings.showOnFocus || (event.type !== 'focus' && event.type !== 'focusin'))) {
1131+
focused = true;
11051132
module.search();
11061133
}
11071134
},
@@ -1146,6 +1173,7 @@ $.fn.dropdown = function(parameters) {
11461173
} else {
11471174
module.toggle();
11481175
}
1176+
event.stopPropagation();
11491177
}
11501178
},
11511179
text: {
@@ -1185,10 +1213,11 @@ $.fn.dropdown = function(parameters) {
11851213
$label.addClass(className.active);
11861214
}
11871215
settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));
1216+
event.stopPropagation();
11881217
}
11891218
},
11901219
remove: {
1191-
click: function() {
1220+
click: function(event) {
11921221
var
11931222
$label = $(this).parent()
11941223
;
@@ -1200,6 +1229,7 @@ $.fn.dropdown = function(parameters) {
12001229
// remove this label only
12011230
module.remove.activeLabels( $label );
12021231
}
1232+
event.stopPropagation();
12031233
}
12041234
},
12051235
test: {
@@ -1212,6 +1242,9 @@ $.fn.dropdown = function(parameters) {
12121242
if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {
12131243
return;
12141244
}
1245+
if (!module.is.multiple() || (module.is.multiple() && !module.is.active())) {
1246+
focused = true;
1247+
}
12151248
if( module.determine.eventOnElement(event, toggleBehavior) ) {
12161249
event.preventDefault();
12171250
}
@@ -2696,7 +2729,7 @@ $.fn.dropdown = function(parameters) {
26962729
module.clear();
26972730
module.set.selected(value, $selectedItem);
26982731
},
2699-
selected: function(value, $selectedItem, preventChangeTrigger) {
2732+
selected: function(value, $selectedItem, preventChangeTrigger, keepSearchTerm) {
27002733
var
27012734
isMultiple = module.is.multiple()
27022735
;
@@ -2758,7 +2791,9 @@ $.fn.dropdown = function(parameters) {
27582791
if(settings.apiSettings && settings.saveRemoteData) {
27592792
module.save.remoteData(selectedText, selectedValue);
27602793
}
2761-
module.set.text(selectedText);
2794+
if (!keepSearchTerm) {
2795+
module.set.text(selectedText);
2796+
}
27622797
module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
27632798
$selected
27642799
.addClass(className.active)
@@ -2767,7 +2802,9 @@ $.fn.dropdown = function(parameters) {
27672802
}
27682803
})
27692804
;
2770-
module.remove.searchTerm();
2805+
if (!keepSearchTerm) {
2806+
module.remove.searchTerm();
2807+
}
27712808
}
27722809
},
27732810

@@ -3386,6 +3423,9 @@ $.fn.dropdown = function(parameters) {
33863423
remote: function() {
33873424
return settings.apiSettings && module.can.useAPI();
33883425
},
3426+
noApiCache: function() {
3427+
return settings.apiSettings && !settings.apiSettings.cache
3428+
},
33893429
single: function() {
33903430
return !module.is.multiple();
33913431
},

0 commit comments

Comments
 (0)