import { CalendarMonth, Close } from '@mui/icons-material' import { Box, Button, IconButton, Typography } from '@mui/joy' import moment from 'moment' import { useMemo, useState } from 'react' import DueDatePickerModal from './DueDatePickerModal' const DueDatePickerField = ({ dueDateOnly, dueTime, useCustomTime, onDueDateChange, onDueTimeChange, onUseCustomTimeChange, onClear, emptyDisplay = 'icon-text', size = 'sm', }) => { const [isOpen, setIsOpen] = useState(false) const handleSave = ({ dueDateOnly: nextDate, dueTime: nextTime, useCustomTime: nextUseCustomTime, }) => { onDueDateChange?.({ target: { value: nextDate || '' } }) onUseCustomTimeChange?.(nextUseCustomTime) onDueTimeChange?.({ target: { value: nextUseCustomTime && nextTime ? nextTime : '' }, }) setIsOpen(false) } const hasDueDate = Boolean(dueDateOnly) const shouldShowLabel = hasDueDate || emptyDisplay === 'icon-text' const dueDateLabel = useMemo(() => { if (!dueDateOnly) { return 'Due' } const formattedDate = moment(dueDateOnly).format('MMM D') if (useCustomTime && dueTime) { return `${formattedDate}, ${dueTime}` } return formattedDate }, [dueDateOnly, dueTime, useCustomTime]) return ( <> {hasDueDate && onClear && ( { e.stopPropagation() onClear?.() }} sx={{ position: 'absolute', top: -18, right: -18, zIndex: 10, borderRadius: '50%', '&:hover': { bgcolor: 'danger.softBg', }, }} > )} setIsOpen(false)} dueDateOnly={dueDateOnly} dueTime={dueTime} useCustomTime={useCustomTime} onApply={handleSave} onRemove={ onClear ? () => { onClear() setIsOpen(false) } : undefined } /> ) } export default DueDatePickerField