diff --git a/src/lib/components/PaginationTable/PaginationTableBody.svelte b/src/lib/components/PaginationTable/PaginationTableBody.svelte index 3422ea9..e6498d5 100644 --- a/src/lib/components/PaginationTable/PaginationTableBody.svelte +++ b/src/lib/components/PaginationTable/PaginationTableBody.svelte @@ -6,21 +6,6 @@ let bodyElem: HTMLTableSectionElement; let intersectionElem: HTMLElement; - async function onUpdateProxy() { - let scrollElem: HTMLElement | null = bodyElem; - while (scrollElem && scrollElem.scrollHeight <= scrollElem.clientHeight) { - scrollElem = scrollElem.parentElement; - } - - const scrollTop = scrollElem?.scrollTop ?? 0; - - await onUpdate(); - - if (scrollElem) scrollElem.scrollTop = scrollTop; - - await tick(); - } - async function getIntersectionElement(): Promise { if (!bodyElem.lastElementChild) { await new Promise((resolve) => { @@ -36,7 +21,8 @@ } onMount(async () => { - await onUpdateProxy(); + await onUpdate(); + await tick(); if (!bodyElem) return; @@ -47,7 +33,8 @@ const rows = bodyElem.rows.length; - await onUpdateProxy(); + await onUpdate(); + await tick(); if (rows === bodyElem.rows.length) return; observer.observe((intersectionElem = await getIntersectionElement())); diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte index 3698d4b..4372931 100644 --- a/src/routes/admin/+layout.svelte +++ b/src/routes/admin/+layout.svelte @@ -82,7 +82,7 @@ let pageTitleSuffix = $derived( tabs.find((t) => $page.url.pathname === t.path)?.name ?? - ($page.url.pathname === `${env.PUBLIC_BASE_PATH}/admin/login` ? 'Login' : null) + ($page.url.pathname === `${env.PUBLIC_BASE_PATH}/admin/login` ? 'Login' : null) ); @@ -133,7 +133,7 @@
{#key $page.url.pathname}
{:else} -
+
{@render children()}
{/if} diff --git a/src/routes/admin/feedback/+page.svelte b/src/routes/admin/feedback/+page.svelte index 961ebe8..66f3818 100644 --- a/src/routes/admin/feedback/+page.svelte +++ b/src/routes/admin/feedback/+page.svelte @@ -66,67 +66,65 @@ onUpdate={() => fetchFeedback({ from: 0 }).then((r) => (feedbacks = r))} />
-
- - - - - - - - - - - - await fetchFeedback().then((feedback) => (feedbacks = [...feedbacks, ...feedback]))} - > - {#each feedbacks as feedback} - { - await goto(`${window.location.href.split('#')[0]}#${feedback.url_hash}`, { - replaceState: true - }); - await openHashReport(); - }} +
EventTitelNutzerDatumInhalt
+ + + + + + + + + + + await fetchFeedback().then((feedback) => (feedbacks = [...feedbacks, ...feedback]))} + > + {#each feedbacks as feedback} + { + await goto(`${window.location.href.split('#')[0]}#${feedback.url_hash}`, { + replaceState: true + }); + await openHashReport(); + }} + > + + + + - - - - - - - {/each} - -
EventTitelNutzerDatumInhalt
{feedback.event}{feedback.title} + {feedback.user?.username || ''} + {#if feedback.user} + + {/if} + {new Intl.DateTimeFormat('de-DE', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit' + }).format(new Date(feedback.updatedAt))} Uhr{feedback.event}{feedback.title} - {feedback.user?.username || ''} - {#if feedback.user} - - {/if} - {new Intl.DateTimeFormat('de-DE', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit' - }).format(new Date(feedback.updatedAt))} Uhr{feedback.content}{feedback.content_stripped ? '...' : ''}
-
+ {feedback.content}{feedback.content_stripped ? '...' : ''} + + {/each} + +
{#if activeFeedback}

-
- - - - - - - - - - - - - - - - - - - - - await fetchReports().then((res) => (reports = [...reports, ...res.reports]))} - > - {#each reports as report} - { - goto(`${window.location.href.split('#')[0]}#${report.url_hash}`, { - replaceState: true - }); - activeReport = $state.snapshot(report); - activeReport.originalStatus = report.status; - }} - > - - + + + + + {/each} + +
GrundErstellerReporteter UserDatumBearbeitungsstatusReportstatus
{report.subject}
- {report.reporter.username} + + + + + + + + + + + + + + + + + + + + + await fetchReports().then((res) => (reports = [...reports, ...res.reports]))} + > + {#each reports as report} + { + goto(`${window.location.href.split('#')[0]}#${report.url_hash}`, { + replaceState: true + }); + activeReport = $state.snapshot(report); + activeReport.originalStatus = report.status; + }} + > + + + - - - - - - {/each} - -
GrundErstellerReporteter UserDatumBearbeitungsstatusReportstatus
{report.subject}
+ {report.reporter.username} + + + {report.reported?.username || ''} + {#if report.reported?.id} - - {report.reported?.username || ''} - {#if report.reported?.id} - - {/if} - {new Intl.DateTimeFormat('de-DE', { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit' - }).format(new Date(report.createdAt))} Uhr - {report.status === 'none' - ? 'Unbearbeitet' - : report.status === 'review' - ? 'In Bearbeitung' - : report.status === 'reviewed' - ? 'Bearbeitet' - : ''} - {report.draft ? 'Entwurf' : 'Erstellt'}
- + {/if} +
{new Intl.DateTimeFormat('de-DE', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit' + }).format(new Date(report.createdAt))} Uhr + {report.status === 'none' + ? 'Unbearbeitet' + : report.status === 'review' + ? 'In Bearbeitung' + : report.status === 'reviewed' + ? 'Bearbeitet' + : ''} + {report.draft ? 'Entwurf' : 'Erstellt'}
{#if activeReport}
UnbearbeitetUnbearbeitet diff --git a/src/routes/admin/users/+page.svelte b/src/routes/admin/users/+page.svelte index 67169a7..5c404f5 100644 --- a/src/routes/admin/users/+page.svelte +++ b/src/routes/admin/users/+page.svelte @@ -95,19 +95,19 @@
- - - - userFilter = {...userFilter, sort: {key: 'firstname', asc: e.asc}}}>Vorname - userFilter = {...userFilter, sort: {key: 'lastname', asc: e.asc}}}>Nachname - userFilter = {...userFilter, sort: {key: 'birthday', asc: e.asc}}}>Geburtstag - userFilter = {...userFilter, sort: {key: 'telephone', asc: e.asc}}}>Telefon - userFilter = {...userFilter, sort: {key: 'username', asc: e.asc}}}>Username - userFilter = {...userFilter, sort: {key: 'playertype', asc: e.asc}}}>Minecraft Edition - userFilter = {...userFilter, sort: {key: 'password', asc: e.asc}}}>Passwort - userFilter = {...userFilter, sort: {key: 'uuid', asc: e.asc}}}>UUID - - + + + + userFilter = {...userFilter, sort: {key: 'firstname', asc: e.asc}}}>Vorname + userFilter = {...userFilter, sort: {key: 'lastname', asc: e.asc}}}>Nachname + userFilter = {...userFilter, sort: {key: 'birthday', asc: e.asc}}}>Geburtstag + userFilter = {...userFilter, sort: {key: 'telephone', asc: e.asc}}}>Telefon + userFilter = {...userFilter, sort: {key: 'username', asc: e.asc}}}>Username + userFilter = {...userFilter, sort: {key: 'playertype', asc: e.asc}}}>Minecraft Edition + userFilter = {...userFilter, sort: {key: 'password', asc: e.asc}}}>Passwort + userFilter = {...userFilter, sort: {key: 'uuid', asc: e.asc}}}>UUID + + {