Spaces:
Sleeping
Sleeping
'use client'; | |
import { useState } from 'react'; | |
import { format } from 'date-fns'; | |
import { Calendar as CalendarIcon } from 'lucide-react'; | |
import { cn } from '@/lib/utils'; | |
import { Button } from '@/components/ui/Button'; | |
import { Calendar } from '@/components/ui/calendar'; | |
import { | |
Popover, | |
PopoverContent, | |
PopoverTrigger, | |
} from '@/components/ui/popover'; | |
type DatePickerProps = { | |
date: string; | |
setDate: (date: string) => void; | |
}; | |
export function DatePicker({ date, setDate }: DatePickerProps) { | |
const [calendarOpen, setCalendarOpen] = useState(false); | |
return ( | |
<Popover open={calendarOpen} onOpenChange={setCalendarOpen}> | |
<PopoverTrigger asChild> | |
<Button | |
variant={'outline'} | |
className={cn( | |
'w-[280px] justify-start text-left font-normal', | |
!date && 'text-muted-foreground', | |
)} | |
> | |
<CalendarIcon className="mr-2 size-4" /> | |
{date ? format(date, 'PPP') : <span>Pick a date</span>} | |
</Button> | |
</PopoverTrigger> | |
<PopoverContent className="w-auto p-0"> | |
<Calendar | |
mode="single" | |
selected={new Date(date)} | |
onSelect={newDate => { | |
if (newDate) { | |
setDate(format(newDate, 'yyyy-MM-dd')); | |
setCalendarOpen(false); | |
} | |
}} | |
initialFocus | |
/> | |
</PopoverContent> | |
</Popover> | |
); | |
} | |