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

Commit fcf20f6

Browse files
committed
activeMatchIndex to uisMultiple controller
1 parent 205fae2 commit fcf20f6

File tree

3 files changed

+33
-32
lines changed

3 files changed

+33
-32
lines changed

src/uiSelectController.js

+1-7
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ uis.controller('uiSelectCtrl',
2222
ctrl.placeholder = uiSelectConfig.placeholder;
2323
ctrl.search = EMPTY_SEARCH;
2424
ctrl.activeIndex = 0;
25-
ctrl.activeMatchIndex = -1;
25+
2626
ctrl.items = [];
2727
ctrl.selected = undefined;
2828
ctrl.open = false;
@@ -459,12 +459,6 @@ uis.controller('uiSelectCtrl',
459459
});
460460
});
461461

462-
ctrl.searchInput.on('blur', function() {
463-
$timeout(function() {
464-
ctrl.activeMatchIndex = -1;
465-
});
466-
});
467-
468462
// See https://github.com/ivaynberg/select2/blob/3.4.6/select2.js#L1431
469463
function _ensureHighlightVisible() {
470464
var container = $element.querySelectorAll('.ui-select-choices-content');

src/uisMultipleDirective.js

+20-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
1+
uis.directive('uisMultiple', ['uiSelectMinErr','$timeout', function(uiSelectMinErr, $timeout) {
22
return {
33
restrict: 'EA',
44
require: ['^uiSelect', '^ngModel'],
@@ -8,6 +8,8 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
88
var ctrl = this;
99
var $select = $scope.$select;
1010

11+
ctrl.activeMatchIndex = -1;
12+
1113
// Remove item from multiple select
1214
ctrl.removeChoice = function(index){
1315

@@ -20,7 +22,7 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
2022
locals[$select.parserResult.itemName] = removedChoice;
2123

2224
$select.selected.splice(index, 1);
23-
$select.activeMatchIndex = -1;
25+
ctrl.activeMatchIndex = -1;
2426
$select.sizeSearchInput();
2527

2628
// Give some time for scope propagation.
@@ -150,7 +152,7 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
150152
});
151153

152154
scope.$on('uis:activate', function () {
153-
$select.activeMatchIndex = -1;
155+
$selectMultiple.activeMatchIndex = -1;
154156
});
155157

156158
scope.$watch('$select.disabled', function(newValue, oldValue) {
@@ -186,9 +188,9 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
186188
// none = -1,
187189
first = 0,
188190
last = length-1,
189-
curr = $select.activeMatchIndex,
190-
next = $select.activeMatchIndex+1,
191-
prev = $select.activeMatchIndex-1,
191+
curr = $selectMultiple.activeMatchIndex,
192+
next = $selectMultiple.activeMatchIndex+1,
193+
prev = $selectMultiple.activeMatchIndex-1,
192194
newIndex = curr;
193195

194196
if(caretPosition > 0 || ($select.search.length && key == KEY.RIGHT)) return false;
@@ -199,13 +201,13 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
199201
switch(key){
200202
case KEY.LEFT:
201203
// Select previous/first item
202-
if(~$select.activeMatchIndex) return prev;
204+
if(~$selectMultiple.activeMatchIndex) return prev;
203205
// Select last item
204206
else return last;
205207
break;
206208
case KEY.RIGHT:
207209
// Open drop-down
208-
if(!~$select.activeMatchIndex || curr === last){
210+
if(!~$selectMultiple.activeMatchIndex || curr === last){
209211
$select.activate();
210212
return false;
211213
}
@@ -214,7 +216,7 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
214216
break;
215217
case KEY.BACKSPACE:
216218
// Remove selected item and select previous/first
217-
if(~$select.activeMatchIndex){
219+
if(~$selectMultiple.activeMatchIndex){
218220
$selectMultiple.removeChoice(curr);
219221
return prev;
220222
}
@@ -223,8 +225,8 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
223225
break;
224226
case KEY.DELETE:
225227
// Remove selected item and select next item
226-
if(~$select.activeMatchIndex){
227-
$selectMultiple.removeChoice($select.activeMatchIndex);
228+
if(~$selectMultiple.activeMatchIndex){
229+
$selectMultiple.removeChoice($selectMultiple.activeMatchIndex);
228230
return curr;
229231
}
230232
else return false;
@@ -233,8 +235,8 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
233235

234236
newIndex = getNewActiveMatchIndex();
235237

236-
if(!$select.selected.length || newIndex === false) $select.activeMatchIndex = -1;
237-
else $select.activeMatchIndex = Math.min(last,Math.max(first,newIndex));
238+
if(!$select.selected.length || newIndex === false) $selectMultiple.activeMatchIndex = -1;
239+
else $selectMultiple.activeMatchIndex = Math.min(last,Math.max(first,newIndex));
238240

239241
return true;
240242
}
@@ -380,6 +382,11 @@ uis.directive('uisMultiple', ['uiSelectMinErr', function(uiSelectMinErr) {
380382
return dupeIndex;
381383
}
382384

385+
$select.searchInput.on('blur', function() {
386+
$timeout(function() {
387+
$selectMultiple.activeMatchIndex = -1;
388+
});
389+
});
383390

384391
}
385392
};

test/select.spec.js

+12-12
Original file line numberDiff line numberDiff line change
@@ -1286,7 +1286,7 @@ describe('ui-select tests', function() {
12861286
expect(isDropdownOpened(el)).toEqual(false);
12871287
triggerKeydown(searchInput, Key.Backspace);
12881288
expect(isDropdownOpened(el)).toEqual(false);
1289-
expect(el.scope().$select.activeMatchIndex).toBe(el.scope().$select.selected.length - 1);
1289+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(el.scope().$select.selected.length - 1);
12901290

12911291
});
12921292

@@ -1302,7 +1302,7 @@ describe('ui-select tests', function() {
13021302
triggerKeydown(searchInput, Key.Backspace);
13031303
expect(el.scope().$select.selected).toEqual([scope.people[4], scope.people[6]]); //Wladimir & Nicole
13041304

1305-
expect(el.scope().$select.activeMatchIndex).toBe(0);
1305+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(0);
13061306

13071307
});
13081308

@@ -1318,7 +1318,7 @@ describe('ui-select tests', function() {
13181318
triggerKeydown(searchInput, Key.Delete);
13191319
expect(el.scope().$select.selected).toEqual([scope.people[4], scope.people[6]]); //Wladimir & Nicole
13201320

1321-
expect(el.scope().$select.activeMatchIndex).toBe(1);
1321+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(1);
13221322

13231323
});
13241324

@@ -1330,7 +1330,7 @@ describe('ui-select tests', function() {
13301330
expect(isDropdownOpened(el)).toEqual(false);
13311331
triggerKeydown(searchInput, Key.Left);
13321332
expect(isDropdownOpened(el)).toEqual(false);
1333-
expect(el.scope().$select.activeMatchIndex).toBe(el.scope().$select.selected.length - 1);
1333+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(el.scope().$select.selected.length - 1);
13341334

13351335
});
13361336

@@ -1344,37 +1344,37 @@ describe('ui-select tests', function() {
13441344
triggerKeydown(searchInput, Key.Left)
13451345
triggerKeydown(searchInput, Key.Left)
13461346
expect(isDropdownOpened(el)).toEqual(false);
1347-
expect(el.scope().$select.activeMatchIndex).toBe(el.scope().$select.selected.length - 2);
1347+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(el.scope().$select.selected.length - 2);
13481348
triggerKeydown(searchInput, Key.Left)
13491349
triggerKeydown(searchInput, Key.Left)
13501350
triggerKeydown(searchInput, Key.Left)
1351-
expect(el.scope().$select.activeMatchIndex).toBe(0);
1351+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(0);
13521352

13531353
});
13541354

1355-
it('should decrease $select.activeMatchIndex when pressing LEFT key', function() {
1355+
it('should decrease $selectMultiple.activeMatchIndex when pressing LEFT key', function() {
13561356

13571357
scope.selection.selectedMultiple = [scope.people[4], scope.people[5], scope.people[6]]; //Wladimir, Samantha & Nicole
13581358
var el = createUiSelectMultiple();
13591359
var searchInput = el.find('.ui-select-search');
13601360

1361-
el.scope().$select.activeMatchIndex = 3
1361+
el.scope().$selectMultiple.activeMatchIndex = 3
13621362
triggerKeydown(searchInput, Key.Left)
13631363
triggerKeydown(searchInput, Key.Left)
1364-
expect(el.scope().$select.activeMatchIndex).toBe(1);
1364+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(1);
13651365

13661366
});
13671367

1368-
it('should increase $select.activeMatchIndex when pressing RIGHT key', function() {
1368+
it('should increase $selectMultiple.activeMatchIndex when pressing RIGHT key', function() {
13691369

13701370
scope.selection.selectedMultiple = [scope.people[4], scope.people[5], scope.people[6]]; //Wladimir, Samantha & Nicole
13711371
var el = createUiSelectMultiple();
13721372
var searchInput = el.find('.ui-select-search');
13731373

1374-
el.scope().$select.activeMatchIndex = 0
1374+
el.scope().$selectMultiple.activeMatchIndex = 0
13751375
triggerKeydown(searchInput, Key.Right)
13761376
triggerKeydown(searchInput, Key.Right)
1377-
expect(el.scope().$select.activeMatchIndex).toBe(2);
1377+
expect(el.scope().$selectMultiple.activeMatchIndex).toBe(2);
13781378

13791379
});
13801380

0 commit comments

Comments
 (0)