forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			27 lines
		
	
	
		
			No EOL
		
	
	
		
			821 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			No EOL
		
	
	
		
			821 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import BaseUIElement from "../BaseUIElement";
 | |
| import {VariableUiElement} from "./VariableUIElement";
 | |
| import {UIEventSource} from "../../Logic/UIEventSource";
 | |
| import Loading from "./Loading";
 | |
| 
 | |
| export default class AsyncLazy extends BaseUIElement {
 | |
|     private readonly _f: () => Promise<BaseUIElement>;
 | |
| 
 | |
|     constructor(f: () => Promise<BaseUIElement>) {
 | |
|         super();
 | |
|         this._f = f;
 | |
|     }
 | |
| 
 | |
|     protected InnerConstructElement(): HTMLElement {
 | |
|         // The caching of the BaseUIElement will guarantee that _f will only be called once
 | |
| 
 | |
|         return new VariableUiElement(
 | |
|             UIEventSource.FromPromise(this._f()).map(el => {
 | |
|                 if (el === undefined) {
 | |
|                     return new Loading()
 | |
|                 }
 | |
|                 return el
 | |
|             })
 | |
|         ).ConstructElement()
 | |
|     }
 | |
| 
 | |
| } |