@material-ui/lab
Version:
Material-UI Lab - Incubator for Material-UI React components.
85 lines (65 loc) • 3.26 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.makePickerWithStateAndWrapper = makePickerWithStateAndWrapper;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _Picker = _interopRequireDefault(require("./Picker"));
var _dateUtils = require("../date-utils");
var _withDefaultProps = require("../withDefaultProps");
var _KeyboardDateInput = require("../KeyboardDateInput");
var _withDateAdapterProp = require("../withDateAdapterProp");
var _makeWrapperComponent = require("../wrappers/makeWrapperComponent");
var _PureDateInput = require("../PureDateInput");
var _usePickerState = require("../hooks/usePickerState");
const valueManager = {
emptyValue: null,
parseInput: _dateUtils.parsePickerInputValue,
areValuesEqual: (utils, a, b) => utils.isEqual(a, b)
};
function makePickerWithStateAndWrapper(Wrapper, {
name,
useInterceptProps,
useValidation,
DefaultToolbarComponent
}) {
const WrapperComponent = (0, _makeWrapperComponent.makeWrapperComponent)(Wrapper, {
KeyboardDateInputComponent: _KeyboardDateInput.KeyboardDateInput,
PureDateInputComponent: _PureDateInput.PureDateInput
});
function PickerWithState(__props) {
const allProps = useInterceptProps(__props);
const validationError = useValidation(allProps.value, allProps) !== null;
const {
pickerProps,
inputProps,
wrapperProps
} = (0, _usePickerState.usePickerState)(allProps, valueManager); // Note that we are passing down all the value without spread.
// It saves us >1kb gzip and make any prop available automatically on any level down.
const other = (0, _objectWithoutPropertiesLoose2.default)(allProps, ["value", "onChange"]);
const AllDateInputProps = (0, _extends2.default)({}, inputProps, other, {
validationError
});
return /*#__PURE__*/React.createElement(WrapperComponent, (0, _extends2.default)({
wrapperProps: wrapperProps,
DateInputProps: AllDateInputProps
}, other), /*#__PURE__*/React.createElement(_Picker.default, (0, _extends2.default)({}, pickerProps, {
toolbarTitle: allProps.label || allProps.toolbarTitle,
ToolbarComponent: other.ToolbarComponent || DefaultToolbarComponent,
DateInputProps: AllDateInputProps
}, other)));
}
const FinalPickerComponent = (0, _withDefaultProps.withDefaultProps)({
name
}, (0, _withDateAdapterProp.withDateAdapterProp)(PickerWithState)); // tslint:disable-next-line
// @ts-ignore Simply ignore generic values in props, because it is impossible
// to keep generics without additional cast when using forwardRef
// @see https://github.com/DefinitelyTyped/DefinitelyTyped/issues/35834
return /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(FinalPickerComponent, (0, _extends2.default)({}, props, {
forwardedRef: ref
})));
}