add user search in admin panel and remove user skeleton while loading data
All checks were successful
delpoy / build-and-deploy (push) Successful in 31s
All checks were successful
delpoy / build-and-deploy (push) Successful in 31s
This commit is contained in:
@ -7,6 +7,7 @@
|
||||
import type { User } from '$lib/server/database';
|
||||
import { buttonTriggeredRequest, resizeTableColumn } from '$lib/components/utils';
|
||||
import { browser } from '$app/environment';
|
||||
import HeaderBar from './HeaderBar.svelte';
|
||||
|
||||
export let data: PageData;
|
||||
|
||||
@ -44,33 +45,24 @@
|
||||
|
||||
let currentPageUsers: (typeof User.prototype.dataValues)[] = [];
|
||||
let currentPageUsersRequest: Promise<void> = new Promise((resolve) => resolve());
|
||||
let usersCache: (typeof User.prototype.dataValues)[][] = [];
|
||||
let usersPerPage = 50;
|
||||
let userPage = 0;
|
||||
let userFilter = { name: null, edition: null };
|
||||
let userTableContainerElement: HTMLDivElement;
|
||||
|
||||
function fetchPageUsers(page: number) {
|
||||
function fetchPageUsers(page: number, filter: any) {
|
||||
if (!browser) return;
|
||||
|
||||
if (userTableContainerElement) userTableContainerElement.scrollTop = 0;
|
||||
|
||||
if (usersCache[page]) {
|
||||
currentPageUsers = usersCache[page];
|
||||
return;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-async-promise-executor
|
||||
currentPageUsersRequest = new Promise(async (resolve, reject) => {
|
||||
const response = await fetch(`${env.PUBLIC_BASE_PATH}/admin/users`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
limit: usersPerPage,
|
||||
from: usersPerPage * page
|
||||
})
|
||||
body: JSON.stringify({ ...filter, limit: usersPerPage, from: usersPerPage * page })
|
||||
});
|
||||
if (response.ok) {
|
||||
const pageUsers = await response.json();
|
||||
currentPageUsers = usersCache[page] = pageUsers;
|
||||
currentPageUsers = await response.json();
|
||||
resolve();
|
||||
} else {
|
||||
reject(Error());
|
||||
@ -97,7 +89,7 @@
|
||||
currentPageUsers = currentPageUsers;
|
||||
}
|
||||
|
||||
$: fetchPageUsers(userPage);
|
||||
$: fetchPageUsers(userPage, userFilter);
|
||||
|
||||
async function updateUser(user: typeof User.prototype.dataValues) {
|
||||
const response = await fetch(`${env.PUBLIC_BASE_PATH}/admin/users`, {
|
||||
@ -129,6 +121,8 @@
|
||||
</script>
|
||||
|
||||
<div>
|
||||
<HeaderBar bind:userFilter />
|
||||
<hr class="divider my-1 mx-8 border-none" />
|
||||
<div class="h-[90vh] overflow-scroll" bind:this={userTableContainerElement}>
|
||||
<table class="table relative">
|
||||
<thead>
|
||||
@ -158,46 +152,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
{#key currentPageUsersRequest}
|
||||
{#await currentPageUsersRequest}
|
||||
{#each Array(usersPerPage) as _, i}
|
||||
<tr class="animate-pulse text-transparent">
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}>{i + 1}</td>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Input type="text" disabled={true} size="sm" /></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Input type="text" disabled={true} size="sm" /></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Input type="date" disabled={true} size="sm" /></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Input type="tel" disabled={true} size="sm" /></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Input type="text" disabled={true} size="sm" /></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Select id="edition" disabled={true} size="sm">
|
||||
<option value="java">Java Edition</option>
|
||||
<option value="bedrock">Bedrock Edition</option>
|
||||
<option value="cracked">Java cracked</option>
|
||||
</Select></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Input type="text" disabled={true} size="sm" /></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><Input type="text" disabled={true} size="sm" /></td
|
||||
>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}
|
||||
><div class="flex gap-1">
|
||||
<button class="btn btn-sm btn-square" disabled />
|
||||
</div></td
|
||||
>
|
||||
</tr>
|
||||
{/each}
|
||||
{:then _}
|
||||
{#await currentPageUsersRequest then _}
|
||||
{#each currentPageUsers as user, i}
|
||||
<tr>
|
||||
<td on:mousedown={(e) => resizeTableColumn(e, 5)}>{i + 1}</td>
|
||||
|
Reference in New Issue
Block a user