import React, { ChangeEvent } from 'react' export const DateInput = React.forwardRef< HTMLInputElement, { id?: string value?: string disabled?: boolean className?: string onChange: (value: string) => void onBlur?: React.FocusEventHandler onFocus?: React.FocusEventHandler onKeyDown?: React.KeyboardEventHandler showPlaceholder?: boolean } >((props, ref) => { const onChange = (event: ChangeEvent) => { let value = event.currentTarget.value value = value.replace(/[^0-9/]/, '') value = value.replace(/\/+/, '/') value = value.slice(0, 10) props.onChange(value) } const showPlaceholder = props.showPlaceholder ?? true return (
{showPlaceholder && }
) }) DateInput.displayName = 'DateInput' function Placeholder({ value }: { value: string }) { const ph = ['MM', 'DD', 'YYYY'] const parts = value.split('/') if (parts[0]) { if (parts[0][0] !== '0' && parts[0][0] !== '1') { ph[0] = 'M' } else if (parts[0][0] === '1' && parts[0].length < 2 && parts.length > 1) { ph[0] = 'M' } if (parts[0].length >= 2) { ph[0] = Array.from(new Array(parts[0].length)).fill('M').join('') } } if (parts.length === 3 && parts[1].length === 1) { ph[1] = 'D' } if (parts[1] && parts[1].length > 2) { ph[1] = Array.from(new Array(parts[1].length)).fill('D').join('') } return ( {value} {ph.join('/').slice(value.length)} ) }