Refactor event handling to use Promises for better efficiency.
All checks were successful
SteamWarCI Build successful

This commit is contained in:
2025-02-23 12:25:56 +01:00
parent a23c514102
commit c3410de1d7

View File

@ -111,15 +111,13 @@ const ogImage = await getImage({
import type {ExtendedEvent} from "@type/event"; import type {ExtendedEvent} from "@type/event";
import {mount} from "svelte"; import {mount} from "svelte";
const eventMounts: Map<string, ((ev: ExtendedEvent) => void)[]> = new Map(); const eventMounts: Map<string, Promise<ExtendedEvent>> = new Map();
class FightTableElement extends HTMLElement { class FightTableElement extends HTMLElement {
connectedCallback(): void { connectedCallback(): void {
if (!eventMounts.has(this.dataset["event"]!)) { loadEvent(this.dataset["event"]!);
eventMounts.set(this.dataset["event"]!, []);
}
const rows = Number.parseInt(this.dataset["rows"]!); const rows = Number.parseInt(this.dataset["rows"]!);
eventMounts.get(this.dataset["event"]!)!.push(ev => { eventMounts.get(this.dataset["event"]!)!.then(ev => {
mount(FightTable, { mount(FightTable, {
target: this, target: this,
props: { props: {
@ -134,11 +132,9 @@ const ogImage = await getImage({
class GroupTableElement extends HTMLElement { class GroupTableElement extends HTMLElement {
connectedCallback(): void { connectedCallback(): void {
if (!eventMounts.has(this.dataset["event"]!)) { loadEvent(this.dataset["event"]!);
eventMounts.set(this.dataset["event"]!, []);
}
const rows = Number.parseInt(this.dataset["rows"]!); const rows = Number.parseInt(this.dataset["rows"]!);
eventMounts.get(this.dataset["event"]!)!.push(ev => { eventMounts.get(this.dataset["event"]!)!.then(ev => {
mount(GroupTable, { mount(GroupTable, {
target: this, target: this,
props: { props: {
@ -154,17 +150,12 @@ const ogImage = await getImage({
customElements.define("fight-table", FightTableElement); customElements.define("fight-table", FightTableElement);
customElements.define("group-table", GroupTableElement); customElements.define("group-table", GroupTableElement);
function mountEvent() { function loadEvent(id: string) {
for (const key of eventMounts.keys()) { if (!eventMounts.has(id)) {
get(eventRepo).getEvent(key).then(ev => { eventMounts.set(id, get(eventRepo).getEvent(id));
for (const mount of eventMounts.get(key)!) {
mount(ev);
}
});
} }
} }
document.addEventListener("astro:page-load", mountEvent);
document.addEventListener("astro:before-swap", eventMounts.clear); document.addEventListener("astro:before-swap", eventMounts.clear);
</script> </script>
</article> </article>