91 lines
3.2 KiB
Svelte
91 lines
3.2 KiB
Svelte
<script lang="ts">
|
|
import type { EventFight, EventFightEdit, ResponseGroups, SWEvent } from "@type/event";
|
|
import { Button } from "@components/ui/button";
|
|
import { EditIcon, CopyIcon } from "lucide-svelte";
|
|
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from "@components/ui/dialog";
|
|
import FightEdit from "@components/moderator/components/FightEdit.svelte";
|
|
import type { Team } from "@components/types/team";
|
|
import { fightRepo } from "@components/repo/fight";
|
|
import { eventRepo } from "@components/repo/event";
|
|
|
|
let {
|
|
fight,
|
|
teams,
|
|
groups = $bindable(),
|
|
event,
|
|
onupdate,
|
|
refresh,
|
|
}: { fight: EventFight; teams: Team[]; groups: ResponseGroups[]; event: SWEvent; onupdate: (update: EventFight) => void; refresh: () => void } = $props();
|
|
|
|
let editOpen = $state(false);
|
|
let duplicateOpen = $state(false);
|
|
|
|
async function handleSave(fightData: EventFightEdit) {
|
|
let f = await $fightRepo.updateFight(event.id, fight.id, {
|
|
...fightData,
|
|
blueTeam: fightData.blueTeam.id,
|
|
redTeam: fightData.redTeam.id,
|
|
group: fightData.group ?? -1,
|
|
});
|
|
|
|
onupdate(f);
|
|
|
|
editOpen = false;
|
|
}
|
|
|
|
async function handlyCopy(fightData: EventFightEdit) {
|
|
await $eventRepo.createFight(event.id.toString(), {
|
|
...fightData,
|
|
blueTeam: fightData.blueTeam.id,
|
|
redTeam: fightData.redTeam.id,
|
|
});
|
|
|
|
refresh();
|
|
|
|
duplicateOpen = false;
|
|
}
|
|
</script>
|
|
|
|
<div>
|
|
<Dialog bind:open={editOpen}>
|
|
<DialogTrigger>
|
|
<Button variant="ghost" size="icon">
|
|
<EditIcon />
|
|
</Button>
|
|
</DialogTrigger>
|
|
<DialogContent>
|
|
<DialogHeader>
|
|
<DialogTitle>Fight bearbeiten</DialogTitle>
|
|
<DialogDescription>Hier kannst du die Daten des Kampfes bearbeiten.</DialogDescription>
|
|
</DialogHeader>
|
|
<FightEdit {fight} {teams} bind:groups {event} onSave={handleSave}>
|
|
{#snippet actions(dirty, submit)}
|
|
<DialogFooter>
|
|
<Button disabled={!dirty} onclick={submit}>Speichern</Button>
|
|
</DialogFooter>
|
|
{/snippet}
|
|
</FightEdit>
|
|
</DialogContent>
|
|
</Dialog>
|
|
<Dialog bind:open={duplicateOpen}>
|
|
<DialogTrigger>
|
|
<Button variant="ghost" size="icon">
|
|
<CopyIcon />
|
|
</Button>
|
|
</DialogTrigger>
|
|
<DialogContent>
|
|
<DialogHeader>
|
|
<DialogTitle>Fight duplizieren</DialogTitle>
|
|
<DialogDescription>Hier kannst du die Daten des duplizierten Fights ändern</DialogDescription>
|
|
</DialogHeader>
|
|
<FightEdit {fight} {teams} bind:groups {event} onSave={handlyCopy}>
|
|
{#snippet actions(dirty, submit)}
|
|
<DialogFooter>
|
|
<Button onclick={submit}>Speichern</Button>
|
|
</DialogFooter>
|
|
{/snippet}
|
|
</FightEdit>
|
|
</DialogContent>
|
|
</Dialog>
|
|
</div>
|