diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx b/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx index 55d56d9b6ca58..412b616b37814 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/internals/hooks/useDesktopRangePicker/useDesktopRangePicker.tsx @@ -12,21 +12,19 @@ import { DateOrTimeViewWithMeridiem, ExportedBaseTabsProps, } from '@mui/x-date-pickers/internals'; -import { - PickerValidDate, - FieldRef, - BaseSingleInputFieldProps, - InferError, -} from '@mui/x-date-pickers/models'; +import { PickerValidDate, FieldRef, InferError } from '@mui/x-date-pickers/models'; import { DesktopRangePickerAdditionalViewProps, UseDesktopRangePickerParams, UseDesktopRangePickerProps, UseDesktopRangePickerSlotProps, } from './useDesktopRangePicker.types'; -import { useEnrichedRangePickerFieldProps } from '../useEnrichedRangePickerFieldProps'; +import { + RangePickerPropsForFieldSlot, + useEnrichedRangePickerFieldProps, +} from '../useEnrichedRangePickerFieldProps'; import { getReleaseInfo } from '../../utils/releaseInfo'; -import { DateRange, BaseMultiInputFieldProps, RangeFieldSection } from '../../../models'; +import { DateRange, RangeFieldSection } from '../../../models'; import { useRangePosition } from '../useRangePosition'; const releaseInfo = getReleaseInfo(); @@ -138,24 +136,12 @@ export const useDesktopRangePicker = < const fieldProps = useSlotProps< typeof Field, UseDesktopRangePickerSlotProps['field'], - | Partial< - BaseSingleInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - > - | Partial< - BaseMultiInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - >, + RangePickerPropsForFieldSlot< + boolean, + TDate, + TEnableAccessibleFieldDOMStructure, + InferError + >, TExternalProps >({ elementType: Field, diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts b/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts index 92161a1d50daa..9c0bde6d9d5bb 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts +++ b/packages/x-date-pickers-pro/src/internals/hooks/useEnrichedRangePickerFieldProps.ts @@ -19,7 +19,6 @@ import { } from '@mui/x-date-pickers/hooks'; import { PickersInputLocaleText } from '@mui/x-date-pickers/locales'; import { - BaseFieldProps, onSpaceOrEnter, UsePickerResponse, WrapperVariant, @@ -83,24 +82,37 @@ export interface RangePickerFieldSlotProps< >; } +export type RangePickerPropsForFieldSlot< + TIsSingleInput extends boolean, + TDate extends PickerValidDate, + TEnableAccessibleFieldDOMStructure extends boolean, + TError, +> = + | (TIsSingleInput extends true + ? BaseSingleInputFieldProps< + DateRange, + TDate, + RangeFieldSection, + TEnableAccessibleFieldDOMStructure, + TError + > + : never) + | (TIsSingleInput extends false + ? BaseMultiInputFieldProps< + DateRange, + TDate, + RangeFieldSection, + TEnableAccessibleFieldDOMStructure, + TError + > + : never); + export interface UseEnrichedRangePickerFieldPropsParams< + TIsSingleInput extends boolean, TDate extends PickerValidDate, TView extends DateOrTimeViewWithMeridiem, TEnableAccessibleFieldDOMStructure extends boolean, TError, - FieldProps extends BaseFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - > = BaseFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - >, > extends Pick< UsePickerResponse, TView, RangeFieldSection, any>, 'open' | 'actions' @@ -116,7 +128,12 @@ export interface UseEnrichedRangePickerFieldPropsParams< localeText: PickersInputLocaleText | undefined; pickerSlotProps: RangePickerFieldSlotProps | undefined; pickerSlots: RangePickerFieldSlots | undefined; - fieldProps: FieldProps; + fieldProps: RangePickerPropsForFieldSlot< + TIsSingleInput, + TDate, + TEnableAccessibleFieldDOMStructure, + TError + >; anchorRef?: React.Ref; currentView?: TView | null; initialView?: TView; @@ -151,17 +168,11 @@ const useMultiInputFieldSlotProps = < startFieldRef, endFieldRef, }: UseEnrichedRangePickerFieldPropsParams< + false, TDate, TView, TEnableAccessibleFieldDOMStructure, - TError, - BaseMultiInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - > + TError >) => { type ReturnType = BaseMultiInputFieldProps< DateRange, @@ -336,17 +347,11 @@ const useSingleInputFieldSlotProps = < anchorRef, currentView, }: UseEnrichedRangePickerFieldPropsParams< + true, TDate, TView, TEnableAccessibleFieldDOMStructure, - TError, - BaseSingleInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - TError - > + TError >) => { type ReturnType = BaseSingleInputFieldProps< DateRange, @@ -453,6 +458,7 @@ export const useEnrichedRangePickerFieldProps = < TError, >( params: UseEnrichedRangePickerFieldPropsParams< + boolean, TDate, TView, TEnableAccessibleFieldDOMStructure, @@ -470,9 +476,25 @@ export const useEnrichedRangePickerFieldProps = < } if (params.fieldType === 'multi-input') { - return useMultiInputFieldSlotProps(params); + return useMultiInputFieldSlotProps( + params as unknown as UseEnrichedRangePickerFieldPropsParams< + false, + TDate, + TView, + TEnableAccessibleFieldDOMStructure, + TError + >, + ); } - return useSingleInputFieldSlotProps(params); + return useSingleInputFieldSlotProps( + params as UseEnrichedRangePickerFieldPropsParams< + true, + TDate, + TView, + TEnableAccessibleFieldDOMStructure, + TError + >, + ); /* eslint-enable react-hooks/rules-of-hooks */ }; diff --git a/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx b/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx index 518914bdb1b59..58f509d3c8aa4 100644 --- a/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx +++ b/packages/x-date-pickers-pro/src/internals/hooks/useMobileRangePicker/useMobileRangePicker.tsx @@ -11,12 +11,7 @@ import { ExportedBaseTabsProps, } from '@mui/x-date-pickers/internals'; import { usePickersTranslations } from '@mui/x-date-pickers/hooks'; -import { - PickerValidDate, - FieldRef, - BaseSingleInputFieldProps, - InferError, -} from '@mui/x-date-pickers/models'; +import { PickerValidDate, FieldRef, InferError } from '@mui/x-date-pickers/models'; import useId from '@mui/utils/useId'; import { MobileRangePickerAdditionalViewProps, @@ -24,9 +19,12 @@ import { UseMobileRangePickerProps, UseMobileRangePickerSlotProps, } from './useMobileRangePicker.types'; -import { useEnrichedRangePickerFieldProps } from '../useEnrichedRangePickerFieldProps'; +import { + RangePickerPropsForFieldSlot, + useEnrichedRangePickerFieldProps, +} from '../useEnrichedRangePickerFieldProps'; import { getReleaseInfo } from '../../utils/releaseInfo'; -import { DateRange, BaseMultiInputFieldProps, RangeFieldSection } from '../../../models'; +import { DateRange, RangeFieldSection } from '../../../models'; import { useRangePosition } from '../useRangePosition'; const releaseInfo = getReleaseInfo(); @@ -114,24 +112,12 @@ export const useMobileRangePicker = < const fieldProps = useSlotProps< typeof Field, UseMobileRangePickerSlotProps['field'], - | Partial< - BaseSingleInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - > - | Partial< - BaseMultiInputFieldProps< - DateRange, - TDate, - RangeFieldSection, - TEnableAccessibleFieldDOMStructure, - InferError - > - >, + RangePickerPropsForFieldSlot< + boolean, + TDate, + TEnableAccessibleFieldDOMStructure, + InferError + >, TExternalProps >({ elementType: Field,