forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			26 lines
		
	
	
	
		
			821 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
	
		
			821 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import BaseUIElement from "../BaseUIElement"
 | 
						|
import { VariableUiElement } from "./VariableUIElement"
 | 
						|
import { Stores, 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(
 | 
						|
            Stores.FromPromise(this._f()).map((el) => {
 | 
						|
                if (el === undefined) {
 | 
						|
                    return new Loading()
 | 
						|
                }
 | 
						|
                return el
 | 
						|
            })
 | 
						|
        ).ConstructElement()
 | 
						|
    }
 | 
						|
}
 |