Compare commits

..

No commits in common. "8a80b0a9e0a687b49f4a08f2f2a3d19182ce52e2" and "56aa3c2673384c97847692ac8e86e8cc0237e655" have entirely different histories.

4 changed files with 13 additions and 45 deletions

View File

@ -5,7 +5,6 @@
export let searchSuggestionFunc: ( export let searchSuggestionFunc: (
input: string input: string
) => Promise<{ name: string; value: string }[]> = () => Promise.resolve([]); ) => Promise<{ name: string; value: string }[]> = () => Promise.resolve([]);
export let invalidMessage: string | null = null;
export let size: 'xs' | 'sm' | 'md' | 'lg' = 'md'; export let size: 'xs' | 'sm' | 'md' | 'lg' = 'md';
export let label: string | null = null; export let label: string | null = null;
export let required = false; export let required = false;
@ -33,26 +32,21 @@
class:input-xs={size === 'xs'} class:input-xs={size === 'xs'}
class:input-sm={size === 'sm'} class:input-sm={size === 'sm'}
class:input-md={size === 'md'} class:input-md={size === 'md'}
class:input-lg={size === 'lg'} class:input-lg={size === 'md'}
{id} {id}
{required} {required}
bind:value={inputValue} bind:value={inputValue}
on:input={(e) => { on:input={() => {
value = ''; value = '';
searchSuggestionFunc(inputValue).then((v) => { searchSuggestionFunc(inputValue).then((v) => {
searchSuggestions = v; searchSuggestions = v;
const searchSuggestion = v.find((v) => v.name === inputValue); let searchSuggestionValue = v.find((v) => v.name === inputValue);
if (searchSuggestion !== undefined) { if (searchSuggestionValue !== undefined) {
inputValue = searchSuggestion.name; value = searchSuggestionValue.value;
value = searchSuggestion.value;
searchSuggestions = []; searchSuggestions = [];
e.target?.setCustomValidity('');
} }
}); });
}} }}
on:invalid={(e) => {
if (invalidMessage != null) e.target?.setCustomValidity(invalidMessage);
}}
pattern={suggestionRequired ? `${value ? inputValue : 'a^'}` : null} pattern={suggestionRequired ? `${value ? inputValue : 'a^'}` : null}
/> />
</div> </div>

View File

@ -146,31 +146,10 @@
class="relative flex flex-col w-2/5 bg-base-200/50 px-4 py-6 overflow-scroll" class="relative flex flex-col w-2/5 bg-base-200/50 px-4 py-6 overflow-scroll"
transition:fly={{ x: 200, duration: 200 }} transition:fly={{ x: 200, duration: 200 }}
> >
<div class="absolute right-2 top-2 flex justify-center"> <button
<form class="dropdown dropdown-end"> class="btn btn-sm btn-circle btn-ghost absolute right-2 top-2"
<!-- svelte-ignore a11y-no-noninteractive-tabindex a11y-label-has-associated-control --> on:click={() => (activeReport = null)}>✕</button
<label tabindex="0" class="btn btn-sm btn-circle btn-ghost text-center"> >
<IconOutline name="share-outline" height="1rem" width="auto" />
</label>
<!-- svelte-ignore a11y-no-noninteractive-tabindex -->
<ul
tabindex="0"
class="dropdown-content z-[1] menu p-2 shadow bg-base-100 rounded-box w-max"
>
<li>
<button
on:click={() =>
navigator.clipboard.writeText(
`${window.location.protocol}//${window.location.host}${env.PUBLIC_BASE_PATH}/report/${activeReport.url_hash}`
)}>Öffentlichen Link kopieren</button
>
</li>
</ul>
</form>
<button class="btn btn-sm btn-circle btn-ghost" on:click={() => (activeReport = null)}
>✕</button
>
</div>
<h3 class="font-roboto font-semibold text-2xl">Report</h3> <h3 class="font-roboto font-semibold text-2xl">Report</h3>
<div class="break-words my-2"> <div class="break-words my-2">
<i class="font-medium">{activeReport.reporter.username}</i> hat <i class="font-medium">{activeReport.reporter.username}</i> hat

View File

@ -58,7 +58,6 @@
size="sm" size="sm"
suggestionRequired={true} suggestionRequired={true}
searchSuggestionFunc={usernameSuggestions} searchSuggestionFunc={usernameSuggestions}
invalidMessage="Es können nur registrierte Spieler Report Autoren sein"
label="Reporter" label="Reporter"
required={true} required={true}
bind:value={reporter} bind:value={reporter}
@ -67,7 +66,6 @@
size="sm" size="sm"
suggestionRequired={true} suggestionRequired={true}
searchSuggestionFunc={usernameSuggestions} searchSuggestionFunc={usernameSuggestions}
invalidMessage="Es können nur registrierte Spieler reportet werden"
label="Reporteter User" label="Reporteter User"
required={true} required={true}
bind:value={reported} bind:value={reported}

View File

@ -20,7 +20,7 @@
let userFilter = { name: null, edition: null }; let userFilter = { name: null, edition: null };
let userTableContainerElement: HTMLDivElement; let userTableContainerElement: HTMLDivElement;
function fetchPageUsers(page: number) { function fetchPageUsers(page: number, filter: any) {
if (!browser) return; if (!browser) return;
if (userTableContainerElement) userTableContainerElement.scrollTop = 0; if (userTableContainerElement) userTableContainerElement.scrollTop = 0;
@ -29,7 +29,7 @@
currentPageUsersRequest = new Promise(async (resolve, reject) => { currentPageUsersRequest = new Promise(async (resolve, reject) => {
const response = await fetch(`${env.PUBLIC_BASE_PATH}/admin/users`, { const response = await fetch(`${env.PUBLIC_BASE_PATH}/admin/users`, {
method: 'POST', method: 'POST',
body: JSON.stringify({ ...userFilter, limit: usersPerPage, from: usersPerPage * page }) body: JSON.stringify({ ...filter, limit: usersPerPage, from: usersPerPage * page })
}); });
if (response.ok) { if (response.ok) {
currentPageUsers = await response.json(); currentPageUsers = await response.json();
@ -40,10 +40,7 @@
}); });
} }
$: fetchPageUsers(userPage); $: fetchPageUsers(userPage, userFilter);
// prettier-ignore
function fetchFilterPageUsers(_: any) { userPage == 0 ? fetchPageUsers(0) : userPage = 0 }
$: fetchFilterPageUsers(userFilter);
let sortKey: string | null = null; let sortKey: string | null = null;
let sortAsc = false; let sortAsc = false;
@ -210,7 +207,7 @@
</table> </table>
<div class="flex justify-center items-center mb-2 mt-4 w-full"> <div class="flex justify-center items-center mb-2 mt-4 w-full">
<div class="join"> <div class="join">
{#each Array(currentPageUsers.length === usersPerPage || userPage > 0 ? Math.ceil(data.count / usersPerPage) || 1 : 1) as _, i} {#each Array(Math.ceil(data.count / usersPerPage) || 1) as _, i}
<button <button
class="join-item btn" class="join-item btn"
class:btn-active={i === userPage} class:btn-active={i === userPage}