Skip to content

Commit 1390421

Browse files
Work
1 parent dc89d3c commit 1390421

File tree

16 files changed

+331
-352
lines changed

16 files changed

+331
-352
lines changed
Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,37 @@
11
'use client';
22
import * as React from 'react';
3-
import { useField, useDefaultizedDateField } from '@mui/x-date-pickers/internals';
3+
import { useField, useFieldInternalPropsWithDefaults } from '@mui/x-date-pickers/internals';
44
import { useSplitFieldProps } from '@mui/x-date-pickers/hooks';
55
import { UseSingleInputDateRangeFieldProps } from './SingleInputDateRangeField.types';
6-
import { rangeValueManager, getRangeFieldValueManager } from '../internals/utils/valueManagers';
7-
import { validateDateRange } from '../validation';
6+
import { getDateRangeValueManager } from '../valueManagers';
87

98
export const useSingleInputDateRangeField = <
109
TEnableAccessibleFieldDOMStructure extends boolean,
1110
TAllProps extends UseSingleInputDateRangeFieldProps<TEnableAccessibleFieldDOMStructure>,
1211
>(
13-
inProps: TAllProps,
12+
props: TAllProps,
1413
) => {
15-
const props = useDefaultizedDateField<
16-
UseSingleInputDateRangeFieldProps<TEnableAccessibleFieldDOMStructure>,
17-
TAllProps
18-
>(inProps);
14+
const valueManager = React.useMemo(
15+
() =>
16+
getDateRangeValueManager({
17+
enableAccessibleFieldDOMStructure: props.enableAccessibleFieldDOMStructure,
18+
dateSeparator: props.dateSeparator,
19+
}),
20+
[props.enableAccessibleFieldDOMStructure, props.dateSeparator],
21+
);
1922

2023
const { forwardedProps, internalProps } = useSplitFieldProps(props, 'date');
24+
const internalPropsWithDefaults = useFieldInternalPropsWithDefaults({
25+
valueManager,
26+
internalProps,
27+
});
2128

22-
const fieldValueManager = React.useMemo(
23-
() => getRangeFieldValueManager({ dateSeparator: internalProps.dateSeparator }),
24-
[internalProps.dateSeparator],
25-
);
26-
27-
return useField<
28-
true,
29-
TEnableAccessibleFieldDOMStructure,
30-
typeof forwardedProps,
31-
typeof internalProps
32-
>({
29+
return useField({
3330
forwardedProps,
34-
internalProps,
35-
valueManager: rangeValueManager,
36-
fieldValueManager,
37-
validator: validateDateRange,
38-
valueType: 'date',
31+
internalProps: internalPropsWithDefaults,
32+
valueManager: valueManager.legacyValueManager,
33+
fieldValueManager: valueManager.fieldValueManager,
34+
validator: valueManager.validator,
35+
valueType: valueManager.valueType,
3936
});
4037
};
Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,37 @@
11
'use client';
22
import * as React from 'react';
3-
import { useField, useDefaultizedDateTimeField } from '@mui/x-date-pickers/internals';
3+
import { useField, useFieldInternalPropsWithDefaults } from '@mui/x-date-pickers/internals';
44
import { useSplitFieldProps } from '@mui/x-date-pickers/hooks';
55
import { UseSingleInputDateTimeRangeFieldProps } from './SingleInputDateTimeRangeField.types';
6-
import { rangeValueManager, getRangeFieldValueManager } from '../internals/utils/valueManagers';
7-
import { validateDateTimeRange } from '../validation';
6+
import { getDateTimeRangeValueManager } from '../valueManagers';
87

98
export const useSingleInputDateTimeRangeField = <
109
TEnableAccessibleFieldDOMStructure extends boolean,
1110
TAllProps extends UseSingleInputDateTimeRangeFieldProps<TEnableAccessibleFieldDOMStructure>,
1211
>(
13-
inProps: TAllProps,
12+
props: TAllProps,
1413
) => {
15-
const props = useDefaultizedDateTimeField<
16-
UseSingleInputDateTimeRangeFieldProps<TEnableAccessibleFieldDOMStructure>,
17-
TAllProps
18-
>(inProps);
19-
20-
const { forwardedProps, internalProps } = useSplitFieldProps(props, 'date-time');
21-
22-
const fieldValueManager = React.useMemo(
23-
() => getRangeFieldValueManager({ dateSeparator: internalProps.dateSeparator }),
24-
[internalProps.dateSeparator],
14+
const valueManager = React.useMemo(
15+
() =>
16+
getDateTimeRangeValueManager({
17+
enableAccessibleFieldDOMStructure: props.enableAccessibleFieldDOMStructure,
18+
dateSeparator: props.dateSeparator,
19+
}),
20+
[props.enableAccessibleFieldDOMStructure, props.dateSeparator],
2521
);
2622

27-
return useField<
28-
true,
29-
TEnableAccessibleFieldDOMStructure,
30-
typeof forwardedProps,
31-
typeof internalProps
32-
>({
33-
forwardedProps,
23+
const { forwardedProps, internalProps } = useSplitFieldProps(props, 'date');
24+
const internalPropsWithDefaults = useFieldInternalPropsWithDefaults({
25+
valueManager,
3426
internalProps,
35-
valueManager: rangeValueManager,
36-
fieldValueManager,
37-
validator: validateDateTimeRange,
38-
valueType: 'date-time',
27+
});
28+
29+
return useField({
30+
forwardedProps,
31+
internalProps: internalPropsWithDefaults,
32+
valueManager: valueManager.legacyValueManager,
33+
fieldValueManager: valueManager.fieldValueManager,
34+
validator: valueManager.validator,
35+
valueType: valueManager.valueType,
3936
});
4037
};
Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,37 @@
11
'use client';
22
import * as React from 'react';
3-
import { useField, useDefaultizedTimeField } from '@mui/x-date-pickers/internals';
3+
import { useField, useFieldInternalPropsWithDefaults } from '@mui/x-date-pickers/internals';
44
import { useSplitFieldProps } from '@mui/x-date-pickers/hooks';
55
import { UseSingleInputTimeRangeFieldProps } from './SingleInputTimeRangeField.types';
6-
import { rangeValueManager, getRangeFieldValueManager } from '../internals/utils/valueManagers';
7-
import { validateTimeRange } from '../validation';
6+
import { getTimeRangeValueManager } from '../valueManagers';
87

98
export const useSingleInputTimeRangeField = <
109
TEnableAccessibleFieldDOMStructure extends boolean,
1110
TAllProps extends UseSingleInputTimeRangeFieldProps<TEnableAccessibleFieldDOMStructure>,
1211
>(
13-
inProps: TAllProps,
12+
props: TAllProps,
1413
) => {
15-
const props = useDefaultizedTimeField<
16-
UseSingleInputTimeRangeFieldProps<TEnableAccessibleFieldDOMStructure>,
17-
TAllProps
18-
>(inProps);
19-
20-
const { forwardedProps, internalProps } = useSplitFieldProps(props, 'time');
21-
22-
const fieldValueManager = React.useMemo(
23-
() => getRangeFieldValueManager({ dateSeparator: internalProps.dateSeparator }),
24-
[internalProps.dateSeparator],
14+
const valueManager = React.useMemo(
15+
() =>
16+
getTimeRangeValueManager({
17+
enableAccessibleFieldDOMStructure: props.enableAccessibleFieldDOMStructure,
18+
dateSeparator: props.dateSeparator,
19+
}),
20+
[props.enableAccessibleFieldDOMStructure, props.dateSeparator],
2521
);
2622

27-
return useField<
28-
true,
29-
TEnableAccessibleFieldDOMStructure,
30-
typeof forwardedProps,
31-
typeof internalProps
32-
>({
33-
forwardedProps,
23+
const { forwardedProps, internalProps } = useSplitFieldProps(props, 'date');
24+
const internalPropsWithDefaults = useFieldInternalPropsWithDefaults({
25+
valueManager,
3426
internalProps,
35-
valueManager: rangeValueManager,
36-
fieldValueManager,
37-
validator: validateTimeRange,
38-
valueType: 'time',
27+
});
28+
29+
return useField({
30+
forwardedProps,
31+
internalProps: internalPropsWithDefaults,
32+
valueManager: valueManager.legacyValueManager,
33+
fieldValueManager: valueManager.fieldValueManager,
34+
validator: valueManager.validator,
35+
valueType: valueManager.valueType,
3936
});
4037
};

packages/x-date-pickers-pro/src/internals/hooks/useMultiInputRangeField/useMultiInputDateRangeField.ts

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import * as React from 'react';
12
import useEventCallback from '@mui/utils/useEventCallback';
23
import { unstable_useDateField as useDateField } from '@mui/x-date-pickers/DateField';
34
import {
@@ -6,26 +7,24 @@ import {
67
PickerRangeValue,
78
UseFieldResponse,
89
useControlledValueWithTimezone,
9-
useDefaultizedDateField,
10+
useLocalizationContext,
1011
} from '@mui/x-date-pickers/internals';
1112
import { useValidation } from '@mui/x-date-pickers/validation';
1213
import { DateValidationError } from '@mui/x-date-pickers/models';
13-
import {
14-
UseMultiInputDateRangeFieldParams,
15-
UseMultiInputDateRangeFieldProps,
16-
} from '../../../MultiInputDateRangeField/MultiInputDateRangeField.types';
14+
import { UseMultiInputDateRangeFieldParams } from '../../../MultiInputDateRangeField/MultiInputDateRangeField.types';
1715
import { validateDateRange } from '../../../validation';
1816
import { rangeValueManager } from '../../utils/valueManagers';
1917
import type { UseMultiInputRangeFieldResponse } from './useMultiInputRangeField.types';
2018
import { DateRangeValidationError } from '../../../models';
2119
import { excludeProps } from './shared';
2220
import { useMultiInputFieldSelectedSections } from '../useMultiInputFieldSelectedSections';
21+
import { getDateRangeValueManager } from '../../../valueManagers';
2322

2423
export const useMultiInputDateRangeField = <
2524
TEnableAccessibleFieldDOMStructure extends boolean,
2625
TTextFieldSlotProps extends {},
2726
>({
28-
sharedProps: inSharedProps,
27+
sharedProps,
2928
startTextFieldProps,
3029
unstableStartFieldRef,
3130
endTextFieldProps,
@@ -34,10 +33,24 @@ export const useMultiInputDateRangeField = <
3433
TEnableAccessibleFieldDOMStructure,
3534
TTextFieldSlotProps
3635
>): UseMultiInputRangeFieldResponse<TEnableAccessibleFieldDOMStructure, TTextFieldSlotProps> => {
37-
const sharedProps = useDefaultizedDateField<
38-
UseMultiInputDateRangeFieldProps<TEnableAccessibleFieldDOMStructure>,
39-
typeof inSharedProps
40-
>(inSharedProps);
36+
const valueManager = React.useMemo(
37+
() =>
38+
getDateRangeValueManager({
39+
enableAccessibleFieldDOMStructure: sharedProps.enableAccessibleFieldDOMStructure,
40+
dateSeparator: sharedProps.dateSeparator,
41+
}),
42+
[sharedProps.enableAccessibleFieldDOMStructure, sharedProps.dateSeparator],
43+
);
44+
45+
const localizationContext = useLocalizationContext();
46+
const sharedPropsWithDefaults = React.useMemo(
47+
() =>
48+
valueManager.applyDefaultsToFieldInternalProps({
49+
...localizationContext,
50+
internalProps: sharedProps,
51+
}),
52+
[sharedProps, localizationContext, valueManager],
53+
);
4154

4255
const {
4356
value: valueProp,
@@ -53,7 +66,7 @@ export const useMultiInputDateRangeField = <
5366
timezone: timezoneProp,
5467
enableAccessibleFieldDOMStructure,
5568
autoFocus,
56-
} = sharedProps;
69+
} = sharedPropsWithDefaults;
5770

5871
const { value, handleValueChange, timezone } = useControlledValueWithTimezone({
5972
name: 'useMultiInputDateRangeField',
@@ -65,11 +78,11 @@ export const useMultiInputDateRangeField = <
6578
});
6679

6780
const { validationError, getValidationErrorForNewValue } = useValidation({
68-
props: sharedProps,
81+
props: sharedPropsWithDefaults,
6982
value,
7083
timezone,
7184
validator: validateDateRange,
72-
onError: sharedProps.onError,
85+
onError: sharedPropsWithDefaults.onError,
7386
});
7487

7588
// TODO: Maybe export utility from `useField` instead of copy/pasting the logic

0 commit comments

Comments
 (0)