feat: improve admin pagination controls
This commit is contained in:
@@ -105,6 +105,10 @@
|
||||
if (index >= 0) backupsPage = Math.floor(index / BACKUPS_PAGE_SIZE);
|
||||
}
|
||||
|
||||
function setBackupsPage(page) {
|
||||
backupsPage = Math.min(Math.max(0, Number(page) || 0), backupsPageCount - 1);
|
||||
}
|
||||
|
||||
function warningsText(warnings) {
|
||||
return (warnings || []).filter(Boolean).join("\n");
|
||||
}
|
||||
@@ -336,12 +340,16 @@
|
||||
{#if totalArchives > BACKUPS_PAGE_SIZE}
|
||||
<AdminPagination
|
||||
meta={paginationMeta()}
|
||||
page={backupsPage}
|
||||
pageCount={backupsPageCount}
|
||||
pageLabel={at("page_short", {}, "Стр.")}
|
||||
ofLabel={at("pagination_of", {}, "из")}
|
||||
jumpLabel={at("page_short", {}, "Стр.")}
|
||||
jumpAriaLabel={at("pagination_jump_aria", {}, "Перейти к странице")}
|
||||
goLabel={at("pagination_go", {}, "Перейти")}
|
||||
prevLabel={at("pagination_prev", {}, "Назад")}
|
||||
nextLabel={at("pagination_next", {}, "Далее")}
|
||||
prevDisabled={backupsPage <= 0}
|
||||
nextDisabled={backupsPage >= backupsPageCount - 1}
|
||||
onPrev={() => (backupsPage = Math.max(0, backupsPage - 1))}
|
||||
onNext={() => (backupsPage = Math.min(backupsPageCount - 1, backupsPage + 1))}
|
||||
onPageChange={setBackupsPage}
|
||||
/>
|
||||
{/if}
|
||||
{/if}
|
||||
|
||||
@@ -15,10 +15,11 @@
|
||||
export let onOpenUserCard = () => {};
|
||||
|
||||
const logsStore = getContext("logsStore");
|
||||
const LOGS_PAGE_SIZE = 50;
|
||||
|
||||
$: ({ logs, logsTotal, logsPage, logsUserFilter, logsLoading } = $logsStore);
|
||||
|
||||
$: logsHasMore = logs.length > 0 && logsTotal > (logsPage + 1) * 50; // 50 is LOGS_PAGE_SIZE
|
||||
$: logsPageCount = Math.max(1, Math.ceil(Number(logsTotal || 0) / LOGS_PAGE_SIZE));
|
||||
$: logHeaders = [
|
||||
at("date", {}, "Дата"),
|
||||
at("event", {}, "Событие"),
|
||||
@@ -165,17 +166,18 @@
|
||||
</div>
|
||||
|
||||
<AdminPagination
|
||||
meta={`${at("page_short", {}, "Стр.")} ${logsPage + 1}`}
|
||||
page={logsPage}
|
||||
pageCount={logsPageCount}
|
||||
total={logsTotal}
|
||||
pageLabel={at("page_short", {}, "Стр.")}
|
||||
ofLabel={at("pagination_of", {}, "из")}
|
||||
totalLabel={at("total", {}, "Всего")}
|
||||
jumpLabel={at("page_short", {}, "Стр.")}
|
||||
jumpAriaLabel={at("pagination_jump_aria", {}, "Перейти к странице")}
|
||||
goLabel={at("pagination_go", {}, "Перейти")}
|
||||
prevLabel={at("back", {}, "Назад")}
|
||||
nextLabel={at("next", {}, "Далее")}
|
||||
prevDisabled={logsPage === 0}
|
||||
nextDisabled={!logsHasMore}
|
||||
onPrev={() => {
|
||||
logsStore.setPage(Math.max(0, logsPage - 1));
|
||||
}}
|
||||
onNext={() => {
|
||||
logsStore.setPage(logsPage + 1);
|
||||
}}
|
||||
onPageChange={(page) => logsStore.setPage(page)}
|
||||
/>
|
||||
|
||||
<style>
|
||||
|
||||
@@ -17,10 +17,11 @@
|
||||
export let onOpenUserCard = () => {};
|
||||
|
||||
const paymentsStore = getContext("paymentsStore");
|
||||
const PAYMENTS_PAGE_SIZE = 25;
|
||||
|
||||
$: ({ payments, paymentsTotal, paymentsPage, paymentsLoading } = $paymentsStore);
|
||||
|
||||
$: paymentsHasMore = payments.length > 0 && paymentsTotal > (paymentsPage + 1) * 25; // 25 is PAYMENTS_PAGE_SIZE
|
||||
$: paymentsPageCount = Math.max(1, Math.ceil(Number(paymentsTotal || 0) / PAYMENTS_PAGE_SIZE));
|
||||
|
||||
/** @param {number|null|undefined} v */
|
||||
function formatTrafficGbCell(v) {
|
||||
@@ -177,17 +178,18 @@
|
||||
</div>
|
||||
|
||||
<AdminPagination
|
||||
meta={`${at("page_short", {}, "Стр.")} ${paymentsPage + 1} · ${at("total", {}, "Всего")} ${paymentsTotal}`}
|
||||
page={paymentsPage}
|
||||
pageCount={paymentsPageCount}
|
||||
total={paymentsTotal}
|
||||
pageLabel={at("page_short", {}, "Стр.")}
|
||||
ofLabel={at("pagination_of", {}, "из")}
|
||||
totalLabel={at("total", {}, "Всего")}
|
||||
jumpLabel={at("page_short", {}, "Стр.")}
|
||||
jumpAriaLabel={at("pagination_jump_aria", {}, "Перейти к странице")}
|
||||
goLabel={at("pagination_go", {}, "Перейти")}
|
||||
prevLabel={at("back", {}, "Назад")}
|
||||
nextLabel={at("next", {}, "Далее")}
|
||||
prevDisabled={paymentsPage === 0}
|
||||
nextDisabled={!paymentsHasMore}
|
||||
onPrev={() => {
|
||||
paymentsStore.setPage(Math.max(0, paymentsPage - 1));
|
||||
}}
|
||||
onNext={() => {
|
||||
paymentsStore.setPage(paymentsPage + 1);
|
||||
}}
|
||||
onPageChange={(page) => paymentsStore.setPage(page)}
|
||||
/>
|
||||
|
||||
<style>
|
||||
|
||||
@@ -129,11 +129,14 @@
|
||||
userLogsPageSize,
|
||||
} = $usersStore);
|
||||
|
||||
$: userLogsHasMore =
|
||||
Number(userLogsTotal || 0) > (Number(userLogsPage || 0) + 1) * Number(userLogsPageSize || 20);
|
||||
$: userReferralsHasMore =
|
||||
Number(userReferralsTotal || 0) >
|
||||
(Number(userReferralsPage || 0) + 1) * Number(userReferralsPageSize || 25);
|
||||
$: userLogsPageCount = Math.max(
|
||||
1,
|
||||
Math.ceil(Number(userLogsTotal || 0) / Number(userLogsPageSize || 20))
|
||||
);
|
||||
$: userReferralsPageCount = Math.max(
|
||||
1,
|
||||
Math.ceil(Number(userReferralsTotal || 0) / Number(userReferralsPageSize || 25))
|
||||
);
|
||||
|
||||
$: openedUserAvatarUrl = openedUser ? resolvedAvatarUrl(openedUser) : "";
|
||||
$: referralInviter = openedUserDetail?.referral?.inviter || null;
|
||||
@@ -738,13 +741,19 @@
|
||||
|
||||
{#if userLogsLoaded && userLogsTotal > userLogsPageSize}
|
||||
<AdminPagination
|
||||
meta={`${at("page_short", {}, "Стр.")} ${userLogsPage + 1}`}
|
||||
page={userLogsPage}
|
||||
pageCount={userLogsPageCount}
|
||||
total={userLogsTotal}
|
||||
pageLabel={at("page_short", {}, "Стр.")}
|
||||
ofLabel={at("pagination_of", {}, "из")}
|
||||
totalLabel={at("total", {}, "Всего")}
|
||||
jumpLabel={at("page_short", {}, "Стр.")}
|
||||
jumpAriaLabel={at("pagination_jump_aria", {}, "Перейти к странице")}
|
||||
goLabel={at("pagination_go", {}, "Перейти")}
|
||||
prevLabel={at("back", {}, "Назад")}
|
||||
nextLabel={at("next", {}, "Далее")}
|
||||
prevDisabled={userLogsPage === 0 || userLogsLoading}
|
||||
nextDisabled={!userLogsHasMore || userLogsLoading}
|
||||
onPrev={() => usersStore.setUserLogsPage(Math.max(0, userLogsPage - 1))}
|
||||
onNext={() => usersStore.setUserLogsPage(userLogsPage + 1)}
|
||||
disabled={userLogsLoading}
|
||||
onPageChange={(page) => usersStore.setUserLogsPage(page)}
|
||||
/>
|
||||
{/if}
|
||||
</Tabs.Content>
|
||||
@@ -1244,20 +1253,19 @@
|
||||
|
||||
{#if userReferralsTotal > userReferralsPageSize}
|
||||
<AdminPagination
|
||||
meta={at(
|
||||
"pagination_meta",
|
||||
{
|
||||
current: userReferralsPage + 1,
|
||||
total: Math.max(1, Math.ceil(userReferralsTotal / userReferralsPageSize)),
|
||||
},
|
||||
`${userReferralsPage + 1}/${Math.max(1, Math.ceil(userReferralsTotal / userReferralsPageSize))}`
|
||||
)}
|
||||
page={userReferralsPage}
|
||||
pageCount={userReferralsPageCount}
|
||||
total={userReferralsTotal}
|
||||
pageLabel={at("page_short", {}, "Стр.")}
|
||||
ofLabel={at("pagination_of", {}, "из")}
|
||||
totalLabel={at("total", {}, "Всего")}
|
||||
jumpLabel={at("page_short", {}, "Стр.")}
|
||||
jumpAriaLabel={at("pagination_jump_aria", {}, "Перейти к странице")}
|
||||
goLabel={at("pagination_go", {}, "Перейти")}
|
||||
prevLabel={at("prev_page", {}, "Назад")}
|
||||
nextLabel={at("next_page", {}, "Вперёд")}
|
||||
prevDisabled={userReferralsLoading || userReferralsPage <= 0}
|
||||
nextDisabled={userReferralsLoading || !userReferralsHasMore}
|
||||
onPrev={() => usersStore.setUserReferralsPage(userReferralsPage - 1)}
|
||||
onNext={() => usersStore.setUserReferralsPage(userReferralsPage + 1)}
|
||||
disabled={userReferralsLoading}
|
||||
onPageChange={(page) => usersStore.setUserReferralsPage(page)}
|
||||
/>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
const USERS_PAGE_SIZE = 25;
|
||||
let usersFilterSheetOpen = false;
|
||||
$: usersHasMore = users.length === USERS_PAGE_SIZE;
|
||||
$: usersPageCount = Math.max(1, Math.ceil(Number(usersTotal || 0) / USERS_PAGE_SIZE));
|
||||
|
||||
const USERS_FILTER_OPTIONS = [
|
||||
{ value: "all", label: at("filter_all", {}, "Все") },
|
||||
@@ -570,17 +570,19 @@
|
||||
</div>
|
||||
|
||||
<AdminPagination
|
||||
meta={`${at("page", {}, "Страница")} ${usersPage + 1}`}
|
||||
page={usersPage}
|
||||
pageCount={usersPageCount}
|
||||
total={usersTotal}
|
||||
pageLabel={at("page_short", {}, "Стр.")}
|
||||
ofLabel={at("pagination_of", {}, "из")}
|
||||
totalLabel={at("total", {}, "Всего")}
|
||||
jumpLabel={at("page_short", {}, "Стр.")}
|
||||
jumpAriaLabel={at("pagination_jump_aria", {}, "Перейти к странице")}
|
||||
goLabel={at("pagination_go", {}, "Перейти")}
|
||||
prevLabel={at("back", {}, "Назад")}
|
||||
nextLabel={at("next", {}, "Далее")}
|
||||
prevDisabled={usersPage === 0}
|
||||
nextDisabled={!usersHasMore}
|
||||
onPrev={() => {
|
||||
usersStore.updateState({ usersPage: Math.max(0, usersPage - 1) });
|
||||
usersStore.loadUsers();
|
||||
}}
|
||||
onNext={() => {
|
||||
usersStore.updateState({ usersPage: usersPage + 1 });
|
||||
onPageChange={(page) => {
|
||||
usersStore.updateState({ usersPage: page });
|
||||
usersStore.loadUsers();
|
||||
}}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user