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()
 | 
						|
    }
 | 
						|
 | 
						|
} |