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

This commit is contained in:
Denozordec committed 2026-09-21 09:50:47 +07:00
1 parent b64e6834a9
commit dfb993e1a3
7 files changed
+256 -10

No files matched your search

+6 -5
View File
@@ -11,7 +11,7 @@ import { PageHeader } from "@/components/page-header"
import { FormField, FormToggle, SectionTitle, SegmentedControl } from "@/components/form-kit"
import { DataPageToolbar } from "@/components/data-page-toolbar"
import { ServersDataGrid } from "@/components/data-grids/servers-data-grid"
import { createFilterQuery } from "@/components/reui/filters/filters-query"
import { useServerUrlState } from "@/hooks/use-server-url-state"
import { ServerFilters } from "@/components/data-grids/server-filters"
import { applyFilterQuery } from "@/lib/data-filters/apply-filter-query"
import { SERVER_FILTER_ACCESSORS } from "@/lib/data-filters/server-filter-fields"
@@ -231,9 +231,7 @@ function ServersPageContent() {
const [serverList, setServerList] = useState<Server[]>([])
const [listState, setListState] = useState<"loading" | "ready" | "error">("loading")
const [search, setSearch] = useState("")
const [typeFilter, setTypeFilter] = useState<TypeFilter>("all")
const [advancedFilters, setAdvancedFilters] = useState(() => createFilterQuery())
const { search, setSearch, typeFilter, setTypeFilter, filters: advancedFilters, setFilters: setAdvancedFilters, error: urlError, hasFilters, reset: resetFilters } = useServerUrlState()
const [open, setOpen] = useState(false)
const [sheetMode, setSheetMode] = useState<SheetMode>("add")
const [editingId, setEditingId] = useState<string | null>(null)
@@ -561,6 +559,7 @@ function ServersPageContent() {
const selectedServer = serverList.find(server => server.id === selectedServerId)
const filtered = useMemo(() => {
if (urlError) return []
const base = serverList.filter(sv => {
if (selectedServerId !== null && sv.id !== selectedServerId) return false
if (typeFilter !== "all" && sv.type !== typeFilter) return false
@@ -569,7 +568,7 @@ function ServersPageContent() {
return sv.name.toLowerCase().includes(q) || sv.host.includes(q) || sv.site.toLowerCase().includes(q)
})
return applyFilterQuery(base, advancedFilters, SERVER_FILTER_ACCESSORS)
}, [serverList, search, typeFilter, advancedFilters, selectedServerId])
}, [serverList, search, typeFilter, advancedFilters, selectedServerId, urlError])
const counts = useMemo(() => ({
all: serverList.length,
@@ -668,6 +667,8 @@ function ServersPageContent() {
/>
{/* Table */}
{urlError && <Alert variant="warning" role="alert"><AlertTitle>Фильтры требуют внимания</AlertTitle><AlertDescription>{urlError}</AlertDescription></Alert>}
{hasFilters && <div><Button variant="outline" size="sm" onClick={resetFilters}>Сбросить фильтры списка</Button></div>}
<DataPageCard>
<DataPageToolbar
segmented={{