import type { CalendarDateTime } from "@internationalized/date"; import { Controller, type FieldPath, type FieldValues, useFormContext, } from "react-hook-form"; import { dateToDateValue, dayMonthYearToDateValue } from "../../utils/dates"; import type { DayMonthYear } from "../../utils/zod"; import { SendouDatePicker } from "../elements/DatePicker"; import type { FormFieldSize } from "./form-utils"; export function DateFormField({ label, name, bottomText, required, size, granularity = "day", }: { label: string; name: FieldPath; bottomText?: string; required?: boolean; size?: FormFieldSize; granularity?: "day" | "minute"; }) { const methods = useFormContext(); return ( { const getValue = () => { const originalValue = value as DayMonthYear | Date | null; if (!originalValue) return null; if (originalValue instanceof Date) { return dateToDateValue(originalValue); } return dayMonthYearToDateValue(originalValue as DayMonthYear); }; return ( { if (value) { if (granularity === "minute") { onChange( new Date( value.year, value.month - 1, value.day, (value as CalendarDateTime).hour, (value as CalendarDateTime).minute, ), ); } else { onChange({ day: value.day, month: value.month - 1, year: value.year, }); } } if (!value) { onChange(null); } }} bottomText={bottomText} /> ); }} /> ); }