Skip to content

Commit 2fc96b7

Browse files
authoredDec 7, 2022
fix(datetime): keyboard can select hour 00 (#26423)
resolves #26409
1 parent 409d813 commit 2fc96b7

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed
 

‎core/src/components/picker-internal/picker-internal.tsx

+9-2
Original file line numberDiff line numberDiff line change
@@ -356,9 +356,16 @@ export class PickerInternal implements ComponentInterface {
356356
* is "1" and we entered "2", then the complete value
357357
* is "12" and we should select hour 12.
358358
*
359-
* Regex removes any leading zeros from values like "02".
359+
* Regex removes any leading zeros from values like "02",
360+
* but it keeps a single zero if there are only zeros in the string.
361+
* 0+(?=[1-9]) --> Match 1 or more zeros that are followed by 1-9
362+
* 0+(?=0$) --> Match 1 or more zeros that must be followed by one 0 and end.
360363
*/
361-
const findItemFromCompleteValue = values.find(({ text }) => text.replace(/^0+/, '') === inputEl.value);
364+
const findItemFromCompleteValue = values.find(({ text }) => {
365+
const parsedText = text.replace(/^0+(?=[1-9])|0+(?=0$)/, '');
366+
return parsedText === inputEl.value;
367+
});
368+
362369
if (findItemFromCompleteValue) {
363370
inputModeColumn.setValue(findItemFromCompleteValue.value);
364371
return;

‎core/src/components/picker-internal/test/keyboard-entry/picker-internal.e2e.ts

+31
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,35 @@ test.describe('picker-internal: keyboard entry', () => {
8989
await expect(secondIonChange).toHaveReceivedEventDetail({ text: '24', value: 24 });
9090
await expect(secondColumn).toHaveJSProperty('value', 24);
9191
});
92+
93+
test('should select 00', async ({ page }) => {
94+
await page.setContent(`
95+
<ion-picker-internal>
96+
<ion-picker-column-internal></ion-picker-column-internal>
97+
</ion-picker-internal>
98+
99+
<script>
100+
const column = document.querySelector('ion-picker-column-internal');
101+
column.items = [
102+
{ text: '00', value: 12 },
103+
{ text: '01', value: 1 },
104+
{ text: '02', value: 2 },
105+
{ text: '03', value: 3 },
106+
{ text: '04', value: 4 },
107+
{ text: '05', value: 5 }
108+
];
109+
column.value = 5;
110+
column.numericInput = true;
111+
</script>
112+
`);
113+
114+
const column = page.locator('ion-picker-column-internal');
115+
const ionChange = await page.spyOnEvent('ionChange');
116+
await column.focus();
117+
118+
await page.keyboard.press('Digit0');
119+
120+
await expect(ionChange).toHaveReceivedEventDetail({ text: '00', value: 12 });
121+
await expect(column).toHaveJSProperty('value', 12);
122+
});
92123
});

0 commit comments

Comments
 (0)
Please sign in to comment.