File tree Expand file tree Collapse file tree 2 files changed +51
-5
lines changed Expand file tree Collapse file tree 2 files changed +51
-5
lines changed Original file line number Diff line number Diff line change @@ -60,21 +60,37 @@ var helpers = {
60
60
} else if ( compare ( props , items [ items . length - 1 ] ) === 1 ) {
61
61
return items . length ;
62
62
}
63
+
63
64
var low = 0 ,
64
- high = items . length ;
65
+ high = items . length ,
66
+ range = [ ] ;
65
67
66
68
// From lodash lodash 4.6.1 <https://lodash.com/>
67
69
// Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
68
70
while ( low < high ) {
69
71
var mid = ( low + high ) >>> 1 ,
70
72
item = items [ mid ] ,
71
73
computed = compare ( props , item ) ;
72
- if ( computed === - 1 ) {
74
+
75
+ if ( computed === 0 ) {
76
+ range . push ( item ) ;
77
+ low ++ ;
78
+ } else if ( computed === - 1 ) {
73
79
high = mid ;
74
80
} else {
75
81
low = mid + 1 ;
76
82
}
77
83
}
84
+ if ( range . length > 0 ) {
85
+ for ( var i = 0 ; i < range . length ; i ++ ) {
86
+ var itemInRange = range [ i ] ,
87
+ id = canReflect . getSchema ( itemInRange ) . identity ;
88
+ if ( canReflect . hasOwnKey ( props , id ) && props [ id ] === itemInRange [ id ] ) {
89
+ high = items . indexOf ( itemInRange ) ;
90
+ break ;
91
+ }
92
+ }
93
+ }
78
94
return high ;
79
95
// bisect by calling sortFunc
80
96
} ,
Original file line number Diff line number Diff line change @@ -359,19 +359,49 @@ QUnit.test("index uses can-reflect", function(){
359
359
360
360
361
361
QUnit . test ( "index should not sort unchanged items #33" , function ( assert ) {
362
+ canReflect . assignSymbols ( { } , {
363
+ "can.getSchema" : function ( ) {
364
+ return {
365
+ type : "map" ,
366
+ identity : [ "id" ] ,
367
+ keys : {
368
+ id : Number ,
369
+ name : String
370
+ }
371
+ } ;
372
+ }
373
+ } ) ;
374
+
362
375
var items = [
363
- { id : 1 , name : "Item 1 " } ,
376
+ { id : 1 , name : "Item 0 " } ,
364
377
{ id : 2 , name : "Item 1" } ,
365
378
{ id : 3 , name : "Item 1" } ,
366
379
{ id : 4 , name : "Item 1" } ,
367
- { id : 5 , name : "Item 1 " }
380
+ { id : 5 , name : "Item 2 " }
368
381
] ;
369
382
383
+ canReflect . eachIndex ( items , function ( item , i ) {
384
+ canReflect . assignSymbols ( item , {
385
+ "can.getSchema" : function ( ) {
386
+ return {
387
+ type : "map" ,
388
+ identity : [ "id" ] ,
389
+ keys : {
390
+ id : Number ,
391
+ name : String
392
+ }
393
+ } ;
394
+ }
395
+ } ) ;
396
+ } ) ;
397
+
398
+
399
+
370
400
var query = new BasicQuery ( {
371
401
sort : "name"
372
402
} ) ;
373
403
374
404
var res = query . index ( { id :4 , name : "Item 1" } , items ) ;
375
405
376
- QUnit . equal ( res , 4 ) ;
406
+ QUnit . equal ( res , 3 ) ;
377
407
} ) ;
You can’t perform that action at this time.
0 commit comments