From bd1c4f7f4533e9c872c352124c7474b1ea742b45 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 4 Jun 2025 11:33:11 +0200 Subject: [PATCH] feat: Refactor event management components and introduce EventModel for better state handling --- src/components/dashboard/UserInfo.svelte | 34 ++-- .../moderator/components/FightEdit.svelte | 176 +++++++----------- .../moderator/components/GroupSelector.svelte | 103 ++++++++++ .../moderator/pages/event/Event.svelte | 25 ++- .../pages/event/EventFightList.svelte | 78 ++++++-- .../moderator/pages/event/EventView.svelte | 6 +- .../moderator/pages/event/TeamTable.svelte | 18 +- .../pages/event/eventmodel.svelte.ts | 21 +++ .../moderator/pages/pages/page.svelte.ts | 4 +- 9 files changed, 301 insertions(+), 164 deletions(-) create mode 100644 src/components/moderator/components/GroupSelector.svelte create mode 100644 src/components/moderator/pages/event/eventmodel.svelte.ts diff --git a/src/components/dashboard/UserInfo.svelte b/src/components/dashboard/UserInfo.svelte index aeb8a20..024a585 100644 --- a/src/components/dashboard/UserInfo.svelte +++ b/src/components/dashboard/UserInfo.svelte @@ -18,19 +18,19 @@ -->
@@ -175,19 +166,34 @@ No team found. - { - fightBlueTeam = { - id: -1, - name: "?", - color: "7", - kuerzel: "?", - }; - blueTeamSelectOpen = false; - }} - keywords={["?"]}>??? + + { + fightBlueTeam = { + id: -1, + name: "?", + color: "7", + kuerzel: "?", + }; + blueTeamSelectOpen = false; + }} + keywords={["?"]}>??? + { + fightBlueTeam = { + id: 0, + name: "Public", + color: "7", + kuerzel: "PUB", + }; + blueTeamSelectOpen = false; + }} + keywords={["PUB", "Public"]}>PUB + {#each teams as team} - + {team.name} {/each} @@ -221,19 +227,34 @@ No team found. - { - fightRedTeam = { - id: -1, - name: "?", - color: "7", - kuerzel: "?", - }; - redTeamSelectOpen = false; - }} - keywords={["?"]}>??? + + { + fightRedTeam = { + id: -1, + name: "?", + color: "7", + kuerzel: "?", + }; + redTeamSelectOpen = false; + }} + keywords={["?"]}>??? + { + fightRedTeam = { + id: 0, + name: "Public", + color: "7", + kuerzel: "PUB", + }; + redTeamSelectOpen = false; + }} + keywords={["PUB", "Public"]}>PUB + {#each teams as team} - + {team.name} {/each} @@ -269,74 +290,7 @@ {/if} - - - - {#snippet child({ props })} - - {/snippet} - - - - - - - (createOpen = true)}> - - Neue Gruppe - - - - { - fightGroup = null; - groupSelectOpen = false; - }} - > - {#if fightGroup === null} - - {:else} - - {/if} - Keine Gruppe - - - {#each groups as group} - { - fightGroup = group.id; - groupSelectOpen = false; - }} - > - - {group.name} - - {/each} - - - - - - - - - Neue Gruppe erstellen - Hier kannst du eine neue Gruppe erstellen - - - {#snippet actions(dirty, submit)} - - - - {/snippet} - - - +
diff --git a/src/components/moderator/components/GroupSelector.svelte b/src/components/moderator/components/GroupSelector.svelte new file mode 100644 index 0000000..f4fe463 --- /dev/null +++ b/src/components/moderator/components/GroupSelector.svelte @@ -0,0 +1,103 @@ + + + + + + {#snippet child({ props })} + + {/snippet} + + + + + + + (createOpen = true)}> + + Neue Gruppe + + + + { + value = null; + groupSelectOpen = false; + }} + > + {#if value === null} + + {:else} + + {/if} + Keine Gruppe + + + {#each groups as group} + { + value = group.id; + groupSelectOpen = false; + }} + > + + {group.name} + + {/each} + + + + + + + + + Neue Gruppe erstellen + Hier kannst du eine neue Gruppe erstellen + + + {#snippet actions(dirty, submit)} + + + + {/snippet} + + + diff --git a/src/components/moderator/pages/event/Event.svelte b/src/components/moderator/pages/event/Event.svelte index b9b8cf5..273e42c 100644 --- a/src/components/moderator/pages/event/Event.svelte +++ b/src/components/moderator/pages/event/Event.svelte @@ -18,8 +18,11 @@ --> -{#await event} +{#if loaded} + +{:else}

Loading...

-{:then data} - -{/await} \ No newline at end of file +{/if} diff --git a/src/components/moderator/pages/event/EventFightList.svelte b/src/components/moderator/pages/event/EventFightList.svelte index ab99fd3..0aa8e7e 100644 --- a/src/components/moderator/pages/event/EventFightList.svelte +++ b/src/components/moderator/pages/event/EventFightList.svelte @@ -20,7 +20,7 @@ @@ -146,19 +146,53 @@ {#if selectedGroup} - + {/if} {#if selectedGroupForResults} - + {/if} + + + + Gruppe Ändern + Hier kannst du die Gruppe der ausgewählten Kämpfe ändern + + + + + + + +
Mehrfach Bearbeiten - Gruppe Ändern + (groupChangeOpen = true)}>Gruppe Ändern Startzeit Verschieben Spectate Port Ändern @@ -175,9 +209,9 @@ - Gruppen + Gruppen - {#each groups as group (group.id)} + {#each data.groups as group (group.id)} {group.name} @@ -191,7 +225,7 @@ - +
@@ -205,13 +239,14 @@ {/if} {/each} + {/each} {#each table.getRowModel().rows as groupRow (groupRow.id)} {#if groupRow.getIsGrouped()} - {@const group = groups.find((g) => g.id == groupRow.getValue("group"))} + {@const group = data.groups.find((g) => g.id == groupRow.getValue("group"))} {/each} - (fights = fights.map((v) => (v.id === update.id ? update : v)))} + (data.fights = data.fights.map((v) => (v.id === update.id ? update : v)))} > diff --git a/src/components/moderator/pages/event/EventView.svelte b/src/components/moderator/pages/event/EventView.svelte index d396b90..0b6bedd 100644 --- a/src/components/moderator/pages/event/EventView.svelte +++ b/src/components/moderator/pages/event/EventView.svelte @@ -18,13 +18,13 @@ -->
@@ -42,5 +42,5 @@
- + diff --git a/src/components/moderator/pages/event/TeamTable.svelte b/src/components/moderator/pages/event/TeamTable.svelte index 5f06d78..14463f8 100644 --- a/src/components/moderator/pages/event/TeamTable.svelte +++ b/src/components/moderator/pages/event/TeamTable.svelte @@ -25,21 +25,19 @@ import { Popover, PopoverContent, PopoverTrigger } from "@components/ui/popover"; import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@components/ui/command"; import { teams } from "@components/stores/stores"; + import type { Team } from "@components/types/team"; + import type { EventModel } from "./eventmodel.svelte"; - const { event = $bindable() }: { event: ExtendedEvent } = $props(); - - let team = $state(event.teams); + let { event = $bindable() }: { event: EventModel } = $props(); async function addTeam(value: number) { await $eventRepo.updateTeams(event.event.id.toString(), [value]); - team = await $eventRepo.listTeams(event.event.id.toString()); - event.teams = team; + event.teams = await $eventRepo.listTeams(event.event.id.toString()); } async function removeTeam(value: number) { await $eventRepo.deleteTeams(event.event.id.toString(), [value]); - team = await $eventRepo.listTeams(event.event.id.toString()); - event.teams = team; + event.teams = await $eventRepo.listTeams(event.event.id.toString()); } let teamSearch = $state(""); @@ -54,7 +52,7 @@ - {#each team as t (t.id)} + {#each event.teams as t (t.id)} {t.kuerzel} {t.name} @@ -63,7 +61,7 @@ {/each} - {#if team.length === 0} + {#if event.teams.length === 0} No teams available @@ -83,7 +81,7 @@ {#each $teams .filter((v) => v.name.includes(teamSearch)) - .filter((v) => !team.some((k) => k.id === v.id)) + .filter((v) => !event.teams.some((k) => k.id === v.id)) .filter((v, i) => i < 50) as t (t.id)} addTeam(t.id)} keywords={[t.name, t.kuerzel]}>{t.name} {/each} diff --git a/src/components/moderator/pages/event/eventmodel.svelte.ts b/src/components/moderator/pages/event/eventmodel.svelte.ts new file mode 100644 index 0000000..731fbc3 --- /dev/null +++ b/src/components/moderator/pages/event/eventmodel.svelte.ts @@ -0,0 +1,21 @@ +import type { ResponseUser } from "@components/repo/event"; +import type { EventFight, ExtendedEvent, ResponseGroups, ResponseRelation, SWEvent } from "@components/types/event"; +import type { Team } from "@components/types/team"; + +export class EventModel { + public event: SWEvent = $state({} as SWEvent); + public teams: Array = $state([]); + public groups: Array = $state([]); + public fights: Array = $state([]); + public referees: Array = $state([]); + public relations: Array = $state([]); + + constructor(data: ExtendedEvent) { + this.event = data.event; + this.teams = data.teams; + this.groups = data.groups; + this.fights = data.fights; + this.referees = data.referees; + this.relations = data.relations; + } +} diff --git a/src/components/moderator/pages/pages/page.svelte.ts b/src/components/moderator/pages/pages/page.svelte.ts index dca0162..1487f77 100644 --- a/src/components/moderator/pages/pages/page.svelte.ts +++ b/src/components/moderator/pages/pages/page.svelte.ts @@ -38,7 +38,9 @@ export class OpenEditPage { } contentToSave += this.content; const encodedContent = btoa(new TextEncoder().encode(contentToSave).reduce((data, byte) => data + String.fromCharCode(byte), "")); - await get(pageRepo).updatePage(this.pageId, this.sha, encodedContent, this.manager.branch); + + console.log(encodedContent); + //await get(pageRepo).updatePage(this.pageId, this.sha, encodedContent, this.manager.branch); this.dirty = false; this.manager.reloadImages(); }