fix(ui): восстанавливать фильтры WireGuard из ссылки
This commit is contained in:
1 parent
c6702efcc4
commit
e51964b4d2
8 files changed
+103
-13
No files matched your search
@@ -0,0 +1,18 @@
|
||||
"use client"
|
||||
import { useMemo } from "react"
|
||||
import { useSearchParams } from "next/navigation"
|
||||
import { readWireGuardUrl, patchWireGuardUrl, type WireGuardTab, type WireGuardStatus } from "@/lib/wireguard-url-state"
|
||||
export function useWireGuardUrlState() {
|
||||
const raw = useSearchParams().toString()
|
||||
const state = useMemo(() => readWireGuardUrl(new URLSearchParams(raw)), [raw])
|
||||
function write(changes: Record<string, string | null>, replace = false) {
|
||||
const href = patchWireGuardUrl(new URLSearchParams(window.location.search), changes) + window.location.hash
|
||||
if (href === window.location.pathname + window.location.search + window.location.hash) return
|
||||
if (replace) window.history.replaceState(null, "", href)
|
||||
else window.history.pushState(null, "", href)
|
||||
}
|
||||
return { ...state, setTab: (tab: WireGuardTab) => write({tab:tab === "interfaces" ? null : tab}),
|
||||
setSearch: (q: string) => write({q}, true), setStatus: (status: WireGuardStatus) => write({status:status === "all" ? null : status}),
|
||||
resetFilters: () => write({q:null,status:null,tab:null}),
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user