parent
							
								
									b10540a0b5
								
							
						
					
					
						commit
						285dd6be34
					
				| @ -10,6 +10,7 @@ | |||||||
| // correctly implementing its interfaces for backwards compatibility.
 | // correctly implementing its interfaces for backwards compatibility.
 | ||||||
| import {Observable} from 'rxjs/Observable'; | import {Observable} from 'rxjs/Observable'; | ||||||
| 
 | 
 | ||||||
|  | import {EventEmitter} from '../event_emitter'; | ||||||
| import {QueryList as viewEngine_QueryList} from '../linker/query_list'; | import {QueryList as viewEngine_QueryList} from '../linker/query_list'; | ||||||
| import {Type} from '../type'; | import {Type} from '../type'; | ||||||
| import {getSymbolIterator} from '../util'; | import {getSymbolIterator} from '../util'; | ||||||
| @ -295,7 +296,7 @@ function createPredicate<T>( | |||||||
| 
 | 
 | ||||||
| class QueryList_<T>/* implements viewEngine_QueryList<T> */ { | class QueryList_<T>/* implements viewEngine_QueryList<T> */ { | ||||||
|   readonly dirty = true; |   readonly dirty = true; | ||||||
|   readonly changes: Observable<T>; |   readonly changes: Observable<T> = new EventEmitter(); | ||||||
|   private _values: T[] = []; |   private _values: T[] = []; | ||||||
|   /** @internal */ |   /** @internal */ | ||||||
|   _valuesTree: any[] = []; |   _valuesTree: any[] = []; | ||||||
| @ -367,9 +368,12 @@ class QueryList_<T>/* implements viewEngine_QueryList<T> */ { | |||||||
|     (this as{dirty: boolean}).dirty = false; |     (this as{dirty: boolean}).dirty = false; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   notifyOnChanges(): void { throw new Error('Method not implemented.'); } |   notifyOnChanges(): void { (this.changes as EventEmitter<any>).emit(this); } | ||||||
|   setDirty(): void { (this as{dirty: boolean}).dirty = true; } |   setDirty(): void { (this as{dirty: boolean}).dirty = true; } | ||||||
|   destroy(): void { throw new Error('Method not implemented.'); } |   destroy(): void { | ||||||
|  |     (this.changes as EventEmitter<any>).complete(); | ||||||
|  |     (this.changes as EventEmitter<any>).unsubscribe(); | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NOTE: this hack is here because IQueryList has private members and therefore
 | // NOTE: this hack is here because IQueryList has private members and therefore
 | ||||||
| @ -396,6 +400,7 @@ export function queryRefresh(query: QueryList<any>): boolean { | |||||||
|   const queryImpl = (query as any as QueryList_<any>); |   const queryImpl = (query as any as QueryList_<any>); | ||||||
|   if (query.dirty) { |   if (query.dirty) { | ||||||
|     query.reset(queryImpl._valuesTree); |     query.reset(queryImpl._valuesTree); | ||||||
|  |     query.notifyOnChanges(); | ||||||
|     return true; |     return true; | ||||||
|   } |   } | ||||||
|   return false; |   return false; | ||||||
|  | |||||||
| @ -826,4 +826,34 @@ describe('query', () => { | |||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|   }); |   }); | ||||||
|  | 
 | ||||||
|  |   describe('observable interface', () => { | ||||||
|  | 
 | ||||||
|  |     it('should allow observing changes to query list', () => { | ||||||
|  |       const queryList = new QueryList(); | ||||||
|  |       let changes = 0; | ||||||
|  | 
 | ||||||
|  |       queryList.changes.subscribe({ | ||||||
|  |         next: (arg) => { | ||||||
|  |           changes += 1; | ||||||
|  |           expect(arg).toBe(queryList); | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       // initial refresh, the query should be dirty
 | ||||||
|  |       qR(queryList); | ||||||
|  |       expect(changes).toBe(1); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       // refresh without setting dirty - no emit
 | ||||||
|  |       qR(queryList); | ||||||
|  |       expect(changes).toBe(1); | ||||||
|  | 
 | ||||||
|  |       // refresh with setting dirty - emit
 | ||||||
|  |       queryList.setDirty(); | ||||||
|  |       qR(queryList); | ||||||
|  |       expect(changes).toBe(2); | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user