import React from 'react'; import { TextFieldProps } from '@mui/material'; import { useDefaultProps } from '@mui/material/DefaultPropsProvider'; import { DateTimePicker as MuiDateTimePicker, DateTimePickerProps as MuiDateTimePickerProps } from '@mui/x-date-pickers'; import { isNil } from 'lodash'; import PickersLocalizationProvider, { PickersLocalizationProviderProps } from '../shared/PickersLocalizationProvider'; export type DateTimePickerProps< TLocale = any, TEnableAccessibleFieldDOMStructure extends boolean = true > = MuiDateTimePickerProps & PickersLocalizationProviderProps & { required?: boolean; error?: boolean; helperText?: string; variant?: TextFieldProps['variant']; size?: TextFieldProps['size']; color?: TextFieldProps['color']; onBlur?: () => void; }; const DateTimePicker = ( inProps: DateTimePickerProps ) => { const { required, dateAdapter, helperText, adapterLocale, value, disabled, onOpen, onClose, open, onBlur, error, variant, size, color, ...props } = useDefaultProps({ name: 'ReevolveDateTimePicker', props: inProps }); const [openCalendar, setOpenCalendar] = React.useState(false); return ( { onOpen?.(); if (isNil(open)) { setOpenCalendar(true); } }} onClose={() => { onClose?.(); if (isNil(open)) { setOpenCalendar(false); } onBlur?.(); }} {...props} slotProps={{ ...props.slotProps, textField: { onKeyDown(e) { e.preventDefault(); }, ...(!disabled && { onClick: () => { onOpen?.(); if (isNil(open)) { setOpenCalendar(true); } } }), required: required, helperText: helperText, error: error, variant: variant as any, size, color, fullWidth: true, ...props.slotProps?.textField } }} value={value ?? null} /> ); }; declare module '@mui/material' { interface Components { ReevolveDateTimePicker?: { defaultProps?: Partial; }; } } export default DateTimePicker;