siakad-itm/resources/js/components/date-picker.tsx
2026-08-30 16:06:05 +07:00

59 lines
1.7 KiB
TypeScript

import { format } from 'date-fns';
import { CalendarIcon } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { Calendar } from '@/components/ui/calendar';
import {
Popover,
PopoverContent,
PopoverTrigger,
} from '@/components/ui/popover';
import { cn } from '@/lib/utils';
type DatePickerProps = {
value?: Date | null;
onChange?: (date: Date | undefined) => void;
placeholder?: string;
className?: string;
disabled?: boolean;
maxDate?: Date;
};
export function DatePicker({
value,
onChange,
placeholder = 'Pilih tanggal',
className,
disabled,
maxDate,
}: DatePickerProps) {
return (
<Popover>
<PopoverTrigger asChild>
<Button
variant="outline"
className={cn(
'w-full justify-start text-left font-normal',
!value && 'text-muted-foreground',
className,
)}
disabled={disabled}
>
<CalendarIcon className="mr-2 h-4 w-4" />
{value ? format(value, 'dd MMM yyyy') : placeholder}
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0" align="start">
<Calendar
mode="single"
selected={value ?? undefined}
defaultMonth={value ?? undefined}
captionLayout="dropdown"
onSelect={onChange}
disabled={maxDate ? { after: maxDate } : undefined}
/>
</PopoverContent>
</Popover>
);
}