UNPKG

@material-ui/lab

Version:

Material-UI Lab - Incubator for Material-UI React components.

97 lines (88 loc) 3.89 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose"; import * as React from 'react'; import { useUtils } from '../internal/pickers/hooks/useUtils'; import { withDefaultProps } from '../internal/pickers/withDefaultProps'; import { useParsedDate } from '../internal/pickers/hooks/date-helpers-hooks'; import { withDateAdapterProp } from '../internal/pickers/withDateAdapterProp'; import { makeWrapperComponent } from '../internal/pickers/wrappers/makeWrapperComponent'; import { defaultMinDate, defaultMaxDate } from '../internal/pickers/constants/prop-types'; import { makeValidationHook } from '../internal/pickers/hooks/useValidation'; import { usePickerState } from '../internal/pickers/hooks/usePickerState'; import { DateRangePickerView } from './DateRangePickerView'; import DateRangePickerInput from './DateRangePickerInput'; import { parseRangeInputValue, validateDateRange } from '../internal/pickers/date-utils'; export const useDateRangeValidation = makeValidationHook(validateDateRange, { defaultValidationError: [null, null], isSameError: (a, b) => a[1] === b[1] && a[0] === b[0] }); export function makeDateRangePicker(name, Wrapper) { const WrapperComponent = makeWrapperComponent(Wrapper, { KeyboardDateInputComponent: DateRangePickerInput, PureDateInputComponent: DateRangePickerInput }); const rangePickerValueManager = { emptyValue: [null, null], parseInput: parseRangeInputValue, areValuesEqual: (utils, a, b) => utils.isEqual(a[0], b[0]) && utils.isEqual(a[1], b[1]) }; function RangePickerWithStateAndWrapper(_ref) { let { calendars, value, onChange, mask = '__/__/____', startText = 'Start', endText = 'End', inputFormat: passedInputFormat, minDate: __minDate = defaultMinDate, maxDate: __maxDate = defaultMaxDate } = _ref, other = _objectWithoutPropertiesLoose(_ref, ["calendars", "value", "onChange", "mask", "startText", "endText", "inputFormat", "minDate", "maxDate"]); const utils = useUtils(); const minDate = useParsedDate(__minDate); const maxDate = useParsedDate(__maxDate); const [currentlySelectingRangeEnd, setCurrentlySelectingRangeEnd] = React.useState('start'); const pickerStateProps = _extends({}, other, { value, onChange, inputFormat: passedInputFormat || utils.formats.keyboardDate }); const restProps = _extends({}, other, { minDate, maxDate }); const { pickerProps, inputProps, wrapperProps } = usePickerState(pickerStateProps, rangePickerValueManager); const validationError = useDateRangeValidation(value, restProps); const DateInputProps = _extends({}, inputProps, restProps, { currentlySelectingRangeEnd, setCurrentlySelectingRangeEnd, startText, endText, mask, validationError }); return /*#__PURE__*/React.createElement(WrapperComponent, _extends({ wrapperProps: wrapperProps, DateInputProps: DateInputProps }, restProps), /*#__PURE__*/React.createElement(DateRangePickerView, _extends({ open: wrapperProps.open, DateInputProps: DateInputProps, calendars: calendars, currentlySelectingRangeEnd: currentlySelectingRangeEnd, setCurrentlySelectingRangeEnd: setCurrentlySelectingRangeEnd, startText: startText, endText: endText }, pickerProps, restProps))); } const FinalPickerComponent = withDefaultProps({ name }, withDateAdapterProp(RangePickerWithStateAndWrapper)); // @ts-expect-error Impossible to save component generics when wrapping with HOC return /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(FinalPickerComponent, _extends({}, props, { forwardedRef: ref }))); }