import {DateJumperProps} from './base'; import React from 'react'; import {gregorianJDN, jdnGregorian} from '../gregorian'; export default function GregorianJumper({minJDN, maxJDN, todayJDN, onJump}: DateJumperProps): JSX.Element { const {todayYear, todayMonth, todayDay, startYear, endYear} = React.useMemo(() => { const [todayYear, todayMonth, todayDay] = jdnGregorian(todayJDN); const [startYear] = jdnGregorian(minJDN); const [endYear] = jdnGregorian(maxJDN); return {todayYear, todayMonth, todayDay, startYear, endYear}; }, [minJDN, maxJDN, todayJDN]); const [year, setYear] = React.useState(todayYear.toString()); const [month, setMonth] = React.useState(todayMonth.toString()); const [day, setDay] = React.useState(todayDay.toString()); const validYear = /^-?\d+$/.test(year) && startYear <= +year && +year <= endYear; const validMonth = /^\d+$/.test(month) && 1 <= +month && +month <= 12; const validDay = /^\d+$/.test(day) && 1 <= +day && +day <= 31; function goToGregorian(event: React.FormEvent) { event.preventDefault(); if (!validYear || !validMonth || !validDay) return; onJump(gregorianJDN(+year, +month, +day)); } return
; }