import React, { useState, useMemo, useRef, useEffect } from 'react'; import type { BoxProps } from '@chakra-ui/react'; import { Box, Card, Flex, useOutsideClick } from '@chakra-ui/react'; import { format } from 'date-fns'; import type { Matcher } from 'react-day-picker'; import { DayPicker } from 'react-day-picker'; import 'react-day-picker/dist/style.css'; import zhCN from 'date-fns/locale/zh-CN'; import MyIcon from '../Icon'; const DateTimePicker = ({ onChange, popPosition = 'bottom', defaultDate = new Date(), selectedDateTime, disabled, ...props }: { onChange?: (dateTime: Date) => void; popPosition?: 'bottom' | 'top'; defaultDate?: Date; selectedDateTime?: Date; disabled?: Matcher[]; } & Omit) => { const OutRangeRef = useRef(null); const [selectedDate, setSelectedDate] = useState( selectedDateTime || defaultDate ); const [showSelected, setShowSelected] = useState(false); useEffect(() => { if (selectedDateTime) { setSelectedDate(selectedDateTime); } }, [selectedDateTime]); const formatSelected = useMemo(() => { if (selectedDate) { const dateStr = format(selectedDate, 'y/MM/dd'); return dateStr; } return format(new Date(), 'y/MM/dd'); }, [selectedDate]); useOutsideClick({ ref: OutRangeRef, handler: () => { setShowSelected(false); } }); return ( setShowSelected(true)} alignItems={'center'} {...props} > {formatSelected} {showSelected && ( { if (date) { setSelectedDate(date); onChange?.(date); setShowSelected(false); } }} /> )} ); }; export default DateTimePicker;