feat: implement custom hook for machine filter parameters management

This commit is contained in:
Siemen Van den Neste
2026-03-21 01:46:27 +01:00
parent 3ec00e17d8
commit 4e94e82a01
3 changed files with 68 additions and 47 deletions
@@ -0,0 +1,51 @@
import { useSearchParams } from "react-router";
export interface MachineFilterParams {
filterUser: string | null;
filterTag: string | null;
filterStatus: "online" | "offline" | "expired" | null;
filterRoute: "exit-node" | "subnet" | null;
hasActiveFilters: boolean;
setParam: (key: string, value: string | null) => void;
clearFilters: () => void;
}
export function useMachineFilterParams(): MachineFilterParams {
const [searchParams, setSearchParams] = useSearchParams();
const filterUser = searchParams.get("user");
const filterTag = searchParams.get("tag");
const filterStatus = searchParams.get("status") as MachineFilterParams["filterStatus"];
const filterRoute = searchParams.get("route") as MachineFilterParams["filterRoute"];
const hasActiveFilters =
filterUser !== null || filterTag !== null || filterStatus !== null || filterRoute !== null;
const setParam = (key: string, value: string | null) => {
setSearchParams((prev) => {
const next = new URLSearchParams(prev);
if (value === null) next.delete(key);
else next.set(key, value);
return next;
});
};
const clearFilters = () => {
setSearchParams((prev) => {
const next = new URLSearchParams();
const q = prev.get("q");
if (q) next.set("q", q);
return next;
});
};
return {
filterUser,
filterTag,
filterStatus,
filterRoute,
hasActiveFilters,
setParam,
clearFilters,
};
}