import React, { useState, useRef } from 'react'; import { DatePicker, Button, Flex } from 'antd'; import { CalendarOutlined } from '@ant-design/icons'; import dayjs, { Dayjs } from 'dayjs'; import { useSocket } from '@/socket/socketContext'; import { SocketEvents } from '@/shared/socket-events'; import { IProjectTask } from '@/types/project/projectTasksViewModel.types'; import logger from '@/utils/errorLogger'; import { useAuthService } from '@/hooks/useAuth'; import { getUserSession } from '@/utils/session-helper'; const CustomDueDatePicker = ({ task, onDateChange, }: { task: IProjectTask; onDateChange: (date: Dayjs | null) => void; }) => { const { socket } = useSocket(); const [isDatePickerOpen, setIsDatePickerOpen] = useState(false); const containerRef = useRef(null); // Add ref to container const dueDayjs = task?.end_date ? dayjs(task.end_date) : null; const handleDateChange = (date: Dayjs | null) => { onDateChange(date); setIsDatePickerOpen(false); try { socket?.emit( SocketEvents.TASK_END_DATE_CHANGE.toString(), JSON.stringify({ task_id: task.id, end_date: date?.format(), parent_task: task.parent_task_id, time_zone: getUserSession()?.timezone_name ? getUserSession()?.timezone_name : Intl.DateTimeFormat().resolvedOptions().timeZone, }) ); } catch (error) { logger.error('Failed to update due date:', error); } }; // Stop propagation at the container level const handleContainerClick = (e: React.MouseEvent) => { e.stopPropagation(); }; return (
{task && task.end_date ? ( ) : ( setIsDatePickerOpen(false)} onOpenChange={open => setIsDatePickerOpen(open)} variant="borderless" // Remove individual onClick handler />
); }; export default CustomDueDatePicker;