@@ -27,6 +27,7 @@ export const getRawValue = (value: PhoneNumber | string) => {
27
27
}
28
28
29
29
export const displayFormat = ( value : string ) => {
30
+ /** Returns the formatted value that can be displayed as an actual input value */
30
31
return value . replace ( / [ . \s \D ] + $ / , "" ) . replace ( / ( \( \d + ) $ / , "$1)" ) ;
31
32
}
32
33
@@ -35,6 +36,11 @@ export const cleanInput = (input: any, pattern: string) => {
35
36
return Array . from ( pattern , c => input [ 0 ] === c || slots . has ( c ) ? input . shift ( ) || c : c ) ;
36
37
}
37
38
39
+ export const getFormattedNumber = ( rawValue : any , pattern : string ) => {
40
+ /** Returns the reformatted input value based on the given pattern */
41
+ return displayFormat ( cleanInput ( rawValue , pattern . replaceAll ( / \d / g, "." ) ) . join ( "" ) ) ;
42
+ }
43
+
38
44
export const checkValidity = ( metadata : PhoneNumber , strict : boolean = false ) => {
39
45
/** Checks if both the area code and phone number match the validation pattern */
40
46
const pattern = ( validations as any ) [ metadata . isoCode as keyof typeof validations ] [ Number ( strict ) ] ;
@@ -134,11 +140,11 @@ export const usePhone = ({
134
140
i = clean ( target . value . slice ( 0 , i ) ) . findIndex ( c => slots . has ( c ) ) ;
135
141
return i < 0 ? prev [ prev . length - 1 ] : backRef . current ? prev [ i - 1 ] || first : i ;
136
142
} ) ;
137
- target . value = displayFormat ( clean ( target . value ) . join ( "" ) ) ;
143
+ target . value = getFormattedNumber ( target . value , pattern ) ;
138
144
target . setSelectionRange ( i , j ) ;
139
145
backRef . current = false ;
140
146
setValue ( target . value ) ;
141
- } , [ clean , first , prev ] )
147
+ } , [ clean , first , pattern , prev ] )
142
148
143
149
return {
144
150
clean,
0 commit comments