import React, { useState, useEffect } from 'react'; import { Icon, iconTypes } from '../Icon'; import { SpanStyled } from './DatePicker.styles'; import InputStyles from '../Input/Input.styles'; import color from '../../styles/colors'; import { DatePickerProps } from './types'; const { DivWrapperStyled, InputStyled, LabelStyled, StrongStyled } = InputStyles; const DatePicker: React.FC = ({ disabled = false, id, label, name = 'Select a date', onChange, state = disabled ? 'disabled' : undefined, type = 'date', validation, value = new Date().toISOString().substring(0, type === 'date' ? 10 : 7), ...props }) => { const [current, setCurrent] = useState(value); const [currentState, setCurrentState] = useState(state); const [invalidMessage, setInvalidMessage] = useState(''); useEffect(() => setCurrentState(state), [state]); const dateChanged = (event: React.ChangeEvent) => { setCurrent(event?.target?.value); onChange && event?.target?.valueAsDate && onChange({ date: event?.target?.valueAsDate, event: event, }); }; const hasValidation = () => Boolean( validation?.required || validation?.max || validation?.min || validation?.required, ); const validate = (event: React.FocusEvent) => { if (!hasValidation()) return; // check for HTML validation if (!event?.target.checkValidity()) { setInvalidMessage(event?.target.validationMessage); setCurrentState('error'); return; } // if all pass but the Input is in error state if (currentState === 'error') { setCurrentState('confirmed'); setTimeout(() => setCurrentState('initial'), 3000); } }; return ( ) => validate(event) } onChange={dateChanged} required={validation?.required} type={type} value={current} /> {label && ( {label} )} {currentState === 'error' && ( {invalidMessage} )} ); }; export default DatePicker;