@material-ui/lab
Version:
Material-UI Lab - Incubator for Material-UI React components.
109 lines (98 loc) • 4.69 kB
JavaScript
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
}));
});
}