Files
rio/frontend/code/components/overlay.ts
2024-11-13 12:05:18 +01:00

50 lines
1.4 KiB
TypeScript

import { getRootComponent } from "../componentManagement";
import { ComponentId } from "../dataModels";
import { ComponentBase, ComponentState } from "./componentBase";
export type OverlayState = ComponentState & {
_type_: "Overlay-builtin";
content?: ComponentId;
};
export class OverlayComponent extends ComponentBase {
declare state: Required<OverlayState>;
private overlayContentElement: HTMLElement;
createElement(): HTMLElement {
let element = document.createElement("div");
element.classList.add("rio-overlay");
this.overlayContentElement = document.createElement("div");
this.overlayContentElement.classList.add("rio-overlay-content");
this.overlayContentElement.dataset.ownerId = `${this.id}`;
requestAnimationFrame(() => {
getRootComponent().overlaysContainer.appendChild(
this.overlayContentElement
);
});
return element;
}
onDestruction(): void {
super.onDestruction();
this.overlayContentElement.remove();
}
updateElement(
deltaState: OverlayState,
latentComponents: Set<ComponentBase>
): void {
super.updateElement(deltaState, latentComponents);
this.replaceOnlyChild(
latentComponents,
deltaState.content,
this.overlayContentElement
);
}
}