import { useEffect, useState } from "react"; import { useTranslations } from "@/hooks/translations"; import { FormField } from "@/types"; import DateInput from "./DateInput"; import ErrorText from "../ErrorText"; import { stringify, getCurrentYear } from "./utils"; import { IDate, getDateAsString } from "@/services/date"; import { ELocalesPlacement } from "@/locales"; export function DatePicker( props: FormField ): JSX.Element { const { translate } = useTranslations(ELocalesPlacement.V1); const { name, value, inputClassName, onValid, onInvalid } = props; const date = getDateAsString(value); const [initYear, initMonth, initDay] = date.split("-"); const [year, setYear] = useState(initYear); const [month, setMonth] = useState(initMonth); const [day, setDay] = useState(initDay); const [hasError, setHasError] = useState(false); const isValid = (value: string) => { const date = new Date(value); const isCorrectDate = stringify(date) === value; const isNotFutureDate = date.getTime() <= Date.now(); const isNotMinDate = date.getFullYear() >= getCurrentYear() - 200; return isCorrectDate && isNotFutureDate && isNotMinDate; }; useEffect(() => { if (year && month && day) { const currentValue = `${year}-${month}-${day}`; setHasError(!isValid(currentValue)); isValid(currentValue) ? onValid(currentValue) : onInvalid(); } else { setHasError(false); onValid(""); } }, [year, month, day, hasError, onValid, onInvalid]); return (
setYear(year)} /> setMonth(month)} /> setDay(day)} />
); }