From e2706c7c265b16378fa0919cebc9f75648858eed Mon Sep 17 00:00:00 2001 From: Fringg Date: Fri, 24 Apr 2026 07:23:58 +0300 Subject: [PATCH] fix: select-all subscriptions + per-page selector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix allVisibleSubscriptionIds: include ALL users' filtered subs (was only users with >1 subs — single-sub users were excluded) - Add per-page selector (25/50/100/200) in pagination bar - Make limit a state variable instead of constant - perPage i18n keys (ru + en) --- src/locales/en.json | 1 + src/locales/ru.json | 1 + src/pages/AdminBulkActions.tsx | 42 ++++++++++++++++++++++++---------- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 0df84ac..cd5f6de 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -2031,6 +2031,7 @@ "selectUser": "Select user {{name}}", "deselectUser": "Deselect user {{name}}", "noResults": "No users found", + "perPage": "Per page", "actions": { "extend": "Extend subscription", "cancel": "Deactivate subscriptions", diff --git a/src/locales/ru.json b/src/locales/ru.json index 0e92425..5c761d8 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -3779,6 +3779,7 @@ "selectUser": "Выбрать пользователя {{name}}", "deselectUser": "Снять выбор пользователя {{name}}", "noResults": "Пользователи не найдены", + "perPage": "На странице", "actions": { "extend": "Продлить подписку", "cancel": "Деактивировать подписки", diff --git a/src/pages/AdminBulkActions.tsx b/src/pages/AdminBulkActions.tsx index 402cf83..ec37f92 100644 --- a/src/pages/AdminBulkActions.tsx +++ b/src/pages/AdminBulkActions.tsx @@ -1409,7 +1409,7 @@ export default function AdminBulkActions() { // Pagination const [offset, setOffset] = useState(0); - const limit = 50; + const [limit, setLimit] = useState(50); // Selection const [rowSelection, setRowSelection] = useState({}); @@ -1466,7 +1466,7 @@ export default function AdminBulkActions() { } finally { setLoading(false); } - }, [offset, committedSearch, statusFilter, tariffFilter, promoGroupFilter]); + }, [offset, limit, committedSearch, statusFilter, tariffFilter, promoGroupFilter]); useEffect(() => { loadUsers(); @@ -1583,10 +1583,8 @@ export default function AdminBulkActions() { for (const user of users) { const subs = user.subscriptions ?? []; const filtered = getFilteredSubs(subs); - if (filtered.length > 1) { - for (const sub of filtered) { - ids.push(sub.id); - } + for (const sub of filtered) { + ids.push(sub.id); } } return ids; @@ -2214,12 +2212,32 @@ export default function AdminBulkActions() { )} - {/* Pagination */} - {totalPages > 1 && ( -
-
+ {/* Pagination + per-page selector */} +
+
+ {offset + 1}–{Math.min(offset + limit, total)} / {total} + +
+ {t('admin.bulkActions.perPage')} +
+
+ {totalPages > 1 && (
-
- )} + )} +
{/* Floating action bar — portal to body for correct fixed positioning */} {createPortal(