@@ -17,30 +17,53 @@ const CreateABHAAddress = (props) => {
17
17
props . setNewAbhaAddress ,
18
18
] ;
19
19
const cmSuffix = localStorage . getItem ( cmSuffixProperty ) ;
20
- const [ lodingAbhaAddressSuggestions , setLodingAbhaAddressSuggestions ] = useState ( false ) ;
20
+ const [ loadingAbhaAddressSuggestions , setLoadingAbhaAddressSuggestions ] = useState ( false ) ;
21
21
const [ abhaAddressSuggestions , setAbhaAddressSuggestions ] = useState ( [ ] ) ;
22
22
23
23
useEffect ( async ( ) => {
24
- setLodingAbhaAddressSuggestions ( true ) ;
24
+ setLoadingAbhaAddressSuggestions ( true ) ;
25
25
let response = await getAbhaAddressSuggestions ( ) ;
26
26
if ( response . data !== undefined ) {
27
- setLodingAbhaAddressSuggestions ( false ) ;
27
+ setLoadingAbhaAddressSuggestions ( false ) ;
28
28
const fetchedOptions = response . data . abhaAddressList . map ( ( item ) => ( {
29
29
label : item ,
30
30
value : item ,
31
31
} ) ) ;
32
32
setAbhaAddressSuggestions ( fetchedOptions ) ;
33
33
} else {
34
- setLodingAbhaAddressSuggestions ( false ) ;
34
+ setLoadingAbhaAddressSuggestions ( false ) ;
35
35
console . error ( "An error occurred while getting suggestions" ) ;
36
36
}
37
37
} , [ ] ) ;
38
38
39
+ const validateAbhaAddress = ( newAbhaAddress ) => {
40
+ const MIN_LENGTH = 8 ;
41
+ const MAX_LENGTH = 18 ;
42
+
43
+ if ( newAbhaAddress . length < MIN_LENGTH || newAbhaAddress . length > MAX_LENGTH ) {
44
+ return `ABHA Address must be between ${ MIN_LENGTH } and ${ MAX_LENGTH } characters.` ;
45
+ }
46
+
47
+ const abhaRegex = / ^ (? ! [ . _ ] ) (? ! .* \. .* \. .* ) (? ! .* _ .* _ .* ) [ a - z A - Z 0 - 9 . _ ] * (?< ! [ . _ ] ) $ / ;
48
+
49
+ if ( ! abhaRegex . test ( newAbhaAddress ) ) {
50
+ return (
51
+ < div >
52
+ ABHA Address can only contain letters, numbers, a dot (.) or an underscore (_).
53
+ < br />
54
+ The dot (.) or underscore (_) must not be at the beginning or end and should not appear consecutively.
55
+ </ div >
56
+ ) ;
57
+ }
58
+ return null ;
59
+ } ;
60
+
39
61
async function onCreate ( ) {
40
62
setError ( "" ) ;
41
- if ( newAbhaAddress === "" ) {
42
- setError ( "ABHA Address cannot be empty" ) ;
43
- } else if ( newAbhaAddress . length > 3 ) {
63
+ const validationError = validateAbhaAddress ( newAbhaAddress ) ;
64
+ if ( validationError ) {
65
+ setError ( validationError ) ;
66
+ } else {
44
67
setLoader ( true ) ;
45
68
var response = await createABHAAddress ( newAbhaAddress ) ;
46
69
setLoader ( false ) ;
@@ -50,8 +73,6 @@ const CreateABHAAddress = (props) => {
50
73
setNewAbhaAddress ( newAbhaAddress . concat ( cmSuffix ) ) ;
51
74
props . setABHAAddressCreated ( true ) ;
52
75
}
53
- } else {
54
- setError ( "ABHA Address should have minimum of 4 characters" ) ;
55
76
}
56
77
}
57
78
@@ -65,7 +86,7 @@ const CreateABHAAddress = (props) => {
65
86
id = "free-solo-demo"
66
87
freeSolo
67
88
options = { abhaAddressSuggestions . map ( ( option ) => option . label ) }
68
- loading = { lodingAbhaAddressSuggestions }
89
+ loading = { loadingAbhaAddressSuggestions }
69
90
inputValue = { newAbhaAddress }
70
91
onInputChange = { ( event , value ) => setNewAbhaAddress ( value ) }
71
92
renderInput = { ( params ) => (
@@ -80,7 +101,7 @@ const CreateABHAAddress = (props) => {
80
101
) ,
81
102
} }
82
103
noOptionsText = {
83
- lodingAbhaAddressSuggestions
104
+ loadingAbhaAddressSuggestions
84
105
? "Getting suggestions..."
85
106
: "No suggestions"
86
107
}
@@ -108,3 +129,4 @@ const CreateABHAAddress = (props) => {
108
129
} ;
109
130
110
131
export default CreateABHAAddress ;
132
+
0 commit comments