UNPKG

@mui/x-date-pickers-pro

Version:

The Pro plan edition of the MUI X Date and Time Picker components.

90 lines 3.65 kB
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 }; };