@@ -8,8 +8,6 @@ const KEY_CODE = {
8
8
DELETE : 46 ,
9
9
} ;
10
10
11
- const CONTAINER_DATA_ID = 'REACT_VERIFICATION_CODE_CONTAINER' ;
12
-
13
11
export default ( { length = 4 , placeholder = '·' } ) => {
14
12
const [ activeIndex , setActiveIndex ] = React . useState < number > ( - 1 ) ;
15
13
const [ value , setValue ] = React . useState < string [ ] > (
@@ -34,7 +32,7 @@ export default ({ length = 4, placeholder = '·' }) => {
34
32
if ( codeInputRef . current ) codeInputRef . current . focus ( ) ;
35
33
} ;
36
34
37
- const onItemKeyUp = ( { key, keyCode } : React . KeyboardEvent ) => {
35
+ const onInputKeyUp = ( { key, keyCode } : React . KeyboardEvent ) => {
38
36
const newValue = [ ...value ] ;
39
37
const nextIndex = activeIndex + 1 ;
40
38
const prevIndex = activeIndex - 1 ;
@@ -81,7 +79,7 @@ export default ({ length = 4, placeholder = '·' }) => {
81
79
setActiveIndex ( - 1 ) ;
82
80
} ;
83
81
84
- const onItemChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
82
+ const onInputChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
85
83
const { value : changeValue } = e . target ;
86
84
const isCode = isCodeRegex . test ( changeValue ) ;
87
85
@@ -90,31 +88,13 @@ export default ({ length = 4, placeholder = '·' }) => {
90
88
blurItem ( activeIndex ) ;
91
89
} ;
92
90
93
- React . useEffect ( ( ) => {
94
- const onDocumentClick = ( e : MouseEvent ) => {
95
- const targetIncludesContainer = e . composedPath ( ) . reduce (
96
- ( bool : boolean , path : EventTarget ) =>
97
- bool ||
98
- // @to -do: find which type to use
99
- // to make it compatible with dataset
100
- // @ts -ignore
101
- path . dataset ?. reactInputVerificationCodeId === CONTAINER_DATA_ID ,
102
- false
103
- ) ;
104
-
105
- if ( ! targetIncludesContainer ) setActiveIndex ( - 1 ) ;
106
- } ;
107
-
108
- document . addEventListener ( 'click' , onDocumentClick ) ;
109
-
110
- return ( ) => {
111
- document . removeEventListener ( 'click' , onDocumentClick ) ;
112
- } ;
113
- } , [ ] ) ;
91
+ const onInputBlur = ( ) => {
92
+ setActiveIndex ( - 1 ) ;
93
+ blurItem ( activeIndex ) ;
94
+ } ;
114
95
115
96
return (
116
97
< div
117
- data-react-input-verification-code-id = { CONTAINER_DATA_ID }
118
98
className = 'ReactInputVerificationCode__container'
119
99
style = {
120
100
{
@@ -136,8 +116,9 @@ export default ({ length = 4, placeholder = '·' }) => {
136
116
// use onKeyUp rather than onChange for a better control
137
117
// onChange is still needed to handle the autocompletion
138
118
// when receiving a code by SMS
139
- onChange = { onItemChange }
140
- onKeyUp = { onItemKeyUp }
119
+ onChange = { onInputChange }
120
+ onKeyUp = { onInputKeyUp }
121
+ onBlur = { onInputBlur }
141
122
/>
142
123
143
124
{ itemsRef . map ( ( ref , i ) => (
0 commit comments