import { useEffect, useState } from "react"; import { useSearchParams } from "react-router"; import { defaultPeriod, isValidPeriod } from "./calendar"; function useUrlPeriod() { const [parameters, setParameters] = useSearchParams(); const from = parameters.get("from"); const to = parameters.get("to"); const isValid = isValidPeriod(from, to); const hasPeriod = from !== null || to !== null; const [[defaultFrom, defaultTo]] = useState<[string, string]>(defaultPeriod); const resolve = (value: null | string, fallback: string) => { if (!isValid) return null; return hasPeriod ? value : fallback; }; useEffect(() => { if (isValid || (!parameters.has("from") && !parameters.has("to"))) return; const normalized = new URLSearchParams(parameters); normalized.delete("from"); normalized.delete("to"); setParameters(normalized, { replace: true }); }, [isValid, parameters, setParameters]); return { from: resolve(from, defaultFrom), parameters, setParameters, to: resolve(to, defaultTo), }; } export { useUrlPeriod };