stupa-pdf-api/frontend/node_modules/@mui/x-date-pickers/internals/hooks/useDesktopPicker/useDesktopPicker.js

176 lines
6.1 KiB
JavaScript

import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["props", "getOpenDialogAriaText"],
_excluded2 = ["ownerState"],
_excluded3 = ["ownerState"];
import * as React from 'react';
import { useSlotProps } from '@mui/base/utils';
import MuiInputAdornment from '@mui/material/InputAdornment';
import IconButton from '@mui/material/IconButton';
import useForkRef from '@mui/utils/useForkRef';
import useId from '@mui/utils/useId';
import { PickersPopper } from '../../components/PickersPopper';
import { useUtils } from '../useUtils';
import { usePicker } from '../usePicker';
import { LocalizationProvider } from '../../../LocalizationProvider';
import { PickersLayout } from '../../../PickersLayout';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
/**
* Hook managing all the single-date desktop pickers:
* - DesktopDatePicker
* - DesktopDateTimePicker
* - DesktopTimePicker
*/
export const useDesktopPicker = _ref => {
var _innerSlotProps$toolb, _innerSlotProps$toolb2, _slots$inputAdornment, _slots$openPickerButt, _slots$layout;
let {
props,
getOpenDialogAriaText
} = _ref,
pickerParams = _objectWithoutPropertiesLoose(_ref, _excluded);
const {
slots,
slotProps: innerSlotProps,
className,
sx,
format,
formatDensity,
timezone,
name,
label,
inputRef,
readOnly,
disabled,
autoFocus,
localeText,
reduceAnimations
} = props;
const utils = useUtils();
const internalInputRef = React.useRef(null);
const containerRef = React.useRef(null);
const labelId = useId();
const isToolbarHidden = (_innerSlotProps$toolb = innerSlotProps == null || (_innerSlotProps$toolb2 = innerSlotProps.toolbar) == null ? void 0 : _innerSlotProps$toolb2.hidden) != null ? _innerSlotProps$toolb : false;
const {
open,
actions,
hasUIView,
layoutProps,
renderCurrentView,
shouldRestoreFocus,
fieldProps: pickerFieldProps
} = usePicker(_extends({}, pickerParams, {
props,
inputRef: internalInputRef,
autoFocusView: true,
additionalViewProps: {},
wrapperVariant: 'desktop'
}));
const InputAdornment = (_slots$inputAdornment = slots.inputAdornment) != null ? _slots$inputAdornment : MuiInputAdornment;
const _useSlotProps = useSlotProps({
elementType: InputAdornment,
externalSlotProps: innerSlotProps == null ? void 0 : innerSlotProps.inputAdornment,
additionalProps: {
position: 'end'
},
ownerState: props
}),
inputAdornmentProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2);
const OpenPickerButton = (_slots$openPickerButt = slots.openPickerButton) != null ? _slots$openPickerButt : IconButton;
const _useSlotProps2 = useSlotProps({
elementType: OpenPickerButton,
externalSlotProps: innerSlotProps == null ? void 0 : innerSlotProps.openPickerButton,
additionalProps: {
disabled: disabled || readOnly,
onClick: open ? actions.onClose : actions.onOpen,
'aria-label': getOpenDialogAriaText(pickerFieldProps.value, utils),
edge: inputAdornmentProps.position
},
ownerState: props
}),
openPickerButtonProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3);
const OpenPickerIcon = slots.openPickerIcon;
const Field = slots.field;
const fieldProps = useSlotProps({
elementType: Field,
externalSlotProps: innerSlotProps == null ? void 0 : innerSlotProps.field,
additionalProps: _extends({}, pickerFieldProps, isToolbarHidden && {
id: labelId
}, {
readOnly,
disabled,
className,
sx,
format,
formatDensity,
timezone,
label,
name,
autoFocus: autoFocus && !props.open,
focused: open ? true : undefined
}),
ownerState: props
});
// TODO: Move to `useSlotProps` when https://github.com/mui/material-ui/pull/35088 will be merged
if (hasUIView) {
fieldProps.InputProps = _extends({}, fieldProps.InputProps, {
ref: containerRef
}, !props.disableOpenPicker && {
[`${inputAdornmentProps.position}Adornment`]: /*#__PURE__*/_jsx(InputAdornment, _extends({}, inputAdornmentProps, {
children: /*#__PURE__*/_jsx(OpenPickerButton, _extends({}, openPickerButtonProps, {
children: /*#__PURE__*/_jsx(OpenPickerIcon, _extends({}, innerSlotProps == null ? void 0 : innerSlotProps.openPickerIcon))
}))
}))
});
}
const slotsForField = _extends({
textField: slots.textField,
clearIcon: slots.clearIcon,
clearButton: slots.clearButton
}, fieldProps.slots);
const Layout = (_slots$layout = slots.layout) != null ? _slots$layout : PickersLayout;
const handleInputRef = useForkRef(internalInputRef, fieldProps.inputRef, inputRef);
let labelledById = labelId;
if (isToolbarHidden) {
if (label) {
labelledById = `${labelId}-label`;
} else {
labelledById = undefined;
}
}
const slotProps = _extends({}, innerSlotProps, {
toolbar: _extends({}, innerSlotProps == null ? void 0 : innerSlotProps.toolbar, {
titleId: labelId
}),
popper: _extends({
'aria-labelledby': labelledById
}, innerSlotProps == null ? void 0 : innerSlotProps.popper)
});
const renderPicker = () => /*#__PURE__*/_jsxs(LocalizationProvider, {
localeText: localeText,
children: [/*#__PURE__*/_jsx(Field, _extends({}, fieldProps, {
slots: slotsForField,
slotProps: slotProps,
inputRef: handleInputRef
})), /*#__PURE__*/_jsx(PickersPopper, _extends({
role: "dialog",
placement: "bottom-start",
anchorEl: containerRef.current
}, actions, {
open: open,
slots: slots,
slotProps: slotProps,
shouldRestoreFocus: shouldRestoreFocus,
reduceAnimations: reduceAnimations,
children: /*#__PURE__*/_jsx(Layout, _extends({}, layoutProps, slotProps == null ? void 0 : slotProps.layout, {
slots: slots,
slotProps: slotProps,
children: renderCurrentView()
}))
}))]
});
return {
renderPicker
};
};