diff --git a/packages/x-date-pickers/src/DateField/tests/selection.DateField.test.tsx b/packages/x-date-pickers/src/DateField/tests/selection.DateField.test.tsx
index 80a08a1ba58f..833bbdca1169 100644
--- a/packages/x-date-pickers/src/DateField/tests/selection.DateField.test.tsx
+++ b/packages/x-date-pickers/src/DateField/tests/selection.DateField.test.tsx
@@ -184,7 +184,7 @@ describe(' - Selection', () => {
});
it('should select all sections with start separator', () => {
- // Test with v6 input
+ // Test with v7 input
const v7Response = renderWithProps({
enableAccessibleFieldDOMStructure: true,
format: `- ${adapterToUse.formats.year}`,
diff --git a/packages/x-date-pickers/src/internals/hooks/useField/useField.ts b/packages/x-date-pickers/src/internals/hooks/useField/useField.ts
index e6c4ab482d38..405cdf2f9885 100644
--- a/packages/x-date-pickers/src/internals/hooks/useField/useField.ts
+++ b/packages/x-date-pickers/src/internals/hooks/useField/useField.ts
@@ -275,10 +275,12 @@ export const useField = <
event.preventDefault();
onClear?.(event, ...(args as []));
clearValue();
- setSelectedSections(sectionOrder.startIndex);
- if (!interactions.isFieldFocused) {
+ if (!interactions.isFieldFocused()) {
+ // setSelectedSections is called internally
interactions.focusField(0);
+ } else {
+ setSelectedSections(sectionOrder.startIndex);
}
});
diff --git a/test/e2e/fixtures/DatePicker/BasicDesktopDatePicker.tsx b/test/e2e/fixtures/DatePicker/BasicDesktopDatePicker.tsx
index 34cae29ab091..992dd6244777 100644
--- a/test/e2e/fixtures/DatePicker/BasicDesktopDatePicker.tsx
+++ b/test/e2e/fixtures/DatePicker/BasicDesktopDatePicker.tsx
@@ -10,6 +10,7 @@ export default function BasicDesktopDatePicker() {
enableAccessibleFieldDOMStructure
label="Desktop Date Picker"
className="test-date-picker"
+ slotProps={{ field: { clearable: true } }}
/>
);
diff --git a/test/e2e/fixtures/DatePicker/BasicDesktopDatePickerV6.tsx b/test/e2e/fixtures/DatePicker/BasicDesktopDatePickerV6.tsx
new file mode 100644
index 000000000000..f94f56265f81
--- /dev/null
+++ b/test/e2e/fixtures/DatePicker/BasicDesktopDatePickerV6.tsx
@@ -0,0 +1,16 @@
+import * as React from 'react';
+import { DesktopDatePicker } from '@mui/x-date-pickers/DesktopDatePicker';
+import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
+import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
+
+export default function BasicDesktopDatePickerV6() {
+ return (
+
+
+
+ );
+}
diff --git a/test/e2e/index.test.ts b/test/e2e/index.test.ts
index c0c2000ff89d..5da95c6441d9 100644
--- a/test/e2e/index.test.ts
+++ b/test/e2e/index.test.ts
@@ -563,9 +563,9 @@ async function initializeEnvironment(
await page.locator(`.${pickersSectionListClasses.root}`).click();
await input.fill('02/12/2020');
- expect(await page.getByRole('button').getAttribute('aria-label')).to.equal(
- 'Choose date, selected date is Feb 12, 2020',
- );
+ expect(
+ await page.getByRole('button', { name: /Choose date/ }).getAttribute('aria-label'),
+ ).to.equal('Choose date, selected date is Feb 12, 2020');
});
it('should allow pasting a section', async () => {
@@ -612,6 +612,38 @@ async function initializeEnvironment(
await monthSection.press('2');
expect(await input.inputValue()).to.equal('02/11/2022');
});
+
+ it('should focus the first field section after clearing a value', async () => {
+ await renderFixture('DatePicker/BasicDesktopDatePicker');
+
+ const monthSection = page.getByRole('spinbutton', { name: 'Month' });
+ await monthSection.press('2');
+ await page.getByRole('button', { name: 'Clear value' }).click();
+
+ expect(await page.evaluate(() => document.activeElement?.textContent)).to.equal('MM');
+ });
+
+ it('should focus the first field section after clearing a value in v6 input', async () => {
+ await renderFixture('DatePicker/BasicDesktopDatePickerV6');
+
+ await page.getByRole('textbox').fill('2');
+ await page.getByRole('button', { name: 'Clear value' }).click();
+
+ // firefox does not support document.getSelection().toString() on input elements
+ if (browserType.name() === 'firefox') {
+ expect(
+ await page.evaluate(() => {
+ return (
+ document.activeElement?.tagName === 'INPUT' &&
+ // only focused input has value set
+ (document.activeElement as HTMLInputElement)?.value === 'MM/DD/YYYY'
+ );
+ }),
+ ).to.equal(true);
+ } else {
+ expect(await page.evaluate(() => document.getSelection()?.toString())).to.equal('MM');
+ }
+ });
});
describe('', () => {