@@ -2,7 +2,7 @@ import React, { useState } from "react";
2
2
import { saveAs } from "file-saver" ;
3
3
import axios from "axios" ;
4
4
import { getBase64FromUrl } from "../../constant/Utils" ;
5
- import { themeColor } from "../../constant/const" ;
5
+ import { themeColor , emailRegex } from "../../constant/const" ;
6
6
import printModule from "print-js" ;
7
7
import Loader from "../../primitives/Loader" ;
8
8
import ModalUi from "../../primitives/ModalUi" ;
@@ -19,8 +19,9 @@ function EmailComponent({
19
19
activeMailAdapter
20
20
} ) {
21
21
const [ emailList , setEmailList ] = useState ( [ ] ) ;
22
- const [ emailValue , setEmailValue ] = useState ( ) ;
22
+ const [ emailValue , setEmailValue ] = useState ( "" ) ;
23
23
const [ isLoading , setIsLoading ] = useState ( false ) ;
24
+ const [ emailErr , setEmailErr ] = useState ( false ) ;
24
25
//function for send email
25
26
const sendEmail = async ( ) => {
26
27
setIsLoading ( true ) ;
@@ -111,17 +112,30 @@ function EmailComponent({
111
112
//function for get email value
112
113
const handleEmailValue = ( e ) => {
113
114
const value = e . target . value ;
115
+ setEmailErr ( false ) ;
114
116
setEmailValue ( value ) ;
115
117
} ;
116
118
117
119
//function for save email in array after press enter
118
120
const handleEnterPress = ( e ) => {
121
+ const pattern = emailRegex ;
122
+ const validate = emailValue ?. match ( pattern ) ;
119
123
if ( e . key === "Enter" && emailValue ) {
120
- setEmailList ( ( prev ) => [ ...prev , emailValue ] ) ;
121
- setEmailValue ( "" ) ;
124
+ if ( validate ) {
125
+ const emailLowerCase = emailValue ?. toLowerCase ( ) ;
126
+ setEmailList ( ( prev ) => [ ...prev , emailLowerCase ] ) ;
127
+ setEmailValue ( "" ) ;
128
+ } else {
129
+ setEmailErr ( true ) ;
130
+ }
122
131
} else if ( e === "add" && emailValue ) {
123
- setEmailList ( ( prev ) => [ ...prev , emailValue ] ) ;
124
- setEmailValue ( "" ) ;
132
+ if ( validate ) {
133
+ const emailLowerCase = emailValue ?. toLowerCase ( ) ;
134
+ setEmailList ( ( prev ) => [ ...prev , emailLowerCase ] ) ;
135
+ setEmailValue ( "" ) ;
136
+ } else {
137
+ setEmailErr ( true ) ;
138
+ }
125
139
}
126
140
} ;
127
141
@@ -179,7 +193,6 @@ function EmailComponent({
179
193
Successfully signed!
180
194
</ span >
181
195
< div className = "flex flex-row" >
182
- < div > </ div >
183
196
{ ! isAndroid && (
184
197
< button
185
198
onClick = { handleToPrint }
@@ -203,72 +216,63 @@ function EmailComponent({
203
216
Recipients added here will get a copy of the signed document.
204
217
</ p >
205
218
{ emailList . length > 0 ? (
206
- < >
207
- < div className = "p-0 border-[1.5px] op-border-primary rounded w-full text-[15px]" >
208
- < div className = "flex flex-row flex-wrap" >
209
- { emailList . map ( ( data , ind ) => {
210
- return (
211
- < div
212
- className = "flex flex-row items-center op-bg-primary m-[4px] rounded-md py-[5px] px-[10px]"
213
- key = { ind }
219
+ < div className = "p-0 border-[1.5px] op-border-primary rounded w-full text-[15px]" >
220
+ < div className = "flex flex-row flex-wrap" >
221
+ { emailList . map ( ( data , ind ) => {
222
+ return (
223
+ < div
224
+ className = "flex flex-row items-center op-bg-primary m-[4px] rounded-md py-[5px] px-[10px]"
225
+ key = { ind }
226
+ >
227
+ < span className = "text-base-100 text-[13px]" >
228
+ { data }
229
+ </ span >
230
+ < span
231
+ className = "text-base-100 text-[13px] font-semibold ml-[7px] cursor-pointer"
232
+ onClick = { ( ) => removeChip ( ind ) }
214
233
>
215
- < span className = "text-base-100 text-[13px]" >
216
- { data }
217
- </ span >
218
- < span
219
- className = "text-base-100 text-[13px] font-semibold ml-[7px] cursor-pointer"
220
- onClick = { ( ) => removeChip ( ind ) }
221
- >
222
- < i className = "fa-light fa-xmark" > </ i >
223
- </ span >
224
- </ div >
225
- ) ;
226
- } ) }
227
- </ div >
228
- { emailList . length <= 9 && (
229
- < input
230
- type = "text"
231
- value = { emailValue }
232
- className = "p-[10px] pb-[20px] rounded w-full text-[15px] bg-transparent outline-none"
233
- onChange = { handleEmailValue }
234
- onKeyDown = { handleEnterPress }
235
- onBlur = { ( ) => {
236
- if ( emailValue ) {
237
- handleEnterPress ( "add" ) ;
238
- }
239
- } }
240
- required
241
- />
242
- ) }
234
+ < i className = "fa-light fa-xmark" > </ i >
235
+ </ span >
236
+ </ div >
237
+ ) ;
238
+ } ) }
243
239
</ div >
244
- </ >
240
+ { emailList . length <= 9 && (
241
+ < input
242
+ type = "email"
243
+ value = { emailValue }
244
+ className = "p-[10px] pb-[20px] rounded w-full text-[15px] bg-transparent outline-none"
245
+ onChange = { handleEmailValue }
246
+ onKeyDown = { handleEnterPress }
247
+ onBlur = { ( ) => emailValue && handleEnterPress ( "add" ) }
248
+ required
249
+ />
250
+ ) }
251
+ </ div >
245
252
) : (
246
253
< div >
247
254
< input
248
- type = "text "
255
+ type = "email "
249
256
value = { emailValue }
250
257
className = "p-[10px] pb-[20px] rounded w-full text-[15px] outline-none bg-transparent border-[1.5px] op-border-primary"
251
258
onChange = { handleEmailValue }
252
259
onKeyDown = { handleEnterPress }
253
- placeholder = "Add the email addresses"
254
- onBlur = { ( ) => {
255
- if ( emailValue ) {
256
- handleEnterPress ( "add" ) ;
257
- }
258
- } }
260
+ placeholder = "Add an email address and hit enter"
261
+ onBlur = { ( ) => emailValue && handleEnterPress ( "add" ) }
259
262
required
260
263
/>
261
264
</ div >
262
265
) }
266
+ { emailErr && (
267
+ < p className = "text-xs text-[red] ml-1.5 mt-0.5" >
268
+ please provide correct email address
269
+ </ p >
270
+ ) }
263
271
< button
264
272
className = { `${
265
273
emailValue ? "cursor-pointer" : "cursor-default"
266
274
} op-btn op-btn-primary op-btn-sm m-2 shadow-md`}
267
- onClick = { ( ) => {
268
- if ( emailValue ) {
269
- handleEnterPress ( "add" ) ;
270
- }
271
- } }
275
+ onClick = { ( ) => emailValue && handleEnterPress ( "add" ) }
272
276
>
273
277
< i className = "fa-light fa-plus" aria-hidden = "true" > </ i >
274
278
</ button >
0 commit comments