itmpwk.ac.id/resources/js/components/date-picker.tsx
Yoga Pangestu b10991ea6c
Some checks failed
tests / ci (pull_request) Has been cancelled
feat: Add Calendar, Popover, and RadioGroup components with styling and functionality
2026-08-05 13:22:37 +07:00

55 lines
1.5 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;
};
export function DatePicker({
value,
onChange,
placeholder = 'Pilih tanggal',
className,
disabled,
}: 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}
onSelect={onChange}
initialFocus
/>
</PopoverContent>
</Popover>
);
}