Files
frontend/src/shared/lib/useUrlPeriod.ts
T
ksv741 0ea8d7b62d
Frontend verify / commits (pull_request) Successful in 50s
Frontend verify / security (pull_request) Failing after 13s
Frontend verify / verify (pull_request) Skipped
feat: default journal period to last 7 days
2026-10-06 22:05:41 +03:00

37 lines
1.0 KiB
TypeScript

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 };