26 lines
		
	
	
		
			461 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			26 lines
		
	
	
		
			461 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								// #docregion
							 | 
						||
| 
								 | 
							
								export class RestoreService<T> {
							 | 
						||
| 
								 | 
							
								  originalItem: T;
							 | 
						||
| 
								 | 
							
								  currentItem: T;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  setItem (item: T) {
							 | 
						||
| 
								 | 
							
								    this.originalItem = item;
							 | 
						||
| 
								 | 
							
								    this.currentItem = this.clone(item);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  getItem () :T {
							 | 
						||
| 
								 | 
							
								    return this.currentItem;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  restoreItem () :T {
							 | 
						||
| 
								 | 
							
								    this.currentItem = this.originalItem;
							 | 
						||
| 
								 | 
							
								    return this.getItem();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  clone (item: T) :T {
							 | 
						||
| 
								 | 
							
								    // super poor clone implementation
							 | 
						||
| 
								 | 
							
								    return JSON.parse(JSON.stringify(item));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								// #enddocregion
							 |