import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { FormField } from '@/types' import DateInput from './DateInput' import ErrorText from '../ErrorText' import { stringify, getCurrentYear } from './utils' import { IDate, getDateAsString } from '@/services/date' export function DatePicker(props: FormField): JSX.Element { const { t } = useTranslation() 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)} />
) }