mapcomplete/UI/Base/LazyElement.ts

36 lines
966 B
TypeScript
Raw Permalink Normal View History

2020-12-05 03:22:17 +01:00
import {UIElement} from "../UIElement";
export default class LazyElement extends UIElement {
2020-12-05 03:22:17 +01:00
public Activate: () => void;
private _content: UIElement = undefined;
2021-01-25 03:12:09 +01:00
private readonly _loadingContent: string;
2020-12-05 03:22:17 +01:00
constructor(content: (() => UIElement), loadingContent = "Rendering...") {
2020-12-05 03:22:17 +01:00
super();
this._loadingContent = loadingContent;
2020-12-05 03:22:17 +01:00
this.dumbMode = false;
const self = this;
this.Activate = () => {
2020-12-05 03:22:17 +01:00
if (this._content === undefined) {
self._content = content();
}
self.Update();
// @ts-ignore
2021-03-09 13:10:48 +01:00
if (this._content.Activate) {
// THis is ugly - I know
// @ts-ignore
this._content.Activate();
}
2020-12-05 03:22:17 +01:00
}
}
InnerRender(): string {
if (this._content === undefined) {
return this._loadingContent;
2020-12-05 03:22:17 +01:00
}
2021-01-25 04:21:22 +01:00
return this._content.Render();
2020-12-05 03:22:17 +01:00
}
}