From d9cd1d2ae8048d0d54851743424f77330092805c Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 15 May 2025 01:35:14 +0000 Subject: (대표님) date-picker 컴포넌트 개발 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/ui/date-picker.tsx | 75 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 components/ui/date-picker.tsx (limited to 'components/ui/date-picker.tsx') diff --git a/components/ui/date-picker.tsx b/components/ui/date-picker.tsx new file mode 100644 index 00000000..a88a8679 --- /dev/null +++ b/components/ui/date-picker.tsx @@ -0,0 +1,75 @@ +"use client" + +import * as React from "react" +import { format } from "date-fns" +import { 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" + +interface DatePickerProps { + date?: Date + onSelect?: (date?: Date) => void + disabled?: boolean + placeholder?: string + className?: string +} + +export function DatePicker({ + date, + onSelect, + disabled = false, + placeholder = "날짜 선택", + className, +}: DatePickerProps) { + // 내부 상태 관리와 외부 상태 관리를 모두 지원 + const [internalDate, setInternalDate] = React.useState(date) + + // 외부에서 date가 변경되면 내부 상태도 업데이트 + React.useEffect(() => { + setInternalDate(date) + }, [date]) + + // 날짜 선택 시 외부 콜백과 내부 상태 모두 업데이트 + const handleSelect = (newDate?: Date) => { + setInternalDate(newDate) + onSelect?.(newDate) + } + + // 실제 표시할 날짜 (외부 제어 우선) + const displayDate = date !== undefined ? date : internalDate + + return ( + + + + + + + + + ) +} \ No newline at end of file -- cgit v1.2.3