47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
"use client";
|
|
|
|
import * as React from "react";
|
|
import { format } from "date-fns";
|
|
import { Calendar as CalendarIcon } from "~/icons";
|
|
|
|
import { cn } from "~/cn";
|
|
import { Button } from "~/button";
|
|
import { Calendar } from "~/calendar";
|
|
import { Popover, PopoverContent, PopoverTrigger } from "~/popover";
|
|
import { DayPickerSingleProps } from "react-day-picker";
|
|
|
|
export type DatePickerProps = Omit<DayPickerSingleProps, "mode">;
|
|
|
|
function DatePicker({ ...props }: DatePickerProps) {
|
|
const [date, setDate] = React.useState<Date>();
|
|
|
|
return (
|
|
<Popover>
|
|
<PopoverTrigger asChild>
|
|
<Button
|
|
variant={"outline"}
|
|
className={cn(
|
|
"justify-start text-left font-normal",
|
|
!date && "text-slate-400"
|
|
)}
|
|
>
|
|
<CalendarIcon className="mr-2 h-4 w-4" />
|
|
{date ? format(date, "PPP") : <span>Pick a date</span>}
|
|
</Button>
|
|
</PopoverTrigger>
|
|
<PopoverContent className="w-auto p-0">
|
|
<Calendar
|
|
mode="single"
|
|
selected={date}
|
|
onSelect={setDate}
|
|
initialFocus
|
|
{...props}
|
|
/>
|
|
</PopoverContent>
|
|
</Popover>
|
|
);
|
|
}
|
|
DatePicker.displayName = "DatePicker";
|
|
|
|
export { DatePicker };
|