@mui/x-date-pickers 8.0.0-alpha.1 → 8.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AdapterMoment/AdapterMoment.js +10 -0
- package/CHANGELOG.md +330 -7
- package/DateCalendar/DateCalendar.types.d.ts +2 -1
- package/DateCalendar/PickersFadeTransitionGroup.js +4 -6
- package/DateCalendar/PickersSlideTransition.js +12 -5
- package/DateCalendar/useCalendarState.d.ts +6 -4
- package/DateField/DateField.js +5 -4
- package/DateField/DateField.types.d.ts +10 -9
- package/DatePicker/DatePicker.types.d.ts +3 -3
- package/DatePicker/DatePickerToolbar.d.ts +3 -2
- package/DatePicker/shared.d.ts +6 -5
- package/DateTimeField/DateTimeField.js +5 -4
- package/DateTimeField/DateTimeField.types.d.ts +10 -10
- package/DateTimePicker/DateTimePicker.types.d.ts +3 -3
- package/DateTimePicker/DateTimePickerTabs.js +8 -6
- package/DateTimePicker/DateTimePickerToolbar.d.ts +2 -3
- package/DateTimePicker/shared.d.ts +6 -6
- package/DayCalendarSkeleton/DayCalendarSkeleton.js +10 -19
- package/DesktopDateTimePicker/DesktopDateTimePickerLayout.d.ts +2 -1
- package/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +10 -21
- package/MultiSectionDigitalClock/MultiSectionDigitalClock.types.d.ts +6 -6
- package/MultiSectionDigitalClock/MultiSectionDigitalClockSection.d.ts +4 -4
- package/PickersActionBar/PickersActionBar.js +8 -1
- package/PickersCalendarHeader/PickersCalendarHeader.js +8 -7
- package/PickersCalendarHeader/PickersCalendarHeader.types.d.ts +3 -4
- package/PickersLayout/PickersLayout.d.ts +7 -5
- package/PickersLayout/PickersLayout.js +22 -27
- package/PickersLayout/PickersLayout.types.d.ts +14 -15
- package/PickersLayout/usePickerLayout.d.ts +5 -4
- package/PickersLayout/usePickerLayout.js +19 -12
- package/PickersShortcuts/PickersShortcuts.d.ts +7 -6
- package/PickersShortcuts/PickersShortcuts.js +8 -1
- package/README.md +7 -4
- package/TimeField/TimeField.js +5 -4
- package/TimeField/TimeField.types.d.ts +10 -10
- package/TimePicker/TimePicker.types.d.ts +3 -3
- package/TimePicker/TimePickerToolbar.d.ts +2 -3
- package/TimePicker/shared.d.ts +6 -6
- package/hooks/useParsedFormat.d.ts +2 -2
- package/hooks/useParsedFormat.js +1 -1
- package/index.js +1 -1
- package/internals/components/PickerProvider.d.ts +2 -15
- package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -10
- package/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.types.d.ts +11 -8
- package/internals/components/PickersToolbar.d.ts +3 -3
- package/internals/hooks/useClockReferenceDate.d.ts +2 -1
- package/internals/hooks/useDesktopPicker/useDesktopPicker.types.d.ts +14 -14
- package/internals/hooks/useField/useField.d.ts +3 -3
- package/internals/hooks/useField/useField.types.d.ts +45 -45
- package/internals/hooks/useField/useField.utils.d.ts +4 -3
- package/internals/hooks/useField/useFieldCharacterEditing.d.ts +6 -5
- package/internals/hooks/useField/useFieldState.d.ts +9 -8
- package/internals/hooks/useField/useFieldState.js +0 -1
- package/internals/hooks/useField/useFieldV6TextField.d.ts +4 -3
- package/internals/hooks/useFieldOwnerState.d.ts +6 -0
- package/internals/hooks/useFieldOwnerState.js +12 -0
- package/internals/hooks/useMobilePicker/useMobilePicker.types.d.ts +11 -11
- package/internals/hooks/useOpenState.d.ts +3 -2
- package/internals/hooks/useOpenState.js +10 -9
- package/internals/hooks/usePicker/usePicker.d.ts +3 -3
- package/internals/hooks/usePicker/usePicker.js +4 -10
- package/internals/hooks/usePicker/usePicker.types.d.ts +7 -7
- package/internals/hooks/usePicker/usePickerProvider.d.ts +5 -6
- package/internals/hooks/usePicker/usePickerProvider.js +8 -10
- package/internals/hooks/usePicker/usePickerValue.d.ts +3 -2
- package/internals/hooks/usePicker/usePickerValue.js +22 -12
- package/internals/hooks/usePicker/usePickerValue.types.d.ts +51 -24
- package/internals/hooks/usePicker/usePickerViews.d.ts +10 -10
- package/internals/hooks/useStaticPicker/useStaticPicker.types.d.ts +5 -6
- package/internals/hooks/useValueWithTimezone.d.ts +5 -4
- package/internals/hooks/useViews.d.ts +5 -5
- package/internals/index.d.ts +4 -2
- package/internals/index.js +1 -0
- package/internals/models/fields.d.ts +6 -1
- package/internals/models/pickers.d.ts +1 -0
- package/internals/models/pickers.js +1 -0
- package/internals/models/props/basePickerProps.d.ts +4 -3
- package/internals/models/props/time.d.ts +2 -1
- package/internals/models/props/toolbar.d.ts +2 -1
- package/internals/models/value.d.ts +9 -0
- package/internals/utils/date-utils.d.ts +1 -1
- package/internals/utils/valueManagers.d.ts +4 -3
- package/locales/nlNL.js +7 -7
- package/models/adapters.d.ts +4 -4
- package/models/fields.d.ts +19 -5
- package/models/validation.d.ts +2 -1
- package/modern/AdapterMoment/AdapterMoment.js +10 -0
- package/modern/DateCalendar/PickersFadeTransitionGroup.js +4 -6
- package/modern/DateCalendar/PickersSlideTransition.js +12 -5
- package/modern/DateField/DateField.js +5 -4
- package/modern/DateTimeField/DateTimeField.js +5 -4
- package/modern/DateTimePicker/DateTimePickerTabs.js +8 -6
- package/modern/DayCalendarSkeleton/DayCalendarSkeleton.js +10 -19
- package/modern/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +10 -21
- package/modern/PickersActionBar/PickersActionBar.js +8 -1
- package/modern/PickersCalendarHeader/PickersCalendarHeader.js +8 -7
- package/modern/PickersLayout/PickersLayout.js +22 -27
- package/modern/PickersLayout/usePickerLayout.js +19 -12
- package/modern/PickersShortcuts/PickersShortcuts.js +8 -1
- package/modern/TimeField/TimeField.js +5 -4
- package/modern/hooks/useParsedFormat.js +1 -1
- package/modern/index.js +1 -1
- package/modern/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -10
- package/modern/internals/hooks/useField/useFieldState.js +0 -1
- package/modern/internals/hooks/useFieldOwnerState.js +12 -0
- package/modern/internals/hooks/useOpenState.js +10 -9
- package/modern/internals/hooks/usePicker/usePicker.js +4 -10
- package/modern/internals/hooks/usePicker/usePickerProvider.js +8 -10
- package/modern/internals/hooks/usePicker/usePickerValue.js +22 -12
- package/modern/internals/index.js +1 -0
- package/modern/internals/models/pickers.js +1 -0
- package/modern/locales/nlNL.js +7 -7
- package/modern/validation/useValidation.js +1 -1
- package/modern/validation/validateDate.js +8 -0
- package/modern/validation/validateDateTime.js +8 -0
- package/modern/validation/validateTime.js +8 -0
- package/node/AdapterMoment/AdapterMoment.js +10 -0
- package/node/DateCalendar/PickersFadeTransitionGroup.js +4 -6
- package/node/DateCalendar/PickersSlideTransition.js +12 -5
- package/node/DateField/DateField.js +5 -4
- package/node/DateTimeField/DateTimeField.js +5 -4
- package/node/DateTimePicker/DateTimePickerTabs.js +8 -6
- package/node/DayCalendarSkeleton/DayCalendarSkeleton.js +10 -19
- package/node/DesktopDateTimePicker/DesktopDateTimePickerLayout.js +11 -22
- package/node/PickersActionBar/PickersActionBar.js +8 -1
- package/node/PickersCalendarHeader/PickersCalendarHeader.js +8 -7
- package/node/PickersLayout/PickersLayout.js +22 -27
- package/node/PickersLayout/usePickerLayout.js +19 -12
- package/node/PickersShortcuts/PickersShortcuts.js +8 -1
- package/node/TimeField/TimeField.js +5 -4
- package/node/hooks/useParsedFormat.js +1 -1
- package/node/index.js +1 -1
- package/node/internals/components/PickersArrowSwitcher/PickersArrowSwitcher.js +11 -10
- package/node/internals/hooks/useField/useFieldState.js +0 -1
- package/node/internals/hooks/useFieldOwnerState.js +20 -0
- package/node/internals/hooks/useOpenState.js +10 -9
- package/node/internals/hooks/usePicker/usePicker.js +5 -10
- package/node/internals/hooks/usePicker/usePickerProvider.js +9 -11
- package/node/internals/hooks/usePicker/usePickerValue.js +22 -11
- package/node/internals/index.js +7 -0
- package/node/internals/models/pickers.js +5 -0
- package/node/locales/nlNL.js +7 -7
- package/node/validation/useValidation.js +1 -1
- package/node/validation/validateDate.js +8 -0
- package/node/validation/validateDateTime.js +8 -0
- package/node/validation/validateTime.js +8 -0
- package/package.json +2 -2
- package/themeAugmentation/overrides.d.ts +1 -1
- package/themeAugmentation/props.d.ts +3 -2
- package/validation/useValidation.d.ts +7 -6
- package/validation/useValidation.js +1 -1
- package/validation/validateDate.d.ts +12 -3
- package/validation/validateDate.js +8 -0
- package/validation/validateDateTime.d.ts +12 -4
- package/validation/validateDateTime.js +8 -0
- package/validation/validateTime.d.ts +12 -3
- package/validation/validateTime.js +8 -0
- package/internals/hooks/useIsLandscape.d.ts +0 -4
- package/internals/hooks/useIsLandscape.js +0 -35
- package/internals/hooks/usePicker/usePickerLayoutProps.d.ts +0 -32
- package/internals/hooks/usePicker/usePickerLayoutProps.js +0 -31
- package/modern/internals/hooks/useIsLandscape.js +0 -35
- package/modern/internals/hooks/usePicker/usePickerLayoutProps.js +0 -31
- package/node/internals/hooks/useIsLandscape.js +0 -43
- package/node/internals/hooks/usePicker/usePickerLayoutProps.js +0 -38
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import
|
|
3
|
-
import { SlotComponentProps } from '@mui/utils';
|
|
2
|
+
import type { TextFieldProps } from '@mui/material/TextField';
|
|
4
3
|
import { MakeRequired, SlotComponentPropsFromProps } from '@mui/x-internals/types';
|
|
5
4
|
import { BaseNonStaticPickerProps, BasePickerProps, BaseNonRangeNonStaticPickerProps } from '../../models/props/basePickerProps';
|
|
6
5
|
import { PickersModalDialogSlots, PickersModalDialogSlotProps } from '../../components/PickersModalDialog';
|
|
7
6
|
import { UsePickerParams } from '../usePicker';
|
|
8
|
-
import {
|
|
7
|
+
import { FieldOwnerState, PickerFieldSlotProps, PickerOwnerState, PickerValidDate } from '../../../models';
|
|
9
8
|
import { ExportedPickersLayoutSlots, ExportedPickersLayoutSlotProps, PickersLayoutSlotProps } from '../../../PickersLayout/PickersLayout.types';
|
|
10
9
|
import { UsePickerValueNonStaticProps } from '../usePicker/usePickerValue.types';
|
|
11
10
|
import { UsePickerViewsNonStaticProps, UsePickerViewsProps } from '../usePicker/usePickerViews';
|
|
12
|
-
import { DateOrTimeViewWithMeridiem } from '../../models';
|
|
13
|
-
|
|
11
|
+
import { DateOrTimeViewWithMeridiem, PickerValue } from '../../models';
|
|
12
|
+
import { PickersTextFieldProps } from '../../../PickersTextField';
|
|
13
|
+
export interface UseMobilePickerSlots<TView extends DateOrTimeViewWithMeridiem> extends PickersModalDialogSlots, ExportedPickersLayoutSlots<PickerValue, TView> {
|
|
14
14
|
/**
|
|
15
15
|
* Component used to enter the date with the keyboard.
|
|
16
16
|
*/
|
|
@@ -21,15 +21,15 @@ export interface UseMobilePickerSlots<TView extends DateOrTimeViewWithMeridiem>
|
|
|
21
21
|
*/
|
|
22
22
|
textField?: React.ElementType;
|
|
23
23
|
}
|
|
24
|
-
export interface ExportedUseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends PickersModalDialogSlotProps, ExportedPickersLayoutSlotProps<
|
|
25
|
-
field?: SlotComponentPropsFromProps<PickerFieldSlotProps<
|
|
26
|
-
textField?:
|
|
24
|
+
export interface ExportedUseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends PickersModalDialogSlotProps, ExportedPickersLayoutSlotProps<PickerValue, TView> {
|
|
25
|
+
field?: SlotComponentPropsFromProps<PickerFieldSlotProps<PickerValue, TEnableAccessibleFieldDOMStructure>, {}, PickerOwnerState>;
|
|
26
|
+
textField?: SlotComponentPropsFromProps<PickersTextFieldProps | TextFieldProps, {}, FieldOwnerState>;
|
|
27
27
|
}
|
|
28
|
-
export interface UseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<
|
|
28
|
+
export interface UseMobilePickerSlotProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean> extends ExportedUseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>, Pick<PickersLayoutSlotProps<PickerValue, TView>, 'toolbar'> {
|
|
29
29
|
}
|
|
30
30
|
export interface MobileOnlyPickerProps extends BaseNonStaticPickerProps, BaseNonRangeNonStaticPickerProps, UsePickerValueNonStaticProps, UsePickerViewsNonStaticProps {
|
|
31
31
|
}
|
|
32
|
-
export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, TExternalProps extends UsePickerViewsProps<any, TView, any, any>> extends BasePickerProps<
|
|
32
|
+
export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, TExternalProps extends UsePickerViewsProps<any, TView, any, any>> extends BasePickerProps<PickerValue, TView, TError, TExternalProps, {}>, MakeRequired<MobileOnlyPickerProps, 'format'> {
|
|
33
33
|
/**
|
|
34
34
|
* Overridable component slots.
|
|
35
35
|
* @default {}
|
|
@@ -41,7 +41,7 @@ export interface UseMobilePickerProps<TView extends DateOrTimeViewWithMeridiem,
|
|
|
41
41
|
*/
|
|
42
42
|
slotProps?: UseMobilePickerSlotProps<TView, TEnableAccessibleFieldDOMStructure>;
|
|
43
43
|
}
|
|
44
|
-
export interface UseMobilePickerParams<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseMobilePickerProps<TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParams<
|
|
44
|
+
export interface UseMobilePickerParams<TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TExternalProps extends UseMobilePickerProps<TView, TEnableAccessibleFieldDOMStructure, any, TExternalProps>> extends Pick<UsePickerParams<PickerValue, TView, TExternalProps, {}>, 'valueManager' | 'valueType' | 'validator'> {
|
|
45
45
|
props: TExternalProps;
|
|
46
46
|
getOpenDialogAriaText: (date: PickerValidDate | null) => string;
|
|
47
47
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
1
2
|
export interface OpenStateProps {
|
|
2
3
|
open?: boolean;
|
|
3
4
|
onOpen?: () => void;
|
|
4
5
|
onClose?: () => void;
|
|
5
6
|
}
|
|
6
7
|
export declare const useOpenState: ({ open, onOpen, onClose }: OpenStateProps) => {
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
open: boolean;
|
|
9
|
+
setOpen: (action: React.SetStateAction<boolean>) => void;
|
|
9
10
|
};
|
|
@@ -5,7 +5,7 @@ export const useOpenState = ({
|
|
|
5
5
|
onClose
|
|
6
6
|
}) => {
|
|
7
7
|
const isControllingOpenProp = React.useRef(typeof open === 'boolean').current;
|
|
8
|
-
const [openState,
|
|
8
|
+
const [openState, setOpenState] = React.useState(false);
|
|
9
9
|
|
|
10
10
|
// It is required to update inner state in useEffect in order to avoid situation when
|
|
11
11
|
// Our component is not mounted yet, but `open` state is set to `true` (for example initially opened)
|
|
@@ -14,22 +14,23 @@ export const useOpenState = ({
|
|
|
14
14
|
if (typeof open !== 'boolean') {
|
|
15
15
|
throw new Error('You must not mix controlling and uncontrolled mode for `open` prop');
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
setOpenState(open);
|
|
18
18
|
}
|
|
19
19
|
}, [isControllingOpenProp, open]);
|
|
20
|
-
const
|
|
20
|
+
const setOpen = React.useCallback(action => {
|
|
21
|
+
const newOpen = typeof action === 'function' ? action(openState) : action;
|
|
21
22
|
if (!isControllingOpenProp) {
|
|
22
|
-
|
|
23
|
+
setOpenState(newOpen);
|
|
23
24
|
}
|
|
24
|
-
if (
|
|
25
|
+
if (newOpen && onOpen) {
|
|
25
26
|
onOpen();
|
|
26
27
|
}
|
|
27
|
-
if (!
|
|
28
|
+
if (!newOpen && onClose) {
|
|
28
29
|
onClose();
|
|
29
30
|
}
|
|
30
|
-
}, [isControllingOpenProp, onOpen, onClose]);
|
|
31
|
+
}, [isControllingOpenProp, onOpen, onClose, openState]);
|
|
31
32
|
return {
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
open: openState,
|
|
34
|
+
setOpen
|
|
34
35
|
};
|
|
35
36
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { UsePickerParams, UsePickerProps, UsePickerResponse } from './usePicker.types';
|
|
2
|
-
import {
|
|
3
|
-
import { DateOrTimeViewWithMeridiem } from '../../models';
|
|
4
|
-
export declare const usePicker: <TValue
|
|
2
|
+
import { InferError } from '../../../models';
|
|
3
|
+
import { DateOrTimeViewWithMeridiem, PickerValidValue } from '../../models';
|
|
4
|
+
export declare const usePicker: <TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any, any>, TAdditionalProps extends {}>({ props, valueManager, valueType, variant, additionalViewProps, validator, autoFocusView, rendererInterceptor, fieldRef, localeText, }: UsePickerParams<TValue, TView, TExternalProps, TAdditionalProps>) => UsePickerResponse<TValue, TView, InferError<TExternalProps>>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
1
2
|
import { warnOnce } from '@mui/x-internals/warning';
|
|
2
3
|
import { usePickerValue } from "./usePickerValue.js";
|
|
3
4
|
import { usePickerViews } from "./usePickerViews.js";
|
|
4
|
-
import { usePickerLayoutProps } from "./usePickerLayoutProps.js";
|
|
5
5
|
import { usePickerProvider } from "./usePickerProvider.js";
|
|
6
6
|
export const usePicker = ({
|
|
7
7
|
props,
|
|
@@ -35,19 +35,13 @@ export const usePicker = ({
|
|
|
35
35
|
propsFromPickerValue: pickerValueResponse.viewProps,
|
|
36
36
|
rendererInterceptor
|
|
37
37
|
});
|
|
38
|
-
const pickerLayoutResponse = usePickerLayoutProps({
|
|
39
|
-
props,
|
|
40
|
-
variant,
|
|
41
|
-
propsFromPickerValue: pickerValueResponse.layoutProps,
|
|
42
|
-
propsFromPickerViews: pickerViewsResponse.layoutProps
|
|
43
|
-
});
|
|
44
38
|
const providerProps = usePickerProvider({
|
|
45
39
|
props,
|
|
46
|
-
pickerValueResponse,
|
|
47
40
|
localeText,
|
|
48
41
|
valueManager,
|
|
49
42
|
variant,
|
|
50
|
-
views: pickerViewsResponse.views
|
|
43
|
+
views: pickerViewsResponse.views,
|
|
44
|
+
paramsFromUsePickerValue: pickerValueResponse.provider
|
|
51
45
|
});
|
|
52
46
|
return {
|
|
53
47
|
// Picker value
|
|
@@ -59,7 +53,7 @@ export const usePicker = ({
|
|
|
59
53
|
hasUIView: pickerViewsResponse.hasUIView,
|
|
60
54
|
shouldRestoreFocus: pickerViewsResponse.shouldRestoreFocus,
|
|
61
55
|
// Picker layout
|
|
62
|
-
layoutProps:
|
|
56
|
+
layoutProps: _extends({}, pickerViewsResponse.layoutProps, pickerValueResponse.layoutProps),
|
|
63
57
|
// Picker provider
|
|
64
58
|
providerProps,
|
|
65
59
|
// Picker owner state
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { UsePickerValueParams, UsePickerValueProps, UsePickerValueBaseProps, UsePickerValueResponse } from './usePickerValue.types';
|
|
2
2
|
import { UsePickerViewsProps, UsePickerViewParams, UsePickerViewsResponse, UsePickerViewsBaseProps } from './usePickerViews';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { DateOrTimeViewWithMeridiem } from '../../models';
|
|
3
|
+
import { PickerOwnerState } from '../../../models';
|
|
4
|
+
import { DateOrTimeViewWithMeridiem, PickerValidValue } from '../../models';
|
|
6
5
|
import { UsePickerProviderParameters, UsePickerProviderProps, UsePickerProviderReturnValue } from './usePickerProvider';
|
|
7
6
|
/**
|
|
8
7
|
* Props common to all picker headless implementations.
|
|
9
8
|
*/
|
|
10
|
-
export interface UsePickerBaseProps<TValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueBaseProps<TValue, TError>, UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
|
|
9
|
+
export interface UsePickerBaseProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueBaseProps<TValue, TError>, UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
|
|
11
10
|
}
|
|
12
|
-
export interface UsePickerProps<TValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueProps<TValue, TError>, UsePickerViewsProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
|
|
11
|
+
export interface UsePickerProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerValueProps<TValue, TError>, UsePickerViewsProps<TValue, TView, TExternalProps, TAdditionalProps>, UsePickerProviderProps {
|
|
13
12
|
}
|
|
14
|
-
export interface UsePickerParams<TValue
|
|
13
|
+
export interface UsePickerParams<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerProps<TValue, TView, any, any, any>, TAdditionalProps extends {}> extends Pick<UsePickerValueParams<TValue, TExternalProps>, 'valueManager' | 'valueType' | 'variant' | 'validator'>, Pick<UsePickerViewParams<TValue, TView, TExternalProps, TAdditionalProps>, 'additionalViewProps' | 'autoFocusView' | 'rendererInterceptor' | 'fieldRef'>, Pick<UsePickerProviderParameters<TValue>, 'localeText'> {
|
|
15
14
|
props: TExternalProps;
|
|
16
15
|
}
|
|
17
|
-
export interface UsePickerResponse<TValue
|
|
16
|
+
export interface UsePickerResponse<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TError> extends Pick<UsePickerValueResponse<TValue, TError>, 'open' | 'actions' | 'fieldProps'>, Omit<UsePickerViewsResponse<TView>, 'layoutProps' | 'views'> {
|
|
18
17
|
ownerState: PickerOwnerState;
|
|
19
18
|
providerProps: UsePickerProviderReturnValue;
|
|
19
|
+
layoutProps: UsePickerValueResponse<TValue, TError>['layoutProps'] & UsePickerViewsResponse<TView>['layoutProps'];
|
|
20
20
|
}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { PickerValueManager, UsePickerValueResponse } from './usePickerValue.types';
|
|
1
|
+
import { PickerValueManager, UsePickerValueProviderParams } from './usePickerValue.types';
|
|
3
2
|
import { PickerProviderProps } from '../../components/PickerProvider';
|
|
4
3
|
import type { UsePickerProps } from './usePicker.types';
|
|
5
|
-
import { DateOrTimeViewWithMeridiem, FormProps, PickerOrientation, PickerVariant } from '../../models';
|
|
4
|
+
import { DateOrTimeViewWithMeridiem, FormProps, PickerOrientation, PickerValidValue, PickerVariant } from '../../models';
|
|
6
5
|
export declare const usePickerOrientation: (views: readonly DateOrTimeViewWithMeridiem[], customOrientation: PickerOrientation | undefined) => PickerOrientation;
|
|
7
|
-
export declare function usePickerProvider<TValue>(parameters: UsePickerProviderParameters<TValue>): UsePickerProviderReturnValue;
|
|
8
|
-
export interface UsePickerProviderParameters<TValue> extends Pick<PickerProviderProps, 'localeText'> {
|
|
6
|
+
export declare function usePickerProvider<TValue extends PickerValidValue>(parameters: UsePickerProviderParameters<TValue>): UsePickerProviderReturnValue;
|
|
7
|
+
export interface UsePickerProviderParameters<TValue extends PickerValidValue> extends Pick<PickerProviderProps, 'localeText'> {
|
|
9
8
|
props: UsePickerProps<TValue, any, any, any, any>;
|
|
10
|
-
pickerValueResponse: UsePickerValueResponse<TValue, FieldSection, any>;
|
|
11
9
|
valueManager: PickerValueManager<TValue, any>;
|
|
12
10
|
variant: PickerVariant;
|
|
13
11
|
views: readonly DateOrTimeViewWithMeridiem[];
|
|
12
|
+
paramsFromUsePickerValue: UsePickerValueProviderParams<TValue>;
|
|
14
13
|
}
|
|
15
14
|
export interface UsePickerProviderReturnValue extends Omit<PickerProviderProps, 'children'> {
|
|
16
15
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
1
2
|
import * as React from 'react';
|
|
2
3
|
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
|
|
3
4
|
import { useUtils } from "../useUtils.js";
|
|
@@ -36,31 +37,28 @@ export const usePickerOrientation = (views, customOrientation) => {
|
|
|
36
37
|
export function usePickerProvider(parameters) {
|
|
37
38
|
const {
|
|
38
39
|
props,
|
|
39
|
-
pickerValueResponse,
|
|
40
40
|
valueManager,
|
|
41
41
|
localeText,
|
|
42
42
|
variant,
|
|
43
|
-
views
|
|
43
|
+
views,
|
|
44
|
+
paramsFromUsePickerValue
|
|
44
45
|
} = parameters;
|
|
45
46
|
const utils = useUtils();
|
|
46
47
|
const orientation = usePickerOrientation(views, props.orientation);
|
|
47
48
|
const ownerState = React.useMemo(() => ({
|
|
48
|
-
isPickerValueEmpty: valueManager.areValuesEqual(utils,
|
|
49
|
-
isPickerOpen:
|
|
49
|
+
isPickerValueEmpty: valueManager.areValuesEqual(utils, paramsFromUsePickerValue.value, valueManager.emptyValue),
|
|
50
|
+
isPickerOpen: paramsFromUsePickerValue.contextValue.open,
|
|
50
51
|
isPickerDisabled: props.disabled ?? false,
|
|
51
52
|
isPickerReadOnly: props.readOnly ?? false,
|
|
52
53
|
pickerOrientation: orientation,
|
|
53
54
|
pickerVariant: variant
|
|
54
|
-
}), [utils, valueManager,
|
|
55
|
-
const contextValue = React.useMemo(() => ({
|
|
56
|
-
onOpen: pickerValueResponse.actions.onOpen,
|
|
57
|
-
onClose: pickerValueResponse.actions.onClose,
|
|
58
|
-
open: pickerValueResponse.open,
|
|
55
|
+
}), [utils, valueManager, paramsFromUsePickerValue.value, paramsFromUsePickerValue.contextValue.open, orientation, variant, props.disabled, props.readOnly]);
|
|
56
|
+
const contextValue = React.useMemo(() => _extends({}, paramsFromUsePickerValue.contextValue, {
|
|
59
57
|
disabled: props.disabled ?? false,
|
|
60
58
|
readOnly: props.readOnly ?? false,
|
|
61
59
|
variant,
|
|
62
60
|
orientation
|
|
63
|
-
}), [
|
|
61
|
+
}), [paramsFromUsePickerValue.contextValue, variant, orientation, props.disabled, props.readOnly]);
|
|
64
62
|
const privateContextValue = React.useMemo(() => ({
|
|
65
63
|
ownerState
|
|
66
64
|
}), [ownerState]);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InferError } from '../../../models';
|
|
2
2
|
import { UsePickerValueProps, UsePickerValueParams, UsePickerValueResponse } from './usePickerValue.types';
|
|
3
|
+
import { PickerValidValue } from '../../models';
|
|
3
4
|
/**
|
|
4
5
|
* Manage the value lifecycle of all the pickers.
|
|
5
6
|
*/
|
|
6
|
-
export declare const usePickerValue: <TValue
|
|
7
|
+
export declare const usePickerValue: <TValue extends PickerValidValue, TExternalProps extends UsePickerValueProps<TValue, any>>({ props, valueManager, valueType, variant, validator, }: UsePickerValueParams<TValue, TExternalProps>) => UsePickerValueResponse<TValue, InferError<TExternalProps>>;
|
|
@@ -5,7 +5,6 @@ import { useOpenState } from "../useOpenState.js";
|
|
|
5
5
|
import { useLocalizationContext, useUtils } from "../useUtils.js";
|
|
6
6
|
import { useValidation } from "../../../validation/index.js";
|
|
7
7
|
import { useValueWithTimezone } from "../useValueWithTimezone.js";
|
|
8
|
-
|
|
9
8
|
/**
|
|
10
9
|
* Decide if the new value should be published
|
|
11
10
|
* The published value will be passed to `onChange` if defined.
|
|
@@ -151,8 +150,8 @@ export const usePickerValue = ({
|
|
|
151
150
|
const utils = useUtils();
|
|
152
151
|
const adapter = useLocalizationContext();
|
|
153
152
|
const {
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
open,
|
|
154
|
+
setOpen
|
|
156
155
|
} = useOpenState(props);
|
|
157
156
|
const {
|
|
158
157
|
timezone,
|
|
@@ -238,7 +237,7 @@ export const usePickerValue = ({
|
|
|
238
237
|
onAccept(action.value, getContext());
|
|
239
238
|
}
|
|
240
239
|
if (shouldClose) {
|
|
241
|
-
|
|
240
|
+
setOpen(false);
|
|
242
241
|
}
|
|
243
242
|
});
|
|
244
243
|
if (dateState.lastControlledValue !== inValueWithoutRenderTimezone) {
|
|
@@ -289,11 +288,11 @@ export const usePickerValue = ({
|
|
|
289
288
|
});
|
|
290
289
|
const handleOpen = useEventCallback(event => {
|
|
291
290
|
event.preventDefault();
|
|
292
|
-
|
|
291
|
+
setOpen(true);
|
|
293
292
|
});
|
|
294
293
|
const handleClose = useEventCallback(event => {
|
|
295
294
|
event?.preventDefault();
|
|
296
|
-
|
|
295
|
+
setOpen(false);
|
|
297
296
|
});
|
|
298
297
|
const handleChange = useEventCallback((newValue, selectionState = 'partial') => updateDate({
|
|
299
298
|
name: 'setValueFromView',
|
|
@@ -324,12 +323,12 @@ export const usePickerValue = ({
|
|
|
324
323
|
value: dateState.draft,
|
|
325
324
|
onChange: handleChangeFromField
|
|
326
325
|
};
|
|
327
|
-
const
|
|
326
|
+
const valueWithoutError = React.useMemo(() => valueManager.cleanValue(utils, dateState.draft), [utils, valueManager, dateState.draft]);
|
|
328
327
|
const viewResponse = {
|
|
329
|
-
value:
|
|
328
|
+
value: valueWithoutError,
|
|
330
329
|
onChange: handleChange,
|
|
331
330
|
onClose: handleClose,
|
|
332
|
-
open
|
|
331
|
+
open
|
|
333
332
|
};
|
|
334
333
|
const isValid = testedValue => {
|
|
335
334
|
const error = validator({
|
|
@@ -341,16 +340,27 @@ export const usePickerValue = ({
|
|
|
341
340
|
return !valueManager.hasError(error);
|
|
342
341
|
};
|
|
343
342
|
const layoutResponse = _extends({}, actions, {
|
|
344
|
-
value:
|
|
343
|
+
value: valueWithoutError,
|
|
345
344
|
onChange: handleChange,
|
|
346
345
|
onSelectShortcut: handleSelectShortcut,
|
|
347
346
|
isValid
|
|
348
347
|
});
|
|
348
|
+
const contextValue = React.useMemo(() => {
|
|
349
|
+
return {
|
|
350
|
+
open,
|
|
351
|
+
setOpen
|
|
352
|
+
};
|
|
353
|
+
}, [open, setOpen]);
|
|
354
|
+
const providerParams = {
|
|
355
|
+
value: valueWithoutError,
|
|
356
|
+
contextValue
|
|
357
|
+
};
|
|
349
358
|
return {
|
|
350
|
-
open
|
|
359
|
+
open,
|
|
351
360
|
fieldProps: fieldResponse,
|
|
352
361
|
viewProps: viewResponse,
|
|
353
362
|
layoutProps: layoutResponse,
|
|
354
|
-
actions
|
|
363
|
+
actions,
|
|
364
|
+
provider: providerParams
|
|
355
365
|
};
|
|
356
366
|
};
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
1
2
|
import { FieldChangeHandlerContext, UseFieldInternalProps } from '../useField';
|
|
2
3
|
import { Validator } from '../../../validation';
|
|
3
4
|
import { PickerVariant } from '../../models/common';
|
|
4
|
-
import {
|
|
5
|
+
import { TimezoneProps, MuiPickersAdapter, PickersTimezone, PickerChangeHandlerContext, PickerValidDate, OnErrorProps, InferError, PickerValueType } from '../../../models';
|
|
5
6
|
import { GetDefaultReferenceDateProps } from '../../utils/getDefaultReferenceDate';
|
|
6
7
|
import { PickerShortcutChangeImportance, PickersShortcutsItemContext } from '../../../PickersShortcuts';
|
|
7
|
-
|
|
8
|
+
import { InferNonNullablePickerValue, PickerValidValue } from '../../models';
|
|
9
|
+
export interface PickerValueManager<TValue extends PickerValidValue, TError> {
|
|
8
10
|
/**
|
|
9
11
|
* Determines if two values are equal.
|
|
10
|
-
* @template TValue
|
|
12
|
+
* @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.
|
|
11
13
|
* @param {MuiPickersAdapter} utils The adapter.
|
|
12
14
|
* @param {TValue} valueLeft The first value to compare.
|
|
13
15
|
* @param {TValue} valueRight The second value to compare.
|
|
@@ -20,7 +22,7 @@ export interface PickerValueManager<TValue, TError> {
|
|
|
20
22
|
emptyValue: TValue;
|
|
21
23
|
/**
|
|
22
24
|
* Method returning the value to set when clicking the "Today" button
|
|
23
|
-
* @template TValue
|
|
25
|
+
* @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.
|
|
24
26
|
* @param {MuiPickersAdapter} utils The adapter.
|
|
25
27
|
* @param {PickersTimezone} timezone The current timezone.
|
|
26
28
|
* @param {PickerValueType} valueType The type of the value being edited.
|
|
@@ -28,7 +30,7 @@ export interface PickerValueManager<TValue, TError> {
|
|
|
28
30
|
*/
|
|
29
31
|
getTodayValue: (utils: MuiPickersAdapter, timezone: PickersTimezone, valueType: PickerValueType) => TValue;
|
|
30
32
|
/**
|
|
31
|
-
* @template TValue
|
|
33
|
+
* @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.
|
|
32
34
|
* Method returning the reference value to use when mounting the component.
|
|
33
35
|
* @param {object} params The params of the method.
|
|
34
36
|
* @param {PickerValidDate | undefined} params.referenceDate The referenceDate provided by the user.
|
|
@@ -48,10 +50,10 @@ export interface PickerValueManager<TValue, TError> {
|
|
|
48
50
|
granularity: number;
|
|
49
51
|
timezone: PickersTimezone;
|
|
50
52
|
getTodayDate?: () => PickerValidDate;
|
|
51
|
-
}) => TValue
|
|
53
|
+
}) => InferNonNullablePickerValue<TValue>;
|
|
52
54
|
/**
|
|
53
55
|
* Method parsing the input value to replace all invalid dates by `null`.
|
|
54
|
-
* @template TValue
|
|
56
|
+
* @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.
|
|
55
57
|
* @param {MuiPickersAdapter} utils The adapter.
|
|
56
58
|
* @param {TValue} value The value to parse.
|
|
57
59
|
* @returns {TValue} The value without invalid date.
|
|
@@ -59,7 +61,7 @@ export interface PickerValueManager<TValue, TError> {
|
|
|
59
61
|
cleanValue: (utils: MuiPickersAdapter, value: TValue) => TValue;
|
|
60
62
|
/**
|
|
61
63
|
* Generates the new value, given the previous value and the new proposed value.
|
|
62
|
-
* @template TValue
|
|
64
|
+
* @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.
|
|
63
65
|
* @param {MuiPickersAdapter} utils The adapter.
|
|
64
66
|
* @param {TValue} lastValidDateValue The last valid value.
|
|
65
67
|
* @param {TValue} value The proposed value.
|
|
@@ -88,7 +90,7 @@ export interface PickerValueManager<TValue, TError> {
|
|
|
88
90
|
/**
|
|
89
91
|
* Return the timezone of the date inside a value.
|
|
90
92
|
* Throw an error on range picker if both values don't have the same timezone.
|
|
91
|
-
@template TValue
|
|
93
|
+
* @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.
|
|
92
94
|
@param {MuiPickersAdapter} utils The utils to manipulate the date.
|
|
93
95
|
@param {TValue} value The current value.
|
|
94
96
|
@returns {string | null} The timezone of the current value.
|
|
@@ -96,7 +98,7 @@ export interface PickerValueManager<TValue, TError> {
|
|
|
96
98
|
getTimezone: (utils: MuiPickersAdapter, value: TValue) => string | null;
|
|
97
99
|
/**
|
|
98
100
|
* Change the timezone of the dates inside a value.
|
|
99
|
-
@template TValue
|
|
101
|
+
* @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.
|
|
100
102
|
@param {MuiPickersAdapter} utils The utils to manipulate the date.
|
|
101
103
|
@param {PickersTimezone} timezone The current timezone.
|
|
102
104
|
@param {TValue} value The value to convert.
|
|
@@ -105,19 +107,19 @@ export interface PickerValueManager<TValue, TError> {
|
|
|
105
107
|
setTimezone: (utils: MuiPickersAdapter, timezone: PickersTimezone, value: TValue) => TValue;
|
|
106
108
|
}
|
|
107
109
|
export type PickerSelectionState = 'partial' | 'shallow' | 'finish';
|
|
108
|
-
export interface UsePickerValueState<TValue> {
|
|
110
|
+
export interface UsePickerValueState<TValue extends PickerValidValue> {
|
|
109
111
|
/**
|
|
110
112
|
* Date displayed on the views and the field.
|
|
111
113
|
* It is updated whenever the user modifies something.
|
|
112
114
|
*/
|
|
113
115
|
draft: TValue;
|
|
114
116
|
/**
|
|
115
|
-
* Last value published (
|
|
117
|
+
* Last value published (the last value for which `shouldPublishValue` returned `true`).
|
|
116
118
|
* If `onChange` is defined, it's the value that was passed on the last call to this callback.
|
|
117
119
|
*/
|
|
118
120
|
lastPublishedValue: TValue;
|
|
119
121
|
/**
|
|
120
|
-
* Last value committed (
|
|
122
|
+
* Last value committed (the last value for which `shouldCommitValue` returned `true`).
|
|
121
123
|
* If `onAccept` is defined, it's the value that was passed on the last call to this callback.
|
|
122
124
|
*/
|
|
123
125
|
lastCommittedValue: TValue;
|
|
@@ -135,12 +137,12 @@ export interface UsePickerValueState<TValue> {
|
|
|
135
137
|
*/
|
|
136
138
|
hasBeenModifiedSinceMount: boolean;
|
|
137
139
|
}
|
|
138
|
-
export interface PickerValueUpdaterParams<TValue, TError> {
|
|
140
|
+
export interface PickerValueUpdaterParams<TValue extends PickerValidValue, TError> {
|
|
139
141
|
action: PickerValueUpdateAction<TValue, TError>;
|
|
140
142
|
dateState: UsePickerValueState<TValue>;
|
|
141
143
|
/**
|
|
142
144
|
* Check if the new draft value has changed compared to some given value.
|
|
143
|
-
* @template TValue
|
|
145
|
+
* @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.
|
|
144
146
|
* @param {TValue} comparisonValue The value to compare the new draft value with.
|
|
145
147
|
* @returns {boolean} `true` if the new draft value is equal to the comparison value.
|
|
146
148
|
*/
|
|
@@ -148,7 +150,7 @@ export interface PickerValueUpdaterParams<TValue, TError> {
|
|
|
148
150
|
isControlled: boolean;
|
|
149
151
|
closeOnSelect: boolean;
|
|
150
152
|
}
|
|
151
|
-
export type PickerValueUpdateAction<TValue, TError> = {
|
|
153
|
+
export type PickerValueUpdateAction<TValue extends PickerValidValue, TError> = {
|
|
152
154
|
name: 'setValueFromView';
|
|
153
155
|
value: TValue;
|
|
154
156
|
selectionState: PickerSelectionState;
|
|
@@ -169,7 +171,7 @@ export type PickerValueUpdateAction<TValue, TError> = {
|
|
|
169
171
|
/**
|
|
170
172
|
* Props used to handle the value that are common to all pickers.
|
|
171
173
|
*/
|
|
172
|
-
export interface UsePickerValueBaseProps<TValue, TError> extends OnErrorProps<TValue, TError> {
|
|
174
|
+
export interface UsePickerValueBaseProps<TValue extends PickerValidValue, TError> extends OnErrorProps<TValue, TError> {
|
|
173
175
|
/**
|
|
174
176
|
* The selected value.
|
|
175
177
|
* Used when the component is controlled.
|
|
@@ -225,10 +227,10 @@ export interface UsePickerValueNonStaticProps {
|
|
|
225
227
|
/**
|
|
226
228
|
* Props used to handle the value of the pickers.
|
|
227
229
|
*/
|
|
228
|
-
export interface UsePickerValueProps<TValue, TError> extends UsePickerValueBaseProps<TValue, TError>, UsePickerValueNonStaticProps, TimezoneProps {
|
|
230
|
+
export interface UsePickerValueProps<TValue extends PickerValidValue, TError> extends UsePickerValueBaseProps<TValue, TError>, UsePickerValueNonStaticProps, TimezoneProps {
|
|
229
231
|
referenceDate?: PickerValidDate;
|
|
230
232
|
}
|
|
231
|
-
export interface UsePickerValueParams<TValue, TExternalProps extends UsePickerValueProps<TValue, any>> {
|
|
233
|
+
export interface UsePickerValueParams<TValue extends PickerValidValue, TExternalProps extends UsePickerValueProps<TValue, any>> {
|
|
232
234
|
props: TExternalProps;
|
|
233
235
|
valueManager: PickerValueManager<TValue, InferError<TExternalProps>>;
|
|
234
236
|
valueType: PickerValueType;
|
|
@@ -244,11 +246,11 @@ export interface UsePickerValueActions {
|
|
|
244
246
|
onOpen: (event: React.UIEvent) => void;
|
|
245
247
|
onClose: (event?: React.UIEvent) => void;
|
|
246
248
|
}
|
|
247
|
-
export type UsePickerValueFieldResponse<TValue
|
|
249
|
+
export type UsePickerValueFieldResponse<TValue extends PickerValidValue, TError> = Required<Pick<UseFieldInternalProps<TValue, any, TError>, 'value' | 'onChange'>>;
|
|
248
250
|
/**
|
|
249
251
|
* Props passed to `usePickerViews`.
|
|
250
252
|
*/
|
|
251
|
-
export interface UsePickerValueViewsResponse<TValue> {
|
|
253
|
+
export interface UsePickerValueViewsResponse<TValue extends PickerValidValue> {
|
|
252
254
|
value: TValue;
|
|
253
255
|
onChange: (value: TValue, selectionState?: PickerSelectionState) => void;
|
|
254
256
|
open: boolean;
|
|
@@ -257,16 +259,41 @@ export interface UsePickerValueViewsResponse<TValue> {
|
|
|
257
259
|
/**
|
|
258
260
|
* Props passed to `usePickerLayoutProps`.
|
|
259
261
|
*/
|
|
260
|
-
export interface UsePickerValueLayoutResponse<TValue> extends UsePickerValueActions {
|
|
262
|
+
export interface UsePickerValueLayoutResponse<TValue extends PickerValidValue> extends UsePickerValueActions {
|
|
261
263
|
value: TValue;
|
|
262
264
|
onChange: (newValue: TValue) => void;
|
|
263
265
|
onSelectShortcut: (newValue: TValue, changeImportance: PickerShortcutChangeImportance, shortcut: PickersShortcutsItemContext) => void;
|
|
264
266
|
isValid: (value: TValue) => boolean;
|
|
265
267
|
}
|
|
266
|
-
|
|
268
|
+
/**
|
|
269
|
+
* Params passed to `usePickerProvider`.
|
|
270
|
+
*/
|
|
271
|
+
export interface UsePickerValueProviderParams<TValue extends PickerValidValue> {
|
|
272
|
+
value: TValue;
|
|
273
|
+
contextValue: UsePickerValueContextValue;
|
|
274
|
+
}
|
|
275
|
+
export interface UsePickerValueResponse<TValue extends PickerValidValue, TError> {
|
|
267
276
|
open: boolean;
|
|
268
277
|
actions: UsePickerValueActions;
|
|
269
278
|
viewProps: UsePickerValueViewsResponse<TValue>;
|
|
270
|
-
fieldProps: UsePickerValueFieldResponse<TValue,
|
|
279
|
+
fieldProps: UsePickerValueFieldResponse<TValue, TError>;
|
|
271
280
|
layoutProps: UsePickerValueLayoutResponse<TValue>;
|
|
281
|
+
provider: UsePickerValueProviderParams<TValue>;
|
|
282
|
+
}
|
|
283
|
+
export interface UsePickerValueContextValue {
|
|
284
|
+
/**
|
|
285
|
+
* Sets the current open state of the Picker.
|
|
286
|
+
* ```ts
|
|
287
|
+
* setOpen(true); // Opens the picker.
|
|
288
|
+
* setOpen(false); // Closes the picker.
|
|
289
|
+
* setOpen((prevOpen) => !prevOpen); // Toggles the open state.
|
|
290
|
+
* ```
|
|
291
|
+
* @param {React.SetStateAction<boolean>} action The new open state of the Picker.
|
|
292
|
+
* It can be a function that will receive the current open state.
|
|
293
|
+
*/
|
|
294
|
+
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
295
|
+
/**
|
|
296
|
+
* `true` if the picker is open, `false` otherwise.
|
|
297
|
+
*/
|
|
298
|
+
open: boolean;
|
|
272
299
|
}
|
|
@@ -3,11 +3,11 @@ import { SxProps } from '@mui/system';
|
|
|
3
3
|
import { Theme } from '@mui/material/styles';
|
|
4
4
|
import { UseViewsOptions } from '../useViews';
|
|
5
5
|
import type { UsePickerValueViewsResponse } from './usePickerValue.types';
|
|
6
|
-
import { DateOrTimeViewWithMeridiem } from '../../models';
|
|
7
|
-
import { FieldRef,
|
|
6
|
+
import { DateOrTimeViewWithMeridiem, PickerRangeValue, PickerValidValue, PickerValue } from '../../models';
|
|
7
|
+
import { FieldRef, PickerValidDate, TimezoneProps } from '../../../models';
|
|
8
8
|
interface PickerViewsRendererBaseExternalProps<TView extends DateOrTimeViewWithMeridiem> extends Omit<UsePickerViewsProps<any, TView, any, any>, 'openTo' | 'viewRenderers'> {
|
|
9
9
|
}
|
|
10
|
-
export type PickerViewsRendererProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = Omit<TExternalProps, 'className' | 'sx'> & TAdditionalProps & UsePickerValueViewsResponse<TValue> & {
|
|
10
|
+
export type PickerViewsRendererProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = Omit<TExternalProps, 'className' | 'sx'> & TAdditionalProps & UsePickerValueViewsResponse<TValue> & {
|
|
11
11
|
view: TView;
|
|
12
12
|
views: readonly TView[];
|
|
13
13
|
focusedView: TView | null;
|
|
@@ -15,14 +15,14 @@ export type PickerViewsRendererProps<TValue, TView extends DateOrTimeViewWithMer
|
|
|
15
15
|
showViewSwitcher: boolean;
|
|
16
16
|
timeViewsCount: number;
|
|
17
17
|
};
|
|
18
|
-
export type PickerViewRenderer<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = (props: PickerViewsRendererProps<TValue, TView, TExternalProps, TAdditionalProps>) => React.ReactNode;
|
|
19
|
-
export type PickerViewRendererLookup<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<any>, TAdditionalProps extends {}> = {
|
|
18
|
+
export type PickerViewRenderer<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<TView>, TAdditionalProps extends {}> = (props: PickerViewsRendererProps<TValue, TView, TExternalProps, TAdditionalProps>) => React.ReactNode;
|
|
19
|
+
export type PickerViewRendererLookup<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends PickerViewsRendererBaseExternalProps<any>, TAdditionalProps extends {}> = {
|
|
20
20
|
[K in TView]: PickerViewRenderer<TValue, K, TExternalProps, TAdditionalProps> | null;
|
|
21
21
|
};
|
|
22
22
|
/**
|
|
23
23
|
* Props used to handle the views that are common to all pickers.
|
|
24
24
|
*/
|
|
25
|
-
export interface UsePickerViewsBaseProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends Omit<UseViewsOptions<any, TView>, 'onChange' | 'onFocusedViewChange' | 'focusedView'>, TimezoneProps {
|
|
25
|
+
export interface UsePickerViewsBaseProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends Omit<UseViewsOptions<any, TView>, 'onChange' | 'onFocusedViewChange' | 'focusedView'>, TimezoneProps {
|
|
26
26
|
/**
|
|
27
27
|
* If `null`, the section will only have field editing.
|
|
28
28
|
* If `undefined`, internally defined view will be used.
|
|
@@ -52,16 +52,16 @@ export interface UsePickerViewsNonStaticProps {
|
|
|
52
52
|
/**
|
|
53
53
|
* Props used to handle the value of the pickers.
|
|
54
54
|
*/
|
|
55
|
-
export interface UsePickerViewsProps<TValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps> {
|
|
55
|
+
export interface UsePickerViewsProps<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}> extends UsePickerViewsBaseProps<TValue, TView, TExternalProps, TAdditionalProps> {
|
|
56
56
|
className?: string;
|
|
57
57
|
sx?: SxProps<Theme>;
|
|
58
58
|
}
|
|
59
|
-
export interface UsePickerViewParams<TValue
|
|
59
|
+
export interface UsePickerViewParams<TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, TExternalProps, TAdditionalProps>, TAdditionalProps extends {}> {
|
|
60
60
|
props: TExternalProps;
|
|
61
61
|
propsFromPickerValue: UsePickerValueViewsResponse<TValue>;
|
|
62
62
|
additionalViewProps: TAdditionalProps;
|
|
63
63
|
autoFocusView: boolean;
|
|
64
|
-
fieldRef: React.RefObject<FieldRef<
|
|
64
|
+
fieldRef: React.RefObject<FieldRef<PickerValue> | FieldRef<PickerRangeValue>> | undefined;
|
|
65
65
|
/**
|
|
66
66
|
* A function that intercepts the regular picker rendering.
|
|
67
67
|
* Can be used to consume the provided `viewRenderers` and render a custom component wrapping them.
|
|
@@ -93,5 +93,5 @@ export interface UsePickerViewsLayoutResponse<TView extends DateOrTimeViewWithMe
|
|
|
93
93
|
* - Handles the switch between UI views and field views
|
|
94
94
|
* - Handles the focus management when switching views
|
|
95
95
|
*/
|
|
96
|
-
export declare const usePickerViews: <TValue
|
|
96
|
+
export declare const usePickerViews: <TValue extends PickerValidValue, TView extends DateOrTimeViewWithMeridiem, TExternalProps extends UsePickerViewsProps<TValue, TView, any, any>, TAdditionalProps extends {}>({ props, propsFromPickerValue, additionalViewProps, autoFocusView, rendererInterceptor, fieldRef, }: UsePickerViewParams<TValue, TView, TExternalProps, TAdditionalProps>) => UsePickerViewsResponse<TView>;
|
|
97
97
|
export {};
|