fix(ui): сохранять фильтры ресурсов в URL
This commit is contained in:
1 parent
fd7a08d5dc
commit
0734679fd6
7 files changed
+85
-6
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user