From e47268111a9fdcb944ce6d83f28f833c5a01bb84 Mon Sep 17 00:00:00 2001 From: bytedream Date: Wed, 21 May 2025 17:22:20 +0200 Subject: [PATCH] refactor admin crud popups --- src/app/admin/admins/Admins.svelte | 103 ++++--- src/app/admin/admins/Badges.svelte | 50 ---- src/app/admin/admins/CreateOrEditPopup.svelte | 115 -------- src/app/admin/admins/SidebarActions.svelte | 54 ++-- .../admin/admins/{actions.ts => admins.ts} | 13 +- src/app/admin/admins/state.ts | 4 - src/app/admin/admins/types.ts | 4 - src/app/admin/feedback/BottomBar.svelte | 4 +- src/app/admin/feedback/Feedback.svelte | 47 ++-- .../feedback/{actions.ts => feedback.ts} | 12 +- src/app/admin/feedback/state.ts | 4 - src/app/admin/feedback/types.ts | 4 - src/app/admin/reports/BottomBar.svelte | 4 +- src/app/admin/reports/CreatePopup.svelte | 97 ------- src/app/admin/reports/Reports.svelte | 46 +--- src/app/admin/reports/SidebarActions.svelte | 50 +++- .../admin/reports/{actions.ts => reports.ts} | 23 +- src/app/admin/reports/state.ts | 4 - src/app/admin/reports/types.ts | 14 - src/app/admin/teams/CreateOrEditPopup.svelte | 117 -------- src/app/admin/teams/SidebarActions.svelte | 62 +++-- src/app/admin/teams/Teams.svelte | 125 +++++---- src/app/admin/teams/state.ts | 4 - src/app/admin/teams/{actions.ts => teams.ts} | 15 +- src/app/admin/teams/types.ts | 6 - src/app/admin/users/CreateOrEditPopup.svelte | 95 ------- src/app/admin/users/SidebarActions.svelte | 44 ++- src/app/admin/users/Users.svelte | 100 ++++--- src/app/admin/users/state.ts | 6 - src/app/admin/users/types.ts | 9 - src/app/admin/users/{actions.ts => users.ts} | 13 +- .../usersBlocked/CreateOrEditPopup.svelte | 101 ------- .../admin/usersBlocked/SidebarActions.svelte | 35 ++- .../admin/usersBlocked/UsersBlocked.svelte | 78 +++--- src/app/admin/usersBlocked/state.ts | 6 - src/app/admin/usersBlocked/types.ts | 9 - .../{actions.ts => usersBlocked.ts} | 17 +- src/components/admin/popup/CrudPopup.svelte | 255 ++++++++++++++++++ src/components/admin/search/Search.svelte | 6 +- src/components/admin/table/DataTable.svelte | 73 +++++ src/components/admin/table/SortableTr.svelte | 15 +- src/components/input/BitBadge.svelte | 50 ++++ src/db/schema/blockedUser.ts | 4 +- src/db/schema/feedback.ts | 5 +- src/util/objects.ts | 9 + src/util/permissions.ts | 19 +- 46 files changed, 889 insertions(+), 1041 deletions(-) delete mode 100644 src/app/admin/admins/Badges.svelte delete mode 100644 src/app/admin/admins/CreateOrEditPopup.svelte rename src/app/admin/admins/{actions.ts => admins.ts} (73%) delete mode 100644 src/app/admin/admins/state.ts delete mode 100644 src/app/admin/admins/types.ts rename src/app/admin/feedback/{actions.ts => feedback.ts} (50%) delete mode 100644 src/app/admin/feedback/state.ts delete mode 100644 src/app/admin/feedback/types.ts delete mode 100644 src/app/admin/reports/CreatePopup.svelte rename src/app/admin/reports/{actions.ts => reports.ts} (72%) delete mode 100644 src/app/admin/reports/state.ts delete mode 100644 src/app/admin/reports/types.ts delete mode 100644 src/app/admin/teams/CreateOrEditPopup.svelte delete mode 100644 src/app/admin/teams/state.ts rename src/app/admin/teams/{actions.ts => teams.ts} (67%) delete mode 100644 src/app/admin/teams/types.ts delete mode 100644 src/app/admin/users/CreateOrEditPopup.svelte delete mode 100644 src/app/admin/users/state.ts delete mode 100644 src/app/admin/users/types.ts rename src/app/admin/users/{actions.ts => users.ts} (79%) delete mode 100644 src/app/admin/usersBlocked/CreateOrEditPopup.svelte delete mode 100644 src/app/admin/usersBlocked/state.ts delete mode 100644 src/app/admin/usersBlocked/types.ts rename src/app/admin/usersBlocked/{actions.ts => usersBlocked.ts} (62%) create mode 100644 src/components/admin/popup/CrudPopup.svelte create mode 100644 src/components/admin/table/DataTable.svelte create mode 100644 src/components/input/BitBadge.svelte create mode 100644 src/util/objects.ts diff --git a/src/app/admin/admins/Admins.svelte b/src/app/admin/admins/Admins.svelte index 9db95ec..181ebc6 100644 --- a/src/app/admin/admins/Admins.svelte +++ b/src/app/admin/admins/Admins.svelte @@ -1,63 +1,52 @@ -
- - - - - - - - - - - {#each $admins as admin, i (admin)} - - - - - - - {/each} - -
#BenutzernameBerechtigungen
{i + 1}{admin.username} - - - -
-
+{#snippet permissionsBadge(permissions: number)} + +{/snippet} -{#key editAdminPopupAdmin} - -{/key} + (editPopupAdmin = admin)} +/> + + v || null } } + ], + [ + { + key: 'permissions', + type: 'bit-badge', + label: 'Berechtigungen', + default: 0, + options: { available: Permissions.asOptions() } + } + ] + ]} + onSubmit={editAdmin} + bind:open={editPopupOpen} +/> diff --git a/src/app/admin/admins/Badges.svelte b/src/app/admin/admins/Badges.svelte deleted file mode 100644 index e6c268a..0000000 --- a/src/app/admin/admins/Badges.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - -
- {#if onUpdate} - - {/if} -
- {#each reactiveSet as badge (badge)} -
- {#if onUpdate} - - {/if} - {available[badge]} -
- {/each} -
-
diff --git a/src/app/admin/admins/CreateOrEditPopup.svelte b/src/app/admin/admins/CreateOrEditPopup.svelte deleted file mode 100644 index 93ae2fa..0000000 --- a/src/app/admin/admins/CreateOrEditPopup.svelte +++ /dev/null @@ -1,115 +0,0 @@ - - - setTimeout(() => onClose?.(), 300)}> - - - diff --git a/src/app/admin/admins/SidebarActions.svelte b/src/app/admin/admins/SidebarActions.svelte index 2701736..09fbfcd 100644 --- a/src/app/admin/admins/SidebarActions.svelte +++ b/src/app/admin/admins/SidebarActions.svelte @@ -1,34 +1,48 @@
-
-{#key newTeamPopupOpen} - (newTeamPopupOpen = false)} - /> -{/key} + diff --git a/src/app/admin/admins/actions.ts b/src/app/admin/admins/admins.ts similarity index 73% rename from src/app/admin/admins/actions.ts rename to src/app/admin/admins/admins.ts index 58b945e..d32a427 100644 --- a/src/app/admin/admins/actions.ts +++ b/src/app/admin/admins/admins.ts @@ -1,8 +1,15 @@ -import type { Admin } from './types.ts'; -import { actions } from 'astro:actions'; -import { admins } from './state.ts'; +import { type ActionReturnType, actions } from 'astro:actions'; +import { writable } from 'svelte/store'; import { actionErrorPopup } from '@util/action.ts'; +// types +export type Admins = Exclude['data'], undefined>['admins']; +export type Admin = Admins[0]; + +// state +export const admins = writable([]); + +// actions export async function fetchAdmins() { const { data, error } = await actions.admin.admins(); if (error) { diff --git a/src/app/admin/admins/state.ts b/src/app/admin/admins/state.ts deleted file mode 100644 index 2a28ea8..0000000 --- a/src/app/admin/admins/state.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { Admin } from './types.ts'; -import { writable } from 'svelte/store'; - -export const admins = writable([]); diff --git a/src/app/admin/admins/types.ts b/src/app/admin/admins/types.ts deleted file mode 100644 index b27e4e3..0000000 --- a/src/app/admin/admins/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ActionReturnType, actions } from 'astro:actions'; - -export type Admins = Exclude['data'], undefined>['admins']; -export type Admin = Admins[0]; diff --git a/src/app/admin/feedback/BottomBar.svelte b/src/app/admin/feedback/BottomBar.svelte index f7f2586..e1521d2 100644 --- a/src/app/admin/feedback/BottomBar.svelte +++ b/src/app/admin/feedback/BottomBar.svelte @@ -1,7 +1,7 @@ -
- - - - # - Event - Nutzer - Datum - Inhalt - - - - {#each $feedbacks as feedback, i (feedback.id)} - (activeFeedback = feedback)}> - - - - - - - {/each} - -
{i + 1}{feedback.event}{feedback.user?.username}{dateFormat.format(new Date(feedback.lastChanged))}{feedback.content}
-
+{#snippet date(value: string)} + {dateFormat.format(new Date(value))} +{/snippet} + + (activeFeedback = feedback)} +/> diff --git a/src/app/admin/feedback/actions.ts b/src/app/admin/feedback/feedback.ts similarity index 50% rename from src/app/admin/feedback/actions.ts rename to src/app/admin/feedback/feedback.ts index 306a96c..dc25886 100644 --- a/src/app/admin/feedback/actions.ts +++ b/src/app/admin/feedback/feedback.ts @@ -1,7 +1,15 @@ -import { actions } from 'astro:actions'; -import { feedbacks } from './state.ts'; +import { type ActionReturnType, actions } from 'astro:actions'; +import { writable } from 'svelte/store'; import { actionErrorPopup } from '@util/action.ts'; +// types +export type Feedbacks = Exclude['data'], undefined>['feedbacks']; +export type Feedback = Feedbacks[0]; + +// state +export const feedbacks = writable([]); + +// actions export async function fetchFeedbacks(reporter?: string | null, reported?: string | null) { const { data, error } = await actions.feedback.feedbacks({ reporter: reporter, reported: reported }); if (error) { diff --git a/src/app/admin/feedback/state.ts b/src/app/admin/feedback/state.ts deleted file mode 100644 index 583752e..0000000 --- a/src/app/admin/feedback/state.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { writable } from 'svelte/store'; -import type { Feedbacks } from './types.ts'; - -export const feedbacks = writable([]); diff --git a/src/app/admin/feedback/types.ts b/src/app/admin/feedback/types.ts deleted file mode 100644 index ce327f9..0000000 --- a/src/app/admin/feedback/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -import type { ActionReturnType, actions } from 'astro:actions'; - -export type Feedbacks = Exclude['data'], undefined>['feedbacks']; -export type Feedback = Feedbacks[0]; diff --git a/src/app/admin/reports/BottomBar.svelte b/src/app/admin/reports/BottomBar.svelte index 06fcd4f..5d2cfee 100644 --- a/src/app/admin/reports/BottomBar.svelte +++ b/src/app/admin/reports/BottomBar.svelte @@ -1,10 +1,10 @@ - - setTimeout(() => onClose?.(), 300)}> -