fix(ui): ограничить каталог пользователей и добавить поиск

This commit is contained in:
Denozordec committed 2026-10-04 04:48:06 +07:00
1 parent e0f83bdf42
commit 5d9a6f3757
8 files changed
+118 -14

No files matched your search

+11 -2
View File
@@ -1,7 +1,8 @@
"use client"
import { useCallback, useEffect, useRef, useState } from "react"
import { useCallback, useEffect, useRef, useState, useMemo } from "react"
import { PageHeader } from "@/components/page-header"
import { DataPageToolbar } from "@/components/data-page-toolbar"
import { DataPageCard } from "@/components/data-page-card"
import { UsersDataGrid } from "@/components/data-grids/users-data-grid"
import { KpiStatGrid } from "@/components/reui-kit/kpi-stat-grid"
@@ -76,6 +77,11 @@ function UsersContent() {
const canReadServers = can("mm:servers:read")
const [users, setUsers] = useState<AppUser[]>(() => isLive ? [] : INIT_USERS)
const [userSearch, setUserSearch] = useState("")
const visibleUsers = useMemo(() => {
const query = userSearch.trim().toLocaleLowerCase("ru-RU")
return query ? users.filter(user => [user.name, user.login, user.email].some(value => value.toLocaleLowerCase("ru-RU").includes(query))) : users
}, [users, userSearch])
const [serverOptions, setServerOptions] = useState<UserServerOption[]>(() => isLive ? [] : toServerOptionsFromMock())
const [loading, setLoading] = useState(isLive && canRead)
const [usersReadAt, setUsersReadAt] = useState<number | null>(null)
@@ -299,8 +305,11 @@ function UsersContent() {
{/* Preview: https://reui.io/preview/base/data-grid-filtering-2 · https://reui.io/docs/components/base/data-grid · https://reui.io/docs/components/base/frame */}
{canRead && (usersKnown || loading) && <DataPageCard>
<DataPageToolbar search={userSearch} onSearchChange={setUserSearch} searchLabel="Поиск по имени, логину или email" searchPlaceholder="Поиск по имени, логину или email…" countLabel={usersKnown ? `${visibleUsers.length} из ${users.length}` : "Данные пока неизвестны"} />
<UsersDataGrid
users={users}
users={visibleUsers}
emptyTitle={userSearch.trim() ? "Нет совпадений" : "Нет пользователей"}
emptyDescription={userSearch.trim() ? "Измените поиск" : "Добавьте пользователя, чтобы привязать интерфейсы и учитывать трафик"}
serversCount={serversKnown ? serverOptions.length : null}
allSectionsCount={ALL_SECTIONS.length}
isLoading={loading && !usersKnown}