Skip to content
This repository was archived by the owner on Oct 2, 2019. It is now read-only.

Commit 172d3ab

Browse files
committed
Fix: refresh function, every new search removes items selected earlier
1 parent 785c6a4 commit 172d3ab

File tree

2 files changed

+57
-11
lines changed

2 files changed

+57
-11
lines changed

src/select.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -568,31 +568,36 @@
568568
if (data){
569569
if ($select.multiple){
570570
var resultMultiple = [];
571-
for (var k = inputValue.length - 1; k >= 0; k--) {
572-
for (var j = data.length - 1; j >= 0; j--) {
573-
locals = {};
574-
locals[$select.parserResult.itemName] = data[j];
571+
var checkFnMultiple = function(list, value){
572+
if (!list || !list.length) return;
573+
for (var p = list.length - 1; p >= 0; p--) {
574+
locals[$select.parserResult.itemName] = list[p];
575575
result = $select.parserResult.modelMapper(scope, locals);
576-
if (result == inputValue[k]){
577-
resultMultiple.unshift(data[j]);
578-
break;
576+
if (result == value){
577+
resultMultiple.unshift(list[p]);
578+
return true;
579579
}
580580
}
581+
return false;
582+
};
583+
for (var k = inputValue.length - 1; k >= 0; k--) {
584+
if (!checkFnMultiple($select.selected, inputValue[k])){
585+
checkFnMultiple(data, inputValue[k]);
586+
}
581587
}
582588
return resultMultiple;
583589
}else{
584-
var checkFn = function(d){
585-
locals = {};
590+
var checkFnSingle = function(d){
586591
locals[$select.parserResult.itemName] = d;
587592
result = $select.parserResult.modelMapper(scope, locals);
588593
return result == inputValue;
589594
};
590595
//If possible pass same object stored in $select.selected
591-
if ($select.selected && checkFn($select.selected)) {
596+
if ($select.selected && checkFnSingle($select.selected)) {
592597
return $select.selected;
593598
}
594599
for (var i = data.length - 1; i >= 0; i--) {
595-
if (checkFn(data[i])) return data[i];
600+
if (checkFnSingle(data[i])) return data[i];
596601
}
597602
}
598603
}

test/select.spec.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,47 @@ describe('ui-select tests', function() {
10361036

10371037
});
10381038

1039+
it('should format view value correctly when using single property binding and refresh funcion', function () {
1040+
1041+
scope.selection.selectedMultiple = ['[email protected]', '[email protected]'];
1042+
1043+
var el = compileTemplate(
1044+
'<ui-select multiple ng-model="selection.selectedMultiple" theme="bootstrap" style="width: 800px;"> \
1045+
<ui-select-match placeholder="Pick one...">{{$item.name}} &lt;{{$item.email}}&gt;</ui-select-match> \
1046+
<ui-select-choices repeat="person.email as person in people | filter: $select.search" \
1047+
refresh="fetchFromServer($select.search)" refresh-delay="0"> \
1048+
<div ng-bind-html="person.name | highlight: $select.search"></div> \
1049+
<div ng-bind-html="person.email | highlight: $select.search"></div> \
1050+
</ui-select-choices> \
1051+
</ui-select>'
1052+
);
1053+
1054+
var searchInput = el.find('.ui-select-search');
1055+
1056+
scope.fetchFromServer = function(searching){
1057+
1058+
if (searching == 'n')
1059+
return scope.people
1060+
1061+
if (searching == 'o'){
1062+
scope.people = []; //To simulate cases were previously selected item isnt in the list anymore
1063+
}
1064+
1065+
};
1066+
1067+
setSearchText(el, 'n')
1068+
clickItem(el, 'Nicole');
1069+
1070+
expect(el.find('.ui-select-match-item [uis-transclude-append]:not(.ng-hide)').text())
1071+
.toBe("Wladimir <[email protected]>Samantha <[email protected]>Nicole <[email protected]>");
1072+
1073+
setSearchText(el, 'o')
1074+
1075+
expect(el.find('.ui-select-match-item [uis-transclude-append]:not(.ng-hide)').text())
1076+
.toBe("Wladimir <[email protected]>Samantha <[email protected]>Nicole <[email protected]>");
1077+
1078+
});
1079+
10391080
});
10401081

10411082

0 commit comments

Comments
 (0)