@mui/x-date-pickers-pro
Version:
The Pro plan edition of the MUI X Date and Time Picker components.
90 lines • 3.65 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["props", "steps"],
_excluded2 = ["ownerState"];
import useSlotProps from '@mui/utils/useSlotProps';
import useEventCallback from '@mui/utils/useEventCallback';
import { useLicenseVerifier } from '@mui/x-license/internals';
import { PickersLayout } from '@mui/x-date-pickers/PickersLayout';
import { usePicker, PickerPopper, PickerProvider } from '@mui/x-date-pickers/internals';
import { useRangePosition } from "../useRangePosition.mjs";
import { PickerRangePositionContext } from "../../../hooks/usePickerRangePositionContext.mjs";
import { getRangeFieldType } from "../../utils/date-fields-utils.mjs";
import { createRangePickerStepNavigation } from "../../utils/createRangePickerStepNavigation.mjs";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
export const useDesktopRangePicker = _ref => {
let {
props,
steps
} = _ref,
pickerParams = _objectWithoutPropertiesLoose(_ref, _excluded);
useLicenseVerifier({
releaseDate: "MTc3NTYwNjQwMDAwMA==",
version: "9.0.0",
name: 'x-date-pickers-pro'
});
const {
slots,
slotProps,
inputRef,
localeText
} = props;
const fieldType = getRangeFieldType(slots.field);
const isSingleInput = fieldType === 'single-input';
// When keepOpenDuringFieldFocus is enabled, we want the popper to behave like a tooltip
// so focus is not trapped inside the views and the user can click back into the field.
// Dialog only when focus trapping is desired (single input without the keep-open behavior).
const viewContainerRole = props.keepOpenDuringFieldFocus || !isSingleInput ? 'tooltip' : 'dialog';
const rangePositionResponse = useRangePosition(props);
const getStepNavigation = createRangePickerStepNavigation({
steps,
rangePositionResponse
});
const {
providerProps,
renderCurrentView,
ownerState
} = usePicker(_extends({}, pickerParams, {
props,
variant: 'desktop',
autoFocusView: viewContainerRole === 'dialog',
viewContainerRole,
localeText,
getStepNavigation,
onPopperExited: useEventCallback(() => rangePositionResponse.setRangePosition(props.defaultRangePosition ?? 'start'))
}));
const Field = slots.field;
const _useSlotProps = useSlotProps({
elementType: Field,
externalSlotProps: slotProps?.field,
ownerState,
additionalProps: {
'data-active-range-position': providerProps.contextValue.open ? rangePositionResponse.rangePosition : undefined
}
}),
fieldProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
const Layout = slots?.layout ?? PickersLayout;
const renderPicker = () => /*#__PURE__*/_jsx(PickerProvider, _extends({}, providerProps, {
children: /*#__PURE__*/_jsxs(PickerRangePositionContext.Provider, {
value: rangePositionResponse,
children: [/*#__PURE__*/_jsx(Field, _extends({}, fieldProps, {
slots: _extends({}, slots, fieldProps.slots),
slotProps: _extends({}, slotProps, fieldProps.slotProps)
}, isSingleInput && {
inputRef
})), /*#__PURE__*/_jsx(PickerPopper, {
slots: slots,
slotProps: slotProps,
children: /*#__PURE__*/_jsx(Layout, _extends({}, slotProps?.layout, {
slots: slots,
slotProps: slotProps,
children: renderCurrentView()
}))
})]
})
}));
if (process.env.NODE_ENV !== "production") renderPicker.displayName = "renderPicker";
return {
renderPicker
};
};