mapcomplete/UI/Base/AsyncLazy.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

27 lines
806 B
TypeScript
Raw Normal View History

import BaseUIElement from "../BaseUIElement"
import { VariableUiElement } from "./VariableUIElement"
2023-03-29 17:21:20 +02:00
import { Stores } from "../../Logic/UIEventSource"
import Loading from "./Loading"
2021-11-07 16:34:51 +01:00
export default class AsyncLazy extends BaseUIElement {
private readonly _f: () => Promise<BaseUIElement>
2021-11-07 16:34:51 +01:00
constructor(f: () => Promise<BaseUIElement>) {
super()
this._f = f
}
2021-11-07 16:34:51 +01:00
protected InnerConstructElement(): HTMLElement {
// The caching of the BaseUIElement will guarantee that _f will only be called once
2021-11-07 16:34:51 +01:00
return new VariableUiElement(
Stores.FromPromise(this._f()).map((el) => {
2021-11-07 16:34:51 +01:00
if (el === undefined) {
return new Loading()
}
return el
})
).ConstructElement()
}
}