refactor admin crud popups
All checks were successful
deploy / build-and-deploy (push) Successful in 23s

This commit is contained in:
2025-05-21 17:22:20 +02:00
parent 8b18623232
commit e47268111a
46 changed files with 889 additions and 1041 deletions

View File

@@ -1,14 +1,14 @@
<script lang="ts">
import Input from '@components/input/Input.svelte';
import Icon from '@iconify/svelte';
import { addTeam, fetchTeams } from './actions.ts';
import CreateOrEditPopup from '@app/admin/teams/CreateOrEditPopup.svelte';
import CrudPopup from '@components/admin/popup/CrudPopup.svelte';
import { addTeam, fetchTeams } from '@app/admin/teams/teams.ts';
// states
let teamNameFilter = $state<string | null>(null);
let memberUsernameFilter = $state<string | null>(null);
let newTeamPopupOpen = $state(false);
let createPopupOpen = $state(false);
// lifecycle
$effect(() => {
@@ -23,21 +23,51 @@
<Input bind:value={memberUsernameFilter} label="Spieler Username" />
</fieldset>
<div class="divider my-1"></div>
<button class="btn btn-soft w-full" onclick={() => (newTeamPopupOpen = true)}>
<button class="btn btn-soft w-full" onclick={() => (createPopupOpen = true)}>
<Icon icon="heroicons:plus-16-solid" />
<span>Neues Team</span>
</button>
</div>
{#key newTeamPopupOpen}
<CreateOrEditPopup
popupTitle="Neues Team"
submitButtonTitle="Team erstellen"
confirmPopupTitle="Team erstellen"
confirmPopupMessage="Bist du sicher, dass du das Team erstellen möchtest?"
team={null}
open={newTeamPopupOpen}
onSubmit={addTeam}
onClose={() => (newTeamPopupOpen = false)}
/>
{/key}
<CrudPopup
texts={{
title: 'Team erstellen',
submitButtonTitle: 'Erstellen',
confirmPopupTitle: 'Team erstellen?',
confirmPopupMessage: 'Sollen das neue Team erstellt werden?'
}}
target={null}
keys={[
[
{ key: 'name', type: 'text', label: 'Name', options: { required: true } },
{ key: 'color', type: 'color', label: 'Farbe', options: { required: true } }
],
[
{
key: 'memberOne',
type: 'user-search',
label: 'Spieler 1',
default: { id: null, username: '' },
options: { required: true, validate: (user) => !!user.username }
},
{
key: 'memberTwo',
type: 'user-search',
label: 'Spieler 2',
default: { id: null, username: '' },
options: { required: true, validate: (user) => !!user.username }
}
],
[
{
key: 'lastJoined',
type: 'datetime-local',
label: 'Zuletzt gejoined',
default: null,
options: { convert: (date) => (date ? date : null) }
}
]
]}
onSubmit={addTeam}
bind:open={createPopupOpen}
/>