@@ -7,6 +7,9 @@ document.addEventListener('DOMContentLoaded', () => {
7
7
const waitTimeElement = document . getElementById ( 'wait-time-text' ) as HTMLElement | null ;
8
8
const codeContainer = document . getElementById ( 'new-code-text' ) ;
9
9
const loginButton = document . getElementById ( 'login-button' ) as HTMLButtonElement ;
10
+ let submitting = false ;
11
+ if ( loginButton ) loginButton . remove ( ) ;
12
+
10
13
if ( ! form || ! errorEl ) return ;
11
14
12
15
form . setAttribute ( 'novalidate' , '' ) ;
@@ -20,15 +23,19 @@ document.addEventListener('DOMContentLoaded', () => {
20
23
21
24
form . addEventListener ( 'submit' , ( e ) => {
22
25
e . preventDefault ( ) ;
26
+ if ( submitting ) {
27
+ return ;
28
+ }
29
+ submitting = true ;
23
30
const codes = digitInputs . map ( ( input ) => input . value ) . filter ( ( val ) => val !== '' ) ;
24
31
const [ , error ] = otpValidator ( codes ) ;
25
32
if ( error ) {
26
- setFormError ( errorEl , loginButton , error as string ) ;
33
+ setFormError ( errorEl , error as string ) ;
34
+ submitting = false ;
27
35
const firstEmptyInput = digitInputs . find ( ( input ) => input ?. value === '' ) ;
28
36
if ( firstEmptyInput ) firstEmptyInput . focus ( ) ;
29
37
else digitInputs [ 0 ] . focus ( ) ;
30
38
} else {
31
- loginButton . disabled = true ;
32
39
form . submit ( ) ;
33
40
}
34
41
} ) ;
@@ -41,9 +48,9 @@ document.addEventListener('DOMContentLoaded', () => {
41
48
const value = e . data ;
42
49
if ( ! value ) return ;
43
50
44
- clearFormError ( errorEl , loginButton ) ;
51
+ clearFormError ( errorEl ) ;
45
52
if ( ! otpValidDigits . includes ( value ) ) {
46
- setFormError ( errorEl , loginButton , errors . OTP_TYPES ) ;
53
+ setFormError ( errorEl , errors . OTP_TYPES ) ;
47
54
( e . target as HTMLInputElement ) ?. focus ( ) ;
48
55
return ;
49
56
}
@@ -54,7 +61,7 @@ document.addEventListener('DOMContentLoaded', () => {
54
61
else {
55
62
const codes = digitInputs . map ( ( input ) => input . value ) ;
56
63
const [ , error ] = otpValidator ( codes ) ;
57
- if ( error ) setFormError ( errorEl , loginButton , error as string ) ;
64
+ if ( error ) setFormError ( errorEl , error as string ) ;
58
65
else form . requestSubmit ( ) ;
59
66
}
60
67
} ) ;
@@ -77,7 +84,7 @@ document.addEventListener('DOMContentLoaded', () => {
77
84
78
85
const [ , error ] = otpValidator ( fullCode ) ;
79
86
if ( error ) {
80
- setFormError ( errorEl , loginButton , error as string ) ;
87
+ setFormError ( errorEl , error as string ) ;
81
88
return ;
82
89
}
83
90
@@ -90,12 +97,15 @@ document.addEventListener('DOMContentLoaded', () => {
90
97
e . preventDefault ( ) ;
91
98
form . requestSubmit ( ) ;
92
99
}
93
- if ( e . key === 'Backspace' && input . value === '' ) {
100
+ if ( e . key === 'Backspace' ) {
94
101
e . preventDefault ( ) ;
95
- clearFormError ( errorEl , loginButton ) ;
96
- if ( i > 0 ) {
102
+ clearFormError ( errorEl ) ;
103
+ // When passed the first input and hitting backspace on an empty field, want to clear and focus the previous input
104
+ if ( input . value === '' && i > 0 ) {
97
105
digitInputs [ i - 1 ] . value = '' ;
98
106
digitInputs [ i - 1 ] . focus ( ) ;
107
+ } else {
108
+ input . value = '' ;
99
109
}
100
110
}
101
111
} ) ;
0 commit comments