Skip to content

Commit e56a381

Browse files
[pickers] Move the opening logic to the range fields (mui#16175)
Signed-off-by: Flavien DELANGLE <[email protected]> Co-authored-by: Lukas Tyla <[email protected]>
1 parent 8aef758 commit e56a381

File tree

78 files changed

+1100
-1171
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+1100
-1171
lines changed

docs/data/date-pickers/calendar-systems/AdapterHijri.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ const cacheRtl = createCache({
2424

2525
function ButtonDateTimeField(props) {
2626
const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
27-
const { focused, ...other } = forwardedProps;
2827

2928
const pickerContext = usePickerContext();
3029
const parsedFormat = useParsedFormat();
@@ -42,7 +41,7 @@ function ButtonDateTimeField(props) {
4241

4342
return (
4443
<Button
45-
{...other}
44+
{...forwardedProps}
4645
variant="outlined"
4746
color={hasValidationError ? 'error' : 'primary'}
4847
className={pickerContext.rootClassName}

docs/data/date-pickers/calendar-systems/AdapterHijri.tsx

+1-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ const cacheRtl = createCache({
2828

2929
function ButtonDateTimeField(props: DateTimePickerFieldProps) {
3030
const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
31-
const { focused, ...other } = forwardedProps;
3231

3332
const pickerContext = usePickerContext();
3433
const parsedFormat = useParsedFormat();
@@ -46,7 +45,7 @@ function ButtonDateTimeField(props: DateTimePickerFieldProps) {
4645

4746
return (
4847
<Button
49-
{...other}
48+
{...forwardedProps}
5049
variant="outlined"
5150
color={hasValidationError ? 'error' : 'primary'}
5251
className={pickerContext.rootClassName}

docs/data/date-pickers/custom-field/BrowserV7MultiInputRangeField.js

+18-16
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,13 @@ function BrowserTextField(props) {
4848
readOnly,
4949
focused,
5050
error,
51-
InputProps: { ref, startAdornment, endAdornment } = {},
51+
triggerRef,
5252
// The rest can be passed to the root element
5353
...other
5454
} = props;
5555

5656
return (
57-
<BrowserFieldRoot {...other} ref={ref}>
58-
{startAdornment}
57+
<BrowserFieldRoot {...other} ref={triggerRef}>
5958
<BrowserFieldContent>
6059
<PickersSectionList
6160
elements={elements}
@@ -69,14 +68,13 @@ function BrowserTextField(props) {
6968
onKeyDown={onKeyDown}
7069
/>
7170
</BrowserFieldContent>
72-
{endAdornment}
7371
</BrowserFieldRoot>
7472
);
7573
}
7674

7775
function BrowserMultiInputDateRangeField(props) {
78-
const pickerContext = usePickerContext();
7976
const manager = useDateRangeManager();
77+
const pickerContext = usePickerContext();
8078
const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
8179
const { slotProps, ...otherForwardedProps } = forwardedProps;
8280

@@ -95,21 +93,25 @@ function BrowserMultiInputDateRangeField(props) {
9593
const fieldResponse = useMultiInputRangeField({
9694
manager,
9795
internalProps,
98-
startForwardedProps: startTextFieldProps,
99-
endForwardedProps: endTextFieldProps,
96+
startTextFieldProps,
97+
endTextFieldProps,
98+
rootProps: {
99+
ref: pickerContext.rootRef,
100+
spacing: 2,
101+
direction: 'row',
102+
overflow: 'auto',
103+
...otherForwardedProps,
104+
},
100105
});
101106

102107
return (
103-
<Stack
104-
ref={pickerContext.rootRef}
105-
spacing={2}
106-
direction="row"
107-
overflow="auto"
108-
{...otherForwardedProps}
109-
>
110-
<BrowserTextField {...fieldResponse.startDate} />
108+
<Stack {...fieldResponse.root}>
109+
<BrowserTextField
110+
{...fieldResponse.startTextField}
111+
triggerRef={pickerContext.triggerRef}
112+
/>
111113
<span></span>
112-
<BrowserTextField {...fieldResponse.endDate} />
114+
<BrowserTextField {...fieldResponse.endTextField} />
113115
</Stack>
114116
);
115117
}

docs/data/date-pickers/custom-field/BrowserV7MultiInputRangeField.tsx

+28-23
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ import {
1111
DateRangePickerProps,
1212
} from '@mui/x-date-pickers-pro/DateRangePicker';
1313
import { useDateRangeManager } from '@mui/x-date-pickers-pro/managers';
14-
import { unstable_useMultiInputRangeField as useMultiInputRangeField } from '@mui/x-date-pickers-pro/hooks';
14+
import {
15+
unstable_useMultiInputRangeField as useMultiInputRangeField,
16+
UseMultiInputRangeFieldTextFieldProps,
17+
} from '@mui/x-date-pickers-pro/hooks';
1518
import { Unstable_PickersSectionList as PickersSectionList } from '@mui/x-date-pickers/PickersSectionList';
1619
import {
1720
MultiInputFieldSlotTextFieldProps,
1821
MultiInputFieldRefs,
19-
BaseMultiInputPickersTextFieldProps,
2022
} from '@mui/x-date-pickers-pro/models';
2123

2224
const BrowserFieldRoot = styled('div', { name: 'BrowserField', slot: 'Root' })({
@@ -35,11 +37,12 @@ const BrowserFieldContent = styled('div', { name: 'BrowserField', slot: 'Content
3537
);
3638

3739
interface BrowserTextFieldProps
38-
extends BaseMultiInputPickersTextFieldProps<true>,
39-
Omit<
40-
React.HTMLAttributes<HTMLDivElement>,
41-
keyof BaseMultiInputPickersTextFieldProps<true>
42-
> {}
40+
extends UseMultiInputRangeFieldTextFieldProps<
41+
true,
42+
React.HTMLAttributes<HTMLDivElement>
43+
> {
44+
triggerRef?: React.Ref<HTMLDivElement>;
45+
}
4346

4447
function BrowserTextField(props: BrowserTextFieldProps) {
4548
const {
@@ -68,15 +71,14 @@ function BrowserTextField(props: BrowserTextFieldProps) {
6871
focused,
6972
error,
7073

71-
InputProps: { ref, startAdornment, endAdornment } = {},
74+
triggerRef,
7275

7376
// The rest can be passed to the root element
7477
...other
7578
} = props;
7679

7780
return (
78-
<BrowserFieldRoot {...other} ref={ref}>
79-
{startAdornment}
81+
<BrowserFieldRoot {...other} ref={triggerRef}>
8082
<BrowserFieldContent>
8183
<PickersSectionList
8284
elements={elements}
@@ -90,7 +92,6 @@ function BrowserTextField(props: BrowserTextFieldProps) {
9092
onKeyDown={onKeyDown}
9193
/>
9294
</BrowserFieldContent>
93-
{endAdornment}
9495
</BrowserFieldRoot>
9596
);
9697
}
@@ -109,8 +110,8 @@ interface BrowserMultiInputDateRangeFieldProps
109110
function BrowserMultiInputDateRangeField(
110111
props: BrowserMultiInputDateRangeFieldProps,
111112
) {
112-
const pickerContext = usePickerContext();
113113
const manager = useDateRangeManager();
114+
const pickerContext = usePickerContext();
114115
const { internalProps, forwardedProps } = useSplitFieldProps(props, 'date');
115116
const { slotProps, ...otherForwardedProps } = forwardedProps;
116117

@@ -129,21 +130,25 @@ function BrowserMultiInputDateRangeField(
129130
const fieldResponse = useMultiInputRangeField({
130131
manager,
131132
internalProps,
132-
startForwardedProps: startTextFieldProps,
133-
endForwardedProps: endTextFieldProps,
133+
startTextFieldProps,
134+
endTextFieldProps,
135+
rootProps: {
136+
ref: pickerContext.rootRef,
137+
spacing: 2,
138+
direction: 'row' as const,
139+
overflow: 'auto',
140+
...otherForwardedProps,
141+
},
134142
});
135143

136144
return (
137-
<Stack
138-
ref={pickerContext.rootRef}
139-
spacing={2}
140-
direction="row"
141-
overflow="auto"
142-
{...otherForwardedProps}
143-
>
144-
<BrowserTextField {...(fieldResponse.startDate as BrowserTextFieldProps)} />
145+
<Stack {...fieldResponse.root}>
146+
<BrowserTextField
147+
{...fieldResponse.startTextField}
148+
triggerRef={pickerContext.triggerRef}
149+
/>
145150
<span></span>
146-
<BrowserTextField {...(fieldResponse.endDate as BrowserTextFieldProps)} />
151+
<BrowserTextField {...fieldResponse.endTextField} />
147152
</Stack>
148153
);
149154
}

docs/data/date-pickers/custom-field/JoyV6Field.js

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ function JoyDateField(props) {
4242
// Can be used to style the component
4343
disabled,
4444
readOnly,
45-
focused,
4645
error,
4746
inputRef,
4847
// The rest can be passed to the root element

docs/data/date-pickers/custom-field/JoyV6Field.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ function JoyDateField(props: DatePickerFieldProps) {
4949
// Can be used to style the component
5050
disabled,
5151
readOnly,
52-
focused,
5352
error,
5453
inputRef,
5554

docs/data/date-pickers/custom-field/JoyV6MultiInputRangeField.js

+20-28
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@ function JoyField(props) {
2929
const {
3030
// Should be ignored
3131
enableAccessibleFieldDOMStructure,
32+
triggerRef,
3233
disabled,
3334
id,
3435
label,
35-
InputProps: { ref: anchorRef, startAdornment, endAdornment } = {},
36-
endDecorator,
37-
startDecorator,
3836
slotProps,
3937
inputRef,
4038
...other
@@ -45,24 +43,12 @@ function JoyField(props) {
4543
<FormLabel>{label}</FormLabel>
4644
<Input
4745
disabled={disabled}
48-
startDecorator={
49-
<React.Fragment>
50-
{startAdornment}
51-
{startDecorator}
52-
</React.Fragment>
53-
}
54-
endDecorator={
55-
<React.Fragment>
56-
{endAdornment}
57-
{endDecorator}
58-
</React.Fragment>
59-
}
6046
slotProps={{
6147
...slotProps,
6248
input: { ...slotProps?.input, ref: inputRef },
6349
}}
6450
{...other}
65-
ref={anchorRef}
51+
ref={triggerRef}
6652
/>
6753
</FormControl>
6854
);
@@ -79,36 +65,42 @@ function JoyMultiInputDateRangeField(props) {
7965
const startTextFieldProps = useSlotProps({
8066
elementType: 'input',
8167
externalSlotProps: slotProps?.textField,
68+
additionalProps: { label: 'Start' },
8269
ownerState: { position: 'start' },
8370
});
8471

8572
const endTextFieldProps = useSlotProps({
8673
elementType: 'input',
8774
externalSlotProps: slotProps?.textField,
75+
additionalProps: { label: 'End' },
8876
ownerState: { position: 'end' },
8977
});
9078

9179
const fieldResponse = useMultiInputRangeField({
9280
manager,
9381
internalProps: { ...internalProps, enableAccessibleFieldDOMStructure: false },
94-
startForwardedProps: startTextFieldProps,
95-
endForwardedProps: endTextFieldProps,
82+
rootProps: {
83+
ref: pickerContext.rootRef,
84+
spacing: 2,
85+
overflow: 'auto',
86+
direction: 'row',
87+
alignItems: 'center',
88+
...otherForwardedProps,
89+
},
90+
startTextFieldProps,
91+
endTextFieldProps,
9692
});
9793

9894
return (
99-
<Stack
100-
spacing={2}
101-
overflow="auto"
102-
direction="row"
103-
alignItems="center"
104-
{...otherForwardedProps}
105-
ref={pickerContext.rootRef}
106-
>
107-
<JoyField {...fieldResponse.startDate} />
95+
<Stack {...fieldResponse.root}>
96+
<JoyField
97+
{...fieldResponse.startTextField}
98+
triggerRef={pickerContext.triggerRef}
99+
/>
108100
<FormControl>
109101
<Typography sx={{ marginTop: '25px' }}>{' – '}</Typography>
110102
</FormControl>
111-
<JoyField {...fieldResponse.endDate} />
103+
<JoyField {...fieldResponse.endTextField} />
112104
</Stack>
113105
);
114106
}

0 commit comments

Comments
 (0)