From d01a9ded84f39bcbb77706ead1197fe7f03217ae Mon Sep 17 00:00:00 2001 From: Gavin Everett Date: Thu, 14 Mar 2024 11:02:47 +0000 Subject: [PATCH] fix(date-picker): first keypress after focus should be treated as new input first keypress after focus should be treated as new input COMUI-2616 --- .../stable/gux-datepicker/gux-datepicker.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/genesys-spark-components/src/components/stable/gux-datepicker/gux-datepicker.tsx b/packages/genesys-spark-components/src/components/stable/gux-datepicker/gux-datepicker.tsx index 5bfd6c3ac..f4a64f6d0 100644 --- a/packages/genesys-spark-components/src/components/stable/gux-datepicker/gux-datepicker.tsx +++ b/packages/genesys-spark-components/src/components/stable/gux-datepicker/gux-datepicker.tsx @@ -158,6 +158,12 @@ export class GuxDatepicker { @State() active: boolean = false; + /** + * Tracks the amount of key presses when focusing on the input. + */ + @State() + pressedKeys: Array = []; + @Watch('value') watchValue() { this.updateDate(); @@ -240,6 +246,7 @@ export class GuxDatepicker { ); this.setIntervalRange(previousIntervalRange); this.setCursorRange(); + this.pressedKeys.length = 0; break; } case 'ArrowRight': { @@ -251,6 +258,7 @@ export class GuxDatepicker { ); this.setIntervalRange(nextIntervalRange); this.setCursorRange(); + this.pressedKeys.length = 0; break; } default: @@ -312,6 +320,7 @@ export class GuxDatepicker { @OnClickOutside({ triggerEvents: 'mousedown' }) onClickOutside() { this.active = false; + this.pressedKeys.length = 0; } /********* Event Handlers **********/ @@ -362,6 +371,7 @@ export class GuxDatepicker { } updateIntervalValue(event: KeyboardEvent): void { + this.pressedKeys.push(event.key); const inputNumber = parseInt(event.key, 10); if (!isNaN(inputNumber)) { @@ -377,7 +387,7 @@ export class GuxDatepicker { ) { this.typeYearValue(currentSectionValue, event.key); } else { - if (this.canSetDate(inputNumber)) { + if (this.canSetDate(inputNumber) && this.pressedKeys.length >= 2) { this.updateSelection( this.focusedField, `${currentSectionValue[1]}${event.key}` @@ -479,7 +489,7 @@ export class GuxDatepicker { } } - canSetDate(key: number) { + canSetDate(key: number): boolean { const newValue = parseInt( [ this.focusedField.value[this.intervalRange.selectionEnd - 1].toString(),