瀏覽代碼

feat(clients): show filtered count in clients list

Surface a "Showing X of Y" counter in the clients filter bar that appears whenever a search term or any filter is active, using the server-provided filtered and total counts. Added the showingCount string across all 13 locales.

Closes #4808
MHSanaei 16 小時之前
父節點
當前提交
91f325eca6

+ 7 - 0
frontend/src/pages/clients/ClientsPage.css

@@ -33,6 +33,13 @@
   flex: 0 0 auto;
 }
 
+.filter-count {
+  margin-inline-start: auto;
+  color: var(--ant-color-text-secondary);
+  font-size: 13px;
+  white-space: nowrap;
+}
+
 .filter-chips {
   display: flex;
   flex-wrap: wrap;

+ 6 - 1
frontend/src/pages/clients/ClientsPage.tsx

@@ -188,7 +188,7 @@ export default function ClientsPage() {
   useEffect(() => { setMessageInstance(messageApi); }, [messageApi]);
 
   const {
-    clients, filtered,
+    clients, total, filtered,
     summary: serverSummary,
     allGroups,
     setQuery,
@@ -993,6 +993,11 @@ export default function ClientsPage() {
                             {t('pages.clients.clearAllFilters')}
                           </Button>
                         )}
+                        {(activeCount > 0 || debouncedSearch.trim().length > 0) && (
+                          <span className="filter-count">
+                            {t('pages.clients.showingCount', { shown: filtered, total })}
+                          </span>
+                        )}
                       </div>
 
                       {activeCount > 0 && (

+ 1 - 0
web/translation/ar-EG.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "ابحث بالبريد، التعليق، sub ID، UUID، كلمة المرور، auth…",
       "filterTitle": "تصفية العملاء",
       "clearAllFilters": "مسح الكل",
+      "showingCount": "عرض {shown} من {total}",
       "sortOldest": "الأقدم أولاً",
       "sortNewest": "الأحدث أولاً",
       "sortRecentlyUpdated": "محدّث مؤخراً",

+ 1 - 0
web/translation/en-US.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Search email, comment, sub ID, UUID, password, auth…",
       "filterTitle": "Filter clients",
       "clearAllFilters": "Clear all",
+      "showingCount": "Showing {shown} of {total}",
       "sortOldest": "Oldest first",
       "sortNewest": "Newest first",
       "sortRecentlyUpdated": "Recently updated",

+ 1 - 0
web/translation/es-ES.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Buscar email, comentario, sub ID, UUID, contraseña, auth…",
       "filterTitle": "Filtrar clientes",
       "clearAllFilters": "Limpiar todo",
+      "showingCount": "Mostrando {shown} de {total}",
       "sortOldest": "Más antiguos",
       "sortNewest": "Más recientes",
       "sortRecentlyUpdated": "Recientemente actualizados",

+ 1 - 0
web/translation/fa-IR.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "جستجوی ایمیل، توضیح، Sub ID، UUID، رمز، احراز...",
       "filterTitle": "فیلتر کاربران",
       "clearAllFilters": "پاک کردن همه",
+      "showingCount": "نمایش {shown} از {total}",
       "sortOldest": "قدیمی‌ترین",
       "sortNewest": "جدیدترین",
       "sortRecentlyUpdated": "اخیراً به‌روزشده",

+ 1 - 0
web/translation/id-ID.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Cari email, komentar, sub ID, UUID, kata sandi, auth…",
       "filterTitle": "Filter klien",
       "clearAllFilters": "Hapus semua",
+      "showingCount": "Menampilkan {shown} dari {total}",
       "sortOldest": "Terlama dulu",
       "sortNewest": "Terbaru dulu",
       "sortRecentlyUpdated": "Baru saja diperbarui",

+ 1 - 0
web/translation/ja-JP.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "メール、コメント、sub ID、UUID、パスワード、auth を検索…",
       "filterTitle": "クライアントをフィルタ",
       "clearAllFilters": "すべてクリア",
+      "showingCount": "{total} 件中 {shown} 件を表示",
       "sortOldest": "古い順",
       "sortNewest": "新しい順",
       "sortRecentlyUpdated": "最近更新",

+ 1 - 0
web/translation/pt-BR.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Buscar email, comentário, sub ID, UUID, senha, auth…",
       "filterTitle": "Filtrar clientes",
       "clearAllFilters": "Limpar tudo",
+      "showingCount": "Mostrando {shown} de {total}",
       "sortOldest": "Mais antigos primeiro",
       "sortNewest": "Mais novos primeiro",
       "sortRecentlyUpdated": "Atualizados recentemente",

+ 1 - 0
web/translation/ru-RU.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Поиск email, комментария, sub ID, UUID, пароля, auth…",
       "filterTitle": "Фильтр клиентов",
       "clearAllFilters": "Очистить все",
+      "showingCount": "Показано {shown} из {total}",
       "sortOldest": "Сначала старые",
       "sortNewest": "Сначала новые",
       "sortRecentlyUpdated": "Недавно обновлены",

+ 1 - 0
web/translation/tr-TR.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Email, yorum, sub ID, UUID, parola, auth ara…",
       "filterTitle": "İstemcileri filtrele",
       "clearAllFilters": "Tümünü temizle",
+      "showingCount": "{total} içinden {shown} gösteriliyor",
       "sortOldest": "Önce en eski",
       "sortNewest": "Önce en yeni",
       "sortRecentlyUpdated": "Son güncellenen",

+ 1 - 0
web/translation/uk-UA.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Пошук email, коментаря, sub ID, UUID, паролю, auth…",
       "filterTitle": "Фільтр клієнтів",
       "clearAllFilters": "Очистити все",
+      "showingCount": "Показано {shown} з {total}",
       "sortOldest": "Спочатку старі",
       "sortNewest": "Спочатку нові",
       "sortRecentlyUpdated": "Нещодавно оновлені",

+ 1 - 0
web/translation/vi-VN.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "Tìm email, ghi chú, sub ID, UUID, mật khẩu, auth…",
       "filterTitle": "Lọc client",
       "clearAllFilters": "Xóa tất cả",
+      "showingCount": "Hiển thị {shown} trên {total}",
       "sortOldest": "Cũ nhất trước",
       "sortNewest": "Mới nhất trước",
       "sortRecentlyUpdated": "Gần đây cập nhật",

+ 1 - 0
web/translation/zh-CN.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "搜索邮箱、备注、sub ID、UUID、密码、auth…",
       "filterTitle": "筛选客户端",
       "clearAllFilters": "清除全部",
+      "showingCount": "显示 {shown} / {total}",
       "sortOldest": "最旧优先",
       "sortNewest": "最新优先",
       "sortRecentlyUpdated": "最近更新",

+ 1 - 0
web/translation/zh-TW.json

@@ -643,6 +643,7 @@
       "searchPlaceholder": "搜尋電子郵件、備註、sub ID、UUID、密碼、auth…",
       "filterTitle": "篩選客戶端",
       "clearAllFilters": "清除全部",
+      "showingCount": "顯示 {shown} / {total}",
       "sortOldest": "最舊優先",
       "sortNewest": "最新優先",
       "sortRecentlyUpdated": "最近更新",