UNPKG

@mui/x-date-pickers

Version:

The community edition of the Date and Time Picker components (MUI X).

449 lines (446 loc) 17.8 kB
"use strict"; 'use client'; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.MobileDateTimePicker = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var React = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _resolveComponentProps = _interopRequireDefault(require("@mui/utils/resolveComponentProps")); var _utils = require("@mui/utils"); var _valueManagers = require("../internals/utils/valueManagers"); var _DateTimeField = require("../DateTimeField"); var _shared = require("../DateTimePicker/shared"); var _usePickersTranslations = require("../hooks/usePickersTranslations"); var _useUtils = require("../internals/hooks/useUtils"); var _validation = require("../validation"); var _useMobilePicker = require("../internals/hooks/useMobilePicker"); var _dateViewRenderers = require("../dateViewRenderers"); var _timeViewRenderers = require("../timeViewRenderers"); var _dateTimeUtils = require("../internals/utils/date-time-utils"); var _getPickersLocalization = require("../locales/utils/getPickersLocalization"); /** * Demos: * * - [DateTimePicker](https://mui.com/x/react-date-pickers/date-time-picker/) * - [Validation](https://mui.com/x/react-date-pickers/validation/) * * API: * * - [MobileDateTimePicker API](https://mui.com/x/api/date-pickers/mobile-date-time-picker/) */ const MobileDateTimePicker = exports.MobileDateTimePicker = /*#__PURE__*/React.forwardRef(function MobileDateTimePicker(inProps, ref) { const translations = (0, _usePickersTranslations.usePickersTranslations)(); const utils = (0, _useUtils.useUtils)(); // Props with the default values common to all date time pickers const defaultizedProps = (0, _shared.useDateTimePickerDefaultizedProps)(inProps, 'MuiMobileDateTimePicker'); const viewRenderers = (0, _extends2.default)({ day: _dateViewRenderers.renderDateViewCalendar, month: _dateViewRenderers.renderDateViewCalendar, year: _dateViewRenderers.renderDateViewCalendar, hours: _timeViewRenderers.renderTimeViewClock, minutes: _timeViewRenderers.renderTimeViewClock, seconds: _timeViewRenderers.renderTimeViewClock }, defaultizedProps.viewRenderers); const ampmInClock = defaultizedProps.ampmInClock ?? false; // Props with the default values specific to the mobile variant const props = (0, _extends2.default)({}, defaultizedProps, { viewRenderers, format: (0, _dateTimeUtils.resolveDateTimeFormat)(utils, defaultizedProps), ampmInClock, slots: (0, _extends2.default)({ field: _DateTimeField.DateTimeField }, defaultizedProps.slots), slotProps: (0, _extends2.default)({}, defaultizedProps.slotProps, { field: ownerState => (0, _extends2.default)({}, (0, _resolveComponentProps.default)(defaultizedProps.slotProps?.field, ownerState), (0, _validation.extractValidationProps)(defaultizedProps), { ref }), toolbar: (0, _extends2.default)({ hidden: false, ampmInClock }, defaultizedProps.slotProps?.toolbar), tabs: (0, _extends2.default)({ hidden: false }, defaultizedProps.slotProps?.tabs) }) }); const { renderPicker } = (0, _useMobilePicker.useMobilePicker)({ props, valueManager: _valueManagers.singleItemValueManager, valueType: 'date-time', getOpenDialogAriaText: (0, _getPickersLocalization.buildGetOpenDialogAriaText)({ utils, formatKey: 'fullDate', contextTranslation: translations.openDatePickerDialogue, propsTranslation: props.localeText?.openDatePickerDialogue }), validator: _validation.validateDateTime }); return renderPicker(); }); MobileDateTimePicker.propTypes = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | // | To update them edit the TypeScript types and run "pnpm proptypes" | // ---------------------------------------------------------------------- /** * 12h/24h view for hour selection clock. * @default utils.is12HourCycleInCurrentLocale() */ ampm: _propTypes.default.bool, /** * Display ampm controls under the clock (instead of in the toolbar). * @default true on desktop, false on mobile */ ampmInClock: _propTypes.default.bool, /** * If `true`, the main element is focused during the first mount. * This main element is: * - the element chosen by the visible view if any (i.e: the selected day on the `day` view). * - the `input` element if there is a field rendered. */ autoFocus: _propTypes.default.bool, className: _propTypes.default.string, /** * If `true`, the popover or modal will close after submitting the full date. * @default `true` for desktop, `false` for mobile (based on the chosen wrapper and `desktopModeMediaQuery` prop). */ closeOnSelect: _propTypes.default.bool, /** * Formats the day of week displayed in the calendar header. * @param {TDate} date The date of the day of week provided by the adapter. * @returns {string} The name to display. * @default (date: TDate) => adapter.format(date, 'weekdayShort').charAt(0).toUpperCase() */ dayOfWeekFormatter: _propTypes.default.func, /** * The default value. * Used when the component is not controlled. */ defaultValue: _propTypes.default.object, /** * If `true`, the picker and text field are disabled. * @default false */ disabled: _propTypes.default.bool, /** * If `true`, disable values after the current date for date components, time for time components and both for date time components. * @default false */ disableFuture: _propTypes.default.bool, /** * If `true`, today's date is rendering without highlighting with circle. * @default false */ disableHighlightToday: _propTypes.default.bool, /** * Do not ignore date part when validating min/max time. * @default false */ disableIgnoringDatePartForTimeValidation: _propTypes.default.bool, /** * If `true`, the open picker button will not be rendered (renders only the field). * @default false */ disableOpenPicker: _propTypes.default.bool, /** * If `true`, disable values before the current date for date components, time for time components and both for date time components. * @default false */ disablePast: _propTypes.default.bool, /** * If `true`, the week number will be display in the calendar. */ displayWeekNumber: _propTypes.default.bool, /** * @default false */ enableAccessibleFieldDOMStructure: _propTypes.default.any, /** * The day view will show as many weeks as needed after the end of the current month to match this value. * Put it to 6 to have a fixed number of weeks in Gregorian calendars */ fixedWeekNumber: _propTypes.default.number, /** * Format of the date when rendered in the input(s). * Defaults to localized format based on the used `views`. */ format: _propTypes.default.string, /** * Density of the format when rendered in the input. * Setting `formatDensity` to `"spacious"` will add a space before and after each `/`, `-` and `.` character. * @default "dense" */ formatDensity: _propTypes.default.oneOf(['dense', 'spacious']), /** * Pass a ref to the `input` element. */ inputRef: _utils.refType, /** * The label content. */ label: _propTypes.default.node, /** * If `true`, calls `renderLoading` instead of rendering the day calendar. * Can be used to preload information and show it in calendar. * @default false */ loading: _propTypes.default.bool, /** * Locale for components texts. * Allows overriding texts coming from `LocalizationProvider` and `theme`. */ localeText: _propTypes.default.object, /** * Maximal selectable date. * @default 2099-12-31 */ maxDate: _propTypes.default.object, /** * Maximal selectable moment of time with binding to date, to set max time in each day use `maxTime`. */ maxDateTime: _propTypes.default.object, /** * Maximal selectable time. * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`. */ maxTime: _propTypes.default.object, /** * Minimal selectable date. * @default 1900-01-01 */ minDate: _propTypes.default.object, /** * Minimal selectable moment of time with binding to date, to set min time in each day use `minTime`. */ minDateTime: _propTypes.default.object, /** * Minimal selectable time. * The date part of the object will be ignored unless `props.disableIgnoringDatePartForTimeValidation === true`. */ minTime: _propTypes.default.object, /** * Step over minutes. * @default 1 */ minutesStep: _propTypes.default.number, /** * Months rendered per row. * @default 3 */ monthsPerRow: _propTypes.default.oneOf([3, 4]), /** * Name attribute used by the `input` element in the Field. */ name: _propTypes.default.string, /** * Callback fired when the value is accepted. * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value. * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value. * @param {TValue} value The value that was just accepted. * @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value. */ onAccept: _propTypes.default.func, /** * Callback fired when the value changes. * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value. * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value. * @param {TValue} value The new value. * @param {FieldChangeHandlerContext<TError>} context The context containing the validation result of the current value. */ onChange: _propTypes.default.func, /** * Callback fired when the popup requests to be closed. * Use in controlled mode (see `open`). */ onClose: _propTypes.default.func, /** * Callback fired when the error associated with the current value changes. * When a validation error is detected, the `error` parameter contains a non-null value. * This can be used to render an appropriate form error. * @template TError The validation error type. It will be either `string` or a `null`. It can be in `[start, end]` format in case of range value. * @template TValue The value type. It will be the same type as `value` or `null`. It can be in `[start, end]` format in case of range value. * @param {TError} error The reason why the current value is not valid. * @param {TValue} value The value associated with the error. */ onError: _propTypes.default.func, /** * Callback fired on month change. * @template TDate * @param {TDate} month The new month. */ onMonthChange: _propTypes.default.func, /** * Callback fired when the popup requests to be opened. * Use in controlled mode (see `open`). */ onOpen: _propTypes.default.func, /** * Callback fired when the selected sections change. * @param {FieldSelectedSections} newValue The new selected sections. */ onSelectedSectionsChange: _propTypes.default.func, /** * Callback fired on view change. * @template TView * @param {TView} view The new view. */ onViewChange: _propTypes.default.func, /** * Callback fired on year change. * @template TDate * @param {TDate} year The new year. */ onYearChange: _propTypes.default.func, /** * Control the popup or dialog open state. * @default false */ open: _propTypes.default.bool, /** * The default visible view. * Used when the component view is not controlled. * Must be a valid option from `views` list. */ openTo: _propTypes.default.oneOf(['day', 'hours', 'minutes', 'month', 'seconds', 'year']), /** * Force rendering in particular orientation. */ orientation: _propTypes.default.oneOf(['landscape', 'portrait']), readOnly: _propTypes.default.bool, /** * If `true`, disable heavy animations. * @default `@media(prefers-reduced-motion: reduce)` || `navigator.userAgent` matches Android <10 or iOS <13 */ reduceAnimations: _propTypes.default.bool, /** * The date used to generate the new value when both `value` and `defaultValue` are empty. * @default The closest valid date-time using the validation props, except callbacks like `shouldDisable<...>`. */ referenceDate: _propTypes.default.object, /** * Component displaying when passed `loading` true. * @returns {React.ReactNode} The node to render when loading. * @default () => <span>...</span> */ renderLoading: _propTypes.default.func, /** * The currently selected sections. * This prop accepts four formats: * 1. If a number is provided, the section at this index will be selected. * 2. If a string of type `FieldSectionType` is provided, the first section with that name will be selected. * 3. If `"all"` is provided, all the sections will be selected. * 4. If `null` is provided, no section will be selected. * If not provided, the selected sections will be handled internally. */ selectedSections: _propTypes.default.oneOfType([_propTypes.default.oneOf(['all', 'day', 'empty', 'hours', 'meridiem', 'minutes', 'month', 'seconds', 'weekDay', 'year']), _propTypes.default.number]), /** * Disable specific date. * * Warning: This function can be called multiple times (for example when rendering date calendar, checking if focus can be moved to a certain date, etc.). Expensive computations can impact performance. * * @template TDate * @param {TDate} day The date to test. * @returns {boolean} If `true` the date will be disabled. */ shouldDisableDate: _propTypes.default.func, /** * Disable specific month. * @template TDate * @param {TDate} month The month to test. * @returns {boolean} If `true`, the month will be disabled. */ shouldDisableMonth: _propTypes.default.func, /** * Disable specific time. * @template TDate * @param {TDate} value The value to check. * @param {TimeView} view The clock type of the timeValue. * @returns {boolean} If `true` the time will be disabled. */ shouldDisableTime: _propTypes.default.func, /** * Disable specific year. * @template TDate * @param {TDate} year The year to test. * @returns {boolean} If `true`, the year will be disabled. */ shouldDisableYear: _propTypes.default.func, /** * If `true`, days outside the current month are rendered: * * - if `fixedWeekNumber` is defined, renders days to have the weeks requested. * * - if `fixedWeekNumber` is not defined, renders day to fill the first and last week of the current month. * * - ignored if `calendars` equals more than `1` on range pickers. * @default false */ showDaysOutsideCurrentMonth: _propTypes.default.bool, /** * The props used for each component slot. * @default {} */ slotProps: _propTypes.default.object, /** * Overridable component slots. * @default {} */ slots: _propTypes.default.object, /** * The system prop that allows defining system overrides as well as additional CSS styles. */ sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]), /** * Choose which timezone to use for the value. * Example: "default", "system", "UTC", "America/New_York". * If you pass values from other timezones to some props, they will be converted to this timezone before being used. * @see See the {@link https://mui.com/x/react-date-pickers/timezone/ timezones documentation} for more details. * @default The timezone of the `value` or `defaultValue` prop is defined, 'default' otherwise. */ timezone: _propTypes.default.string, /** * The selected value. * Used when the component is controlled. */ value: _propTypes.default.object, /** * The visible view. * Used when the component view is controlled. * Must be a valid option from `views` list. */ view: _propTypes.default.oneOf(['day', 'hours', 'minutes', 'month', 'seconds', 'year']), /** * Define custom view renderers for each section. * If `null`, the section will only have field editing. * If `undefined`, internally defined view will be used. */ viewRenderers: _propTypes.default.shape({ day: _propTypes.default.func, hours: _propTypes.default.func, minutes: _propTypes.default.func, month: _propTypes.default.func, seconds: _propTypes.default.func, year: _propTypes.default.func }), /** * Available views. */ views: _propTypes.default.arrayOf(_propTypes.default.oneOf(['day', 'hours', 'minutes', 'month', 'seconds', 'year']).isRequired), /** * Years are displayed in ascending (chronological) order by default. * If `desc`, years are displayed in descending order. * @default 'asc' */ yearsOrder: _propTypes.default.oneOf(['asc', 'desc']), /** * Years rendered per row. * @default 3 */ yearsPerRow: _propTypes.default.oneOf([3, 4]) };