@mui/x-date-pickers-pro
Version:
The Pro plan edition of the MUI X Date and Time Picker components.
144 lines (143 loc) • 4.55 kB
JavaScript
'use client';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useMultiInputRangeField = useMultiInputRangeField;
var _internals = require("@mui/x-date-pickers/internals");
var _validation = require("@mui/x-date-pickers/validation");
var _useTextFieldProps = require("./useTextFieldProps");
var _useMultiInputRangeFieldSelectedSections = require("./useMultiInputRangeFieldSelectedSections");
var _useMultiInputRangeFieldRootProps = require("./useMultiInputRangeFieldRootProps");
/**
* Basic example:
*
* ```tsx
* import Box from '@mui/material/Box';
* import { useSplitFieldProps } from '@mui/x-date-pickers/hooks';
* import { PickersTextField } from '@mui/x-date-pickers/PickersTextField';
* import { useDateRangeManager } from '@mui/x-date-pickers-pro/managers';
*
* function MultiInputField(props) {
* const manager = useDateRangeManager();
* const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
* const response = useMultiInputRangeField({
* manager,
* internalProps,
* startTextFieldProps: {},
* endTextFieldProps: {},
* rootProps: forwardedProps,
* });
*
* return (
* <Box {...response.root}>
* <PickersTextField {...response.startTextField} />
* <span>{' – '}</span>
* <PickersTextField {...response.endTextField} />
* </Box>
* );
* }
* ```
*
* @param {UseMultiInputRangeFieldParameters<TManager, TTextFieldProps>} parameters The parameters of the hook.
* @param {TManager} parameters.manager The manager of the field.
* @param {PickerManagerFieldInternalProps<TManager>} parameters.internalProps The internal props of the field.
* @param {TTextFieldProps} parameters.startForwardedProps The forwarded props of the start field.
* @param {TTextFieldProps} parameters.endForwardedProps The forwarded props of the end field.
* @returns {UseMultiInputRangeFieldReturnValue<TManager, TTextFieldProps>} The props to pass to the start and the end components.
*/
function useMultiInputRangeField(parameters) {
const {
manager,
internalProps,
rootProps,
startTextFieldProps,
endTextFieldProps
} = parameters;
const internalPropsWithDefaults = (0, _internals.useFieldInternalPropsWithDefaults)({
manager,
internalProps
});
const {
value: valueProp,
defaultValue,
format,
formatDensity,
shouldRespectLeadingZeros,
onChange,
disabled,
readOnly,
selectedSections,
onSelectedSectionsChange,
timezone: timezoneProp,
enableAccessibleFieldDOMStructure,
autoFocus,
referenceDate,
unstableStartFieldRef,
unstableEndFieldRef
} = internalPropsWithDefaults;
const {
value,
handleValueChange,
timezone
} = (0, _internals.useControlledValue)({
name: 'useMultiInputRangeField',
timezone: timezoneProp,
value: valueProp,
defaultValue,
referenceDate,
onChange,
valueManager: manager.internal_valueManager
});
const validation = (0, _validation.useValidation)({
props: internalPropsWithDefaults,
value,
timezone,
validator: manager.validator,
onError: internalPropsWithDefaults.onError
});
const selectedSectionsResponse = (0, _useMultiInputRangeFieldSelectedSections.useMultiInputRangeFieldSelectedSections)({
selectedSections,
onSelectedSectionsChange,
unstableStartFieldRef,
unstableEndFieldRef
});
const sharedInternalProps = {
disabled,
readOnly,
timezone,
format,
formatDensity,
shouldRespectLeadingZeros,
enableAccessibleFieldDOMStructure
};
const rootResponse = (0, _useMultiInputRangeFieldRootProps.useMultiInputRangeFieldRootProps)(rootProps);
const startTextFieldResponse = (0, _useTextFieldProps.useTextFieldProps)({
valueType: manager.valueType,
position: 'start',
value,
onChange: handleValueChange,
autoFocus,
validation,
forwardedProps: startTextFieldProps,
selectedSectionProps: selectedSectionsResponse.start,
sharedInternalProps
});
const endTextFieldResponse = (0, _useTextFieldProps.useTextFieldProps)({
valueType: manager.valueType,
position: 'end',
value,
onChange: handleValueChange,
autoFocus,
validation,
forwardedProps: endTextFieldProps,
selectedSectionProps: selectedSectionsResponse.end,
sharedInternalProps
});
return {
root: rootResponse,
startTextField: startTextFieldResponse,
endTextField: endTextFieldResponse,
enableAccessibleFieldDOMStructure
};
}
;