Files
IdP/apps/frontend/components/ui/date-picker.tsx
2026-06-24 20:15:19 +03:00

60 lines
1.8 KiB
TypeScript

'use client';
import { format, parseISO } from 'date-fns';
import { ru } from 'date-fns/locale';
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';
export function DatePicker({
value,
onChange,
placeholder = 'Дата рождения',
className,
disabled
}: {
value?: string;
onChange: (value: string | undefined) => void;
placeholder?: string;
className?: string;
disabled?: boolean;
}) {
const selected = value ? parseISO(value) : undefined;
return (
<Popover>
<PopoverTrigger asChild>
<Button
type="button"
variant="secondary"
disabled={disabled}
className={cn(
'h-11 w-full justify-start rounded-2xl border border-[#eceef4] bg-white px-4 text-left font-normal text-[#111827] hover:bg-white',
!value && 'text-[#667085]',
className
)}
>
<CalendarIcon className="mr-2 h-4 w-4 text-[#667085]" />
{value ? format(parseISO(value), 'd MMMM yyyy', { locale: ru }) : placeholder}
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0" align="start">
<Calendar
mode="single"
selected={selected}
onSelect={(date) => onChange(date ? format(date, 'yyyy-MM-dd') : undefined)}
disabled={(date) => date > new Date()}
defaultMonth={selected ?? new Date(1990, 0, 1)}
captionLayout="dropdown"
hideNavigation
startMonth={new Date(1920, 0)}
endMonth={new Date()}
/>
</PopoverContent>
</Popover>
);
}