From 634db83e8e83927609bef3c50563069554a21af5 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Wed, 29 May 2024 16:58:35 +0530 Subject: [PATCH] fix: duplicate contact are creatable, Update the the header 'Document signed' in the success message popup --- apps/OpenSign/src/components/AddSigner.js | 286 +++++++++--------- .../shared/fields/SuggestionInput.js | 4 +- apps/OpenSign/src/pages/Login.js | 12 +- apps/OpenSign/src/pages/PdfRequestFiles.js | 2 +- apps/OpenSign/src/pages/Signup.js | 6 +- apps/OpenSign/src/pages/SignyourselfPdf.js | 2 +- 6 files changed, 165 insertions(+), 147 deletions(-) diff --git a/apps/OpenSign/src/components/AddSigner.js b/apps/OpenSign/src/components/AddSigner.js index 5b0db6873..0e0c4e025 100644 --- a/apps/OpenSign/src/components/AddSigner.js +++ b/apps/OpenSign/src/components/AddSigner.js @@ -50,145 +50,163 @@ const AddSigner = (props) => { e.stopPropagation(); setIsLoader(true); if (localStorage.getItem("TenantId")) { - try { - const contactQuery = new Parse.Object("contracts_Contactbook"); - contactQuery.set("Name", name); - contactQuery.set("Phone", phone); - contactQuery.set("Email", email); - contactQuery.set("UserRole", "contracts_Guest"); - - contactQuery.set("TenantId", { - __type: "Pointer", - className: "partners_Tenant", - objectId: localStorage.getItem("TenantId") - }); - try { - const _users = Parse.Object.extend("User"); - const _user = new _users(); - _user.set("name", name); - _user.set("username", email); - _user.set("email", email); - _user.set("phone", phone); - _user.set("password", phone); - - const user = await _user.save(); - if (user) { - const roleurl = `${parseBaseUrl}functions/AddUserToRole`; - const headers = { - "Content-Type": "application/json", - "X-Parse-Application-Id": parseAppId, - sessionToken: localStorage.getItem("accesstoken") - }; - const body = { - appName: localStorage.getItem("_appName"), - roleName: "contracts_Guest", - userId: user.id - }; - await axios.post(roleurl, body, { headers: headers }); - const currentUser = Parse.User.current(); - contactQuery.set( - "CreatedBy", - Parse.User.createWithoutData(currentUser.id) - ); - - contactQuery.set("UserId", user); - const acl = new Parse.ACL(); - acl.setPublicReadAccess(true); - acl.setPublicWriteAccess(true); - acl.setReadAccess(currentUser.id, true); - acl.setWriteAccess(currentUser.id, true); - - contactQuery.setACL(acl); - - const res = await contactQuery.save(); - - const parseData = JSON.parse(JSON.stringify(res)); - if (props.details) { - props.details({ - value: parseData[props.valueKey], - label: parseData[props.displayKey] - }); - } - if (props.closePopup) { - props.closePopup(); - } - if (props.handleUserData) { - props.handleUserData(parseData); + const user = Parse.User.current(); + const query = new Parse.Query("contracts_Contactbook"); + query.equalTo("CreatedBy", user); + query.notEqualTo("IsDeleted", true); + query.equalTo("Email", email); + const res = await query.first(); + // console.log(res); + if (!res) { + const contactQuery = new Parse.Object("contracts_Contactbook"); + contactQuery.set("Name", name); + if (phone) { + contactQuery.set("Phone", phone); } + contactQuery.set("Email", email); + contactQuery.set("UserRole", "contracts_Guest"); + contactQuery.set("TenantId", { + __type: "Pointer", + className: "partners_Tenant", + objectId: localStorage.getItem("TenantId") + }); + + try { + const _users = Parse.Object.extend("User"); + const _user = new _users(); + _user.set("name", name); + _user.set("username", email); + _user.set("email", email); + if (phone) { + _user.set("phone", phone); + _user.set("password", phone); + } else { + _user.set("password", email); + } + const user = await _user.save(); + if (user) { + const roleurl = `${parseBaseUrl}functions/AddUserToRole`; + const headers = { + "Content-Type": "application/json", + "X-Parse-Application-Id": parseAppId, + sessionToken: localStorage.getItem("accesstoken") + }; + const body = { + appName: localStorage.getItem("_appName"), + roleName: "contracts_Guest", + userId: user.id + }; + await axios.post(roleurl, body, { headers: headers }); + const currentUser = Parse.User.current(); + contactQuery.set( + "CreatedBy", + Parse.User.createWithoutData(currentUser.id) + ); + + contactQuery.set("UserId", user); + const acl = new Parse.ACL(); + acl.setPublicReadAccess(true); + acl.setPublicWriteAccess(true); + acl.setReadAccess(currentUser.id, true); + acl.setWriteAccess(currentUser.id, true); + + contactQuery.setACL(acl); + + const res = await contactQuery.save(); + + const parseData = JSON.parse(JSON.stringify(res)); + if (props.details) { + props.details({ + value: parseData[props.valueKey], + label: parseData[props.displayKey] + }); + } + if (props.closePopup) { + props.closePopup(); + } + if (props.handleUserData) { + props.handleUserData(parseData); + } + + setIsLoader(false); + // Reset the form fields + setAddYourself(false); + setName(""); + setPhone(""); + setEmail(""); + } + } catch (err) { + console.log("err ", err); + if (err.code === 202) { + const params = { email: email }; + const userRes = await Parse.Cloud.run("getUserId", params); + const roleurl = `${parseBaseUrl}functions/AddUserToRole`; + const headers = { + "Content-Type": "application/json", + "X-Parse-Application-Id": parseAppId, + sessionToken: localStorage.getItem("accesstoken") + }; + const body = { + appName: localStorage.getItem("_appName"), + roleName: "contracts_Guest", + userId: userRes.id + }; + await axios.post(roleurl, body, { headers: headers }); + const currentUser = Parse.User.current(); + contactQuery.set( + "CreatedBy", + Parse.User.createWithoutData(currentUser.id) + ); + + contactQuery.set("UserId", { + __type: "Pointer", + className: "_User", + objectId: userRes.id + }); + const acl = new Parse.ACL(); + acl.setPublicReadAccess(true); + acl.setPublicWriteAccess(true); + acl.setReadAccess(currentUser.id, true); + acl.setWriteAccess(currentUser.id, true); + + contactQuery.setACL(acl); + const res = await contactQuery.save(); + + const parseData = JSON.parse(JSON.stringify(res)); + if (props.details) { + props.details({ + value: parseData[props.valueKey], + label: parseData[props.displayKey] + }); + } + if (props.closePopup) { + props.closePopup(); + } + if (props.handleUserData) { + props.handleUserData(parseData); + } + setIsLoader(false); + // Reset the form fields + setAddYourself(false); + setName(""); + setPhone(""); + setEmail(""); + } + } + } else { + alert("Contact already exist!"); setIsLoader(false); - // Reset the form fields - setAddYourself(false); - setName(""); - setPhone(""); - setEmail(""); } } catch (err) { - console.log("err ", err); - if (err.code === 202) { - const params = { email: email }; - const userRes = await Parse.Cloud.run("getUserId", params); - const roleurl = `${parseBaseUrl}functions/AddUserToRole`; - const headers = { - "Content-Type": "application/json", - "X-Parse-Application-Id": parseAppId, - sessionToken: localStorage.getItem("accesstoken") - }; - const body = { - appName: localStorage.getItem("_appName"), - roleName: "contracts_Guest", - userId: userRes.id - }; - await axios.post(roleurl, body, { headers: headers }); - const currentUser = Parse.User.current(); - contactQuery.set( - "CreatedBy", - Parse.User.createWithoutData(currentUser.id) - ); - - contactQuery.set("UserId", { - __type: "Pointer", - className: "_User", - objectId: userRes.id - }); - const acl = new Parse.ACL(); - acl.setPublicReadAccess(true); - acl.setPublicWriteAccess(true); - acl.setReadAccess(currentUser.id, true); - acl.setWriteAccess(currentUser.id, true); - - contactQuery.setACL(acl); - const res = await contactQuery.save(); - - const parseData = JSON.parse(JSON.stringify(res)); - if (props.details) { - props.details({ - value: parseData[props.valueKey], - label: parseData[props.displayKey] - }); - } - if (props.closePopup) { - props.closePopup(); - } - if (props.handleUserData) { - props.handleUserData(parseData); - } - setIsLoader(false); - // Reset the form fields - setAddYourself(false); - setName(""); - setPhone(""); - setEmail(""); - } + console.log("err in fetch contact", err); + setIsLoader(false); + alert("something went wrong, please try again later"); } - } catch (err) { - // console.log("err", err); + } else { setIsLoader(false); - alert("something went wrong!"); - } - }else{ - alert('something went wrong, please try again later') + alert("something went wrong, please try again later"); } }; @@ -266,10 +284,10 @@ const AddSigner = (props) => { type="email" id="email" value={email} - onChange={(e) => setEmail(e.target.value)} + onChange={(e) => setEmail(e.target.value?.toLowerCase())} required disabled={addYourself} - className="px-3 py-2 w-full border-[1px] border-gray-300 rounded focus:outline-none text-xs" + className="px-3 py-2 w-full border-[1px] border-gray-300 rounded focus:outline-none text-xs lowercase" />
@@ -278,14 +296,12 @@ const AddSigner = (props) => { className="block text-xs text-gray-700 font-semibold" > Phone - * setPhone(e.target.value)} - required disabled={addYourself} className="px-3 py-2 w-full border-[1px] border-gray-300 rounded focus:outline-none text-xs" /> diff --git a/apps/OpenSign/src/components/shared/fields/SuggestionInput.js b/apps/OpenSign/src/components/shared/fields/SuggestionInput.js index aaefb2b30..62ccab508 100644 --- a/apps/OpenSign/src/components/shared/fields/SuggestionInput.js +++ b/apps/OpenSign/src/components/shared/fields/SuggestionInput.js @@ -41,7 +41,7 @@ const SuggestionInput = (props) => { const handleInputChange = async (e) => { const value = e.target.value; - setInputValue(value); + setInputValue(value?.toLowerCase()); if (props.onChange) { props.onChange(value); } @@ -67,7 +67,7 @@ const SuggestionInput = (props) => { value={inputValue} onChange={handleInputChange} placeholder="Enter Email..." - className="w-full border-[1px] border-gray-400 p-2 text-black rounded" + className="w-full border-[1px] border-gray-400 p-2 text-black rounded lowercase" required={props.required} /> {showSuggestions && ( diff --git a/apps/OpenSign/src/pages/Login.js b/apps/OpenSign/src/pages/Login.js index 5d2886564..24ef4f7b8 100644 --- a/apps/OpenSign/src/pages/Login.js +++ b/apps/OpenSign/src/pages/Login.js @@ -263,7 +263,7 @@ function Login() { const LocalUserDetails = { name: results[0].get("Name"), email: results[0].get("Email"), - phone: results[0].get("Phone"), + phone: results[0]?.get("Phone") || "", company: results[0].get("Company") }; localStorage.setItem( @@ -317,7 +317,7 @@ function Login() { const LocalUserDetails = { name: _user.name, email: email, - phone: _user.phone + phone: _user?.phone || "" // company: results.get("Company"), }; localStorage.setItem( @@ -868,7 +868,7 @@ function Login() { const LocalUserDetails = { name: results[0].get("Name"), email: results[0].get("Email"), - phone: results[0].get("Phone"), + phone: results[0]?.get("Phone") || "", company: results[0].get("Company") }; localStorage.setItem( @@ -905,7 +905,7 @@ function Login() { const LocalUserDetails = { name: results[0].get("Name"), email: results[0].get("Email"), - phone: results[0].get("Phone") + phone: results[0]?.get("Phone") || "" // company: results.get("Company"), }; localStorage.setItem( @@ -982,7 +982,7 @@ function Login() { userDetails: { name: userInformation.name, email: userInformation.email, - phone: userInformation.phone, + phone: userInformation?.phone || "", role: "contracts_User", company: userDetails.Company, jobTitle: userDetails.Destination @@ -994,7 +994,7 @@ function Login() { const LocalUserDetails = { name: userInformation.name, email: userInformation.email, - phone: userInformation.phone, + phone: userInformation?.phone || "", company: userDetails.Company, jobTitle: userDetails.JobTitle }; diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index b0be26095..5db2c30ae 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1574,7 +1574,7 @@ function PdfRequestFiles() { {/* this modal is used show this document is already sign */} { setIsCompleted((prev) => ({ ...prev, isModal: false })); }} diff --git a/apps/OpenSign/src/pages/Signup.js b/apps/OpenSign/src/pages/Signup.js index 673bdea3a..24b437d47 100644 --- a/apps/OpenSign/src/pages/Signup.js +++ b/apps/OpenSign/src/pages/Signup.js @@ -562,9 +562,11 @@ const Signup = () => { setEmail(e.target.value)} + onChange={(e) => + setEmail(e.target.value?.toLowerCase()) + } required />
diff --git a/apps/OpenSign/src/pages/SignyourselfPdf.js b/apps/OpenSign/src/pages/SignyourselfPdf.js index fda577946..39fdfa1e9 100644 --- a/apps/OpenSign/src/pages/SignyourselfPdf.js +++ b/apps/OpenSign/src/pages/SignyourselfPdf.js @@ -1192,7 +1192,7 @@ function SignYourSelf() { {/* this modal is used show this document is already sign */} { setShowAlreadySignDoc({ status: false }); }}