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(