import React, { useCallback, useEffect, useMemo, useRef } from 'react'; import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import DatePicker from 'react-datepicker'; import { Button, Form } from 'semantic-ui-react'; import { useDidUpdate, useToggle } from '../../lib/hooks'; import { Input, Popup } from '../../lib/custom-ui'; import { useForm } from '../../hooks'; import styles from './EditDueDateStep.module.css'; const EditDueDateStep = React.memo(({ defaultValue, onUpdate, onBack, onClose }) => { const [t] = useTranslation(); const [data, handleFieldChange, setData] = useForm(() => { const date = defaultValue || new Date().setHours(12, 0, 0, 0); return { date: t('format:date', { postProcess: 'formatDate', value: date, }), time: t('format:time', { postProcess: 'formatDate', value: date, }), }; }); const [selectTimeFieldState, selectTimeField] = useToggle(); const dateField = useRef(null); const timeField = useRef(null); const nullableDate = useMemo(() => { const date = t('format:date', { postProcess: 'parseDate', value: data.date, }); if (Number.isNaN(date.getTime())) { return null; } return date; }, [data.date, t]); const handleDatePickerChange = useCallback( (date) => { setData((prevData) => ({ ...prevData, date: t('format:date', { postProcess: 'formatDate', value: date, }), })); selectTimeField(); }, [setData, selectTimeField, t], ); const handleSubmit = useCallback(() => { if (!nullableDate) { dateField.current.select(); return; } const value = t('format:dateTime', { postProcess: 'parseDate', value: `${data.date} ${data.time}`, }); if (Number.isNaN(value.getTime())) { timeField.current.select(); return; } if (!defaultValue || value.getTime() !== defaultValue.getTime()) { onUpdate(value); } onClose(); }, [defaultValue, onUpdate, onClose, data, nullableDate, t]); const handleClearClick = useCallback(() => { if (defaultValue) { onUpdate(null); } onClose(); }, [defaultValue, onUpdate, onClose]); useEffect(() => { dateField.current.select(); }, []); useDidUpdate(() => { timeField.current.select(); }, [selectTimeFieldState]); return ( <> {t('common.editDueDate', { context: 'title', })}
{t('common.date')}
{t('common.time')}