"use client"; import * as React from "react"; import { format } from "date-fns"; import { useFormContext } from "react-hook-form"; import { Button } from "@/components/ui/button"; import { Calendar } from "@/components/ui/calendar"; import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; import { CalendarIcon } from "lucide-react"; import { cn } from "@/lib/utils"; interface DateTimePickerProps { name: string; label?: string; } export function DateTimePicker({ name }: DateTimePickerProps) { const form = useFormContext(); const value: Date | null = form.watch(name); const handleDateSelect = (date: Date | undefined) => { if (date) { const current = form.getValues(name) ?? new Date(); date.setHours(current.getHours()); date.setMinutes(current.getMinutes()); form.setValue(name, date); } }; const handleTimeChange = (type: "hour" | "minute" | "ampm", val: string) => { const currentDate = form.getValues(name) ?? new Date(); const newDate = new Date(currentDate); if (type === "hour") { const hour = parseInt(val, 10); const isPM = newDate.getHours() >= 12; newDate.setHours((isPM ? 12 : 0) + (hour % 12)); } else if (type === "minute") { newDate.setMinutes(parseInt(val, 10)); } else if (type === "ampm") { const hours = newDate.getHours(); if (val === "AM" && hours >= 12) { newDate.setHours(hours - 12); } else if (val === "PM" && hours < 12) { newDate.setHours(hours + 12); } } form.setValue(name, newDate); }; return (
{/* Hours */}
{Array.from({ length: 12 }, (_, i) => i + 1) .reverse() .map((hour) => ( ))}
{/* Minutes */}
{Array.from({ length: 12 }, (_, i) => i * 5).map((minute) => ( ))}
{/* AM/PM */}
{["AM", "PM"].map((ampm) => ( ))}
); }