UNPKG

@material-ui/lab

Version:

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

109 lines (98 loc) 4.69 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; 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 var useDateRangeValidation = makeValidationHook(validateDateRange, { defaultValidationError: [null, null], isSameError: function isSameError(a, b) { return a[1] === b[1] && a[0] === b[0]; } }); export function makeDateRangePicker(name, Wrapper) { var WrapperComponent = makeWrapperComponent(Wrapper, { KeyboardDateInputComponent: DateRangePickerInput, PureDateInputComponent: DateRangePickerInput }); var rangePickerValueManager = { emptyValue: [null, null], parseInput: parseRangeInputValue, areValuesEqual: function areValuesEqual(utils, a, b) { return utils.isEqual(a[0], b[0]) && utils.isEqual(a[1], b[1]); } }; function RangePickerWithStateAndWrapper(_ref) { var calendars = _ref.calendars, value = _ref.value, onChange = _ref.onChange, _ref$mask = _ref.mask, mask = _ref$mask === void 0 ? '__/__/____' : _ref$mask, _ref$startText = _ref.startText, startText = _ref$startText === void 0 ? 'Start' : _ref$startText, _ref$endText = _ref.endText, endText = _ref$endText === void 0 ? 'End' : _ref$endText, passedInputFormat = _ref.inputFormat, _ref$minDate = _ref.minDate, __minDate = _ref$minDate === void 0 ? defaultMinDate : _ref$minDate, _ref$maxDate = _ref.maxDate, __maxDate = _ref$maxDate === void 0 ? defaultMaxDate : _ref$maxDate, other = _objectWithoutProperties(_ref, ["calendars", "value", "onChange", "mask", "startText", "endText", "inputFormat", "minDate", "maxDate"]); var utils = useUtils(); var minDate = useParsedDate(__minDate); var maxDate = useParsedDate(__maxDate); var _React$useState = React.useState('start'), currentlySelectingRangeEnd = _React$useState[0], setCurrentlySelectingRangeEnd = _React$useState[1]; var pickerStateProps = _extends({}, other, { value: value, onChange: onChange, inputFormat: passedInputFormat || utils.formats.keyboardDate }); var restProps = _extends({}, other, { minDate: minDate, maxDate: maxDate }); var _usePickerState = usePickerState(pickerStateProps, rangePickerValueManager), pickerProps = _usePickerState.pickerProps, inputProps = _usePickerState.inputProps, wrapperProps = _usePickerState.wrapperProps; var validationError = useDateRangeValidation(value, restProps); var DateInputProps = _extends({}, inputProps, restProps, { currentlySelectingRangeEnd: currentlySelectingRangeEnd, setCurrentlySelectingRangeEnd: setCurrentlySelectingRangeEnd, startText: startText, endText: endText, mask: mask, validationError: 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))); } var FinalPickerComponent = withDefaultProps({ name: name }, withDateAdapterProp(RangePickerWithStateAndWrapper)); // @ts-expect-error Impossible to save component generics when wrapping with HOC return /*#__PURE__*/React.forwardRef(function (props, ref) { return /*#__PURE__*/React.createElement(FinalPickerComponent, _extends({}, props, { forwardedRef: ref })); }); }