fix(ui): сохранять фильтры ресурсов в URL

This commit is contained in:
Denozordec committed 2026-09-23 09:28:03 +07:00
1 parent fd7a08d5dc
commit 0734679fd6
7 files changed
+85 -6

No files matched your search

+7 -3
View File
@@ -871,8 +871,8 @@ function SortIcon({ k, sortKey, sortAsc }: { k: ResSortKey; sortKey: ResSortKey;
type ResTypeFilter = "all" | "jump-host" | "exit-node" | "home-router"
function ResourcesTab({ resources, serversList, liveApi }: { resources: ServerResource[]; serversList: Server[]; liveApi?: boolean }) {
const [resSearch, setResSearch] = useState("")
const [typeFilter, setTypeFilter] = useState<ResTypeFilter>("all")
const { resource, setResourceSearch: setResSearch, setResourceType: setTypeFilter, resetResources } = useUptimeUrlState()
const { search: resSearch, type: typeFilter, error: resourceError } = resource
const rows = useMemo((): UptimeResourceRow[] => resources.map((r) => {
const hasData = r.hasData !== false
@@ -903,6 +903,7 @@ function ResourcesTab({ resources, serversList, liveApi }: { resources: ServerRe
// Filtered + sorted
const visible = useMemo(() => {
if (resourceError) return []
let list = rows
if (typeFilter !== "all") list = list.filter(r => r.server.type === typeFilter)
if (resSearch.trim()) {
@@ -914,7 +915,7 @@ function ResourcesTab({ resources, serversList, liveApi }: { resources: ServerRe
)
}
return list
}, [rows, typeFilter, resSearch])
}, [rows, typeFilter, resSearch, resourceError])
function exportCsv() {
const header = ["Сервер", "Тип", "Площадка", "CPU %", "RAM %", "RAM использ.", "RAM всего", "HDD %", "HDD использ.", "HDD всего", "Uptime", "Температура °C", "RouterOS"]
@@ -1023,6 +1024,9 @@ function ResourcesTab({ resources, serversList, liveApi }: { resources: ServerRe
]}
/>
{resourceError && <ContextAlert variant="warning" role="alert"><ContextDescription>{resourceError}</ContextDescription></ContextAlert>}
{(resSearch || typeFilter !== "all" || resourceError) && <Button type="button" variant="outline" className="self-start" onClick={resetResources}>Сбросить фильтры ресурсов</Button>}
{/* ── Table ─────────────────────────────────────────────────────────── */}
<DataPageCard>
<DataPageToolbar