import React, { useState, useEffect, forwardRef } from 'react'; import moment from 'moment'; import styled from 'styled-components'; import DatePicker from 'react-datepicker'; import _ from 'lodash'; import 'react-datepicker/dist/react-datepicker.css'; import { getYear, getMonth } from 'date-fns'; import { useForm, Controller } from 'react-hook-form'; import NOOP from 'shared/utils/noop'; import { Wrapper, ActionWrapper, RemoveDueDate, DueDateInput, DueDatePickerWrapper, ConfirmAddDueDate } from './Styles'; type DueDateManagerProps = { task: Task; onDueDateChange: (task: Task, newDueDate: Date) => void; onRemoveDueDate: (task: Task) => void; onCancel: () => void; }; const Form = styled.form` padding-top: 25px; `; const FormField = styled.div` width: 50%; display: inline-block; `; const HeaderSelectLabel = styled.div` display: inline-block; position: relative; z-index: 9999; border-radius: 3px; cursor: pointer; padding: 6px 10px; text-decoration: underline; margin: 6px 0; font-size: 14px; line-height: 16px; margin-left: 0; margin-right: 0; padding-left: 4px; padding-right: 4px; color: #c2c6dc; &:hover { background: rgba(115, 103, 240); color: #c2c6dc; } `; const HeaderSelect = styled.select` text-decoration: underline; font-size: 14px; text-align: center; padding: 4px 6px; background: none; outline: none; border: none; border-radius: 3px; appearance: none; &:hover { background: #262c49; border: 1px solid rgba(115, 103, 240); outline: none !important; box-shadow: none; color: #c2c6dc; } &::-ms-expand { display: none; } cursor: pointer; position: absolute; z-index: 9998; margin: 0; left: 0; top: 5px; opacity: 0; `; const HeaderButton = styled.button` cursor: pointer; color: #c2c6dc; text-decoration: underline; font-size: 14px; text-align: center; padding: 6px 10px; margin: 6px 0; background: none; outline: none; border: none; border-radius: 3px; &:hover { background: rgba(115, 103, 240); color: #fff; } `; const HeaderActions = styled.div` position: relative; text-align: center; & > button:first-child { float: left; } & > button:last-child { float: right; } `; const DueDateManager: React.FC = ({ task, onDueDateChange, onRemoveDueDate, onCancel }) => { const now = moment(); const [textStartDate, setTextStartDate] = useState(now.format('YYYY-MM-DD')); const [startDate, setStartDate] = useState(new Date()); useEffect(() => { setTextStartDate(moment(startDate).format('YYYY-MM-DD')); }, [startDate]); const [textEndTime, setTextEndTime] = useState(now.format('h:mm A')); const [endTime, setEndTime] = useState(now.toDate()); useEffect(() => { setTextEndTime(moment(endTime).format('h:mm A')); }, [endTime]); const years = _.range(2010, getYear(new Date()) + 10, 1); const months = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', ]; const { register, handleSubmit, errors, setValue, setError, formState, control } = useForm(); const saveDueDate = (data: any) => { const newDate = moment(`${data.endDate} ${data.endTime}`, 'YYYY-MM-DD h:mm A'); if (newDate.isValid()) { onDueDateChange(task, newDate.toDate()); } }; const CustomTimeInput = forwardRef(({ value, onClick }: any, $ref: any) => { return ( ); }); return (
( } /> )} /> ( Prev {months[date.getMonth()]} changeYear(parseInt(value, 10))} > {years.map(option => ( ))} {date.getFullYear()} changeMonth(months.indexOf(value))} > {months.map(option => ( ))} Next )} selected={startDate} inline onChange={date => { setStartDate(date ?? new Date()); }} /> Save { onRemoveDueDate(task); }} > Remove
); }; export default DueDateManager;