A small web app for watching movies and shows easily
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

39 lines
978 B

import { useCallback, useMemo } from "react";
import { useLocation, useNavigate } from "react-router-dom";
export function useQueryParams() {
const loc = useLocation();
const queryParams = useMemo(() => {
const obj: Record<string, string> = Object.fromEntries(
new URLSearchParams(loc.search).entries(),
);
return obj;
}, [loc.search]);
return queryParams;
}
export function useQueryParam(
param: string,
): [string | null, (a: string | null) => void] {
const params = useQueryParams();
const location = useLocation();
const navigate = useNavigate();
const currentValue = params[param] ?? null;
const set = useCallback(
(value: string | null) => {
const parsed = new URLSearchParams(location.search);
if (value) parsed.set(param, value);
else parsed.delete(param);
navigate({
search: parsed.toString(),
});
},
[param, location.search, navigate],
);
return [currentValue, set];
}