From 94eeceeaf99cfd124d6941474cc3f3ee9dcca809 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 15 Apr 2024 12:58:16 +0530 Subject: [PATCH 1/8] feat : add recipient button in placeholder flow to add new signers in document signer's list --- .../src/components/pdf/PlaceholderType.js | 20 ++++--- .../src/components/pdf/SignerListPlace.js | 15 ++++- .../src/components/pdf/WidgetComponent.js | 19 ++++++- apps/OpenSign/src/pages/PlaceHolderSign.js | 57 +++++++++---------- apps/OpenSign/src/primitives/LinkUserModal.js | 5 +- 5 files changed, 74 insertions(+), 42 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/PlaceholderType.js b/apps/OpenSign/src/components/pdf/PlaceholderType.js index 918fdc129..b23f056e1 100644 --- a/apps/OpenSign/src/components/pdf/PlaceholderType.js +++ b/apps/OpenSign/src/components/pdf/PlaceholderType.js @@ -38,15 +38,17 @@ function PlaceholderType(props) { "December" ]; const validateExpression = (regexValidation) => { - let regexObject = regexValidation; - if (props.pos?.options.validation.type === "regex") { - regexObject = RegexParser(regexValidation); - } - // new RegExp(regexValidation); - let isValidate = regexObject.test(textValue); - if (!isValidate) { - props?.setValidateAlert(true); - inputRef.current.focus(); + if (textValue) { + let regexObject = regexValidation; + if (props.pos?.options.validation.type === "regex") { + regexObject = RegexParser(regexValidation); + } + // new RegExp(regexValidation); + let isValidate = regexObject.test(textValue); + if (!isValidate) { + props?.setValidateAlert(true); + inputRef.current.focus(); + } } }; diff --git a/apps/OpenSign/src/components/pdf/SignerListPlace.js b/apps/OpenSign/src/components/pdf/SignerListPlace.js index be9965bf4..9a8bab189 100644 --- a/apps/OpenSign/src/components/pdf/SignerListPlace.js +++ b/apps/OpenSign/src/components/pdf/SignerListPlace.js @@ -71,7 +71,7 @@ function SignerListPlace(props) {
- {props.handleAddSigner && ( + {props.handleAddSigner ? (
Add role
+ ) : ( +
props.setIsAddSigner(true)} + style={{ + opacity: props.isMailSend && "0.5", + pointerEvents: props.isMailSend && "none" + }} + > + + Add recipients +
)} ); diff --git a/apps/OpenSign/src/components/pdf/WidgetComponent.js b/apps/OpenSign/src/components/pdf/WidgetComponent.js index e9bff561a..9b0ba807f 100644 --- a/apps/OpenSign/src/components/pdf/WidgetComponent.js +++ b/apps/OpenSign/src/components/pdf/WidgetComponent.js @@ -38,7 +38,8 @@ function WidgetComponent({ sendInOrder, isTemplateFlow, setBlockColor, - blockColor + blockColor, + setIsAddSigner }) { const [isSignersModal, setIsSignersModal] = useState(false); @@ -319,7 +320,7 @@ function WidgetComponent({ )} - {handleAddSigner && ( + {handleAddSigner ? (
Add role
+ ) : ( +
setIsAddSigner(true)} + > + + Add recipients +
)}
{ + const newId = randomId(); + const newRole = `User ${signersdata?.length + 1} `; + + signersdata.push({ + ...data, + className: "contracts_Contactbook", + Id: newId, + Role: newRole + }); + setUniqueId(newId); + setIsSelectId(signersdata.length - 1); + setBlockColor(color[signersdata.length - 1]); + setRoleName(newRole); + setContractName("contracts_Contactbook"); + setSignerObjId(data.objectId); + }; + const closePopup = () => { setIsAddUser({}); + setIsAddSigner(false); }; //function for handle ontext change and save again text in delta in Request Email flow @@ -1984,6 +2005,7 @@ function PlaceHolderSign() { setSignersData={setSignersData} blockColor={blockColor} setBlockColor={setBlockColor} + setIsAddSigner={setIsAddSigner} />
) : ( @@ -2009,6 +2031,7 @@ function PlaceHolderSign() { blockColor={blockColor} setBlockColor={setBlockColor} isMailSend={isMailSend} + setIsAddSigner={setIsAddSigner} // handleAddSigner={handleAddSigner} />
@@ -2035,35 +2058,6 @@ function PlaceHolderSign() { )}
- {/* { - setSignerExistModal(false); - }} - > -
-

Please assign signers to all placeholders

- -
- -
-
*/} + { return ( Date: Mon, 15 Apr 2024 16:01:11 +0530 Subject: [PATCH 2/8] fix: recipient color mismatch issue --- apps/OpenSign/src/pages/PlaceHolderSign.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 1ed9a0f6d..0c29ef4d4 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -1537,11 +1537,12 @@ function PlaceHolderSign() { ...data, className: "contracts_Contactbook", Id: newId, - Role: newRole + Role: newRole, + blockColor: color[signersdata.length] }); setUniqueId(newId); setIsSelectId(signersdata.length - 1); - setBlockColor(color[signersdata.length - 1]); + setBlockColor(color[signersdata.length]); setRoleName(newRole); setContractName("contracts_Contactbook"); setSignerObjId(data.objectId); From 86e5ef6ef5511dd7d05fd029623d977543bd8c70 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 15 Apr 2024 16:30:01 +0530 Subject: [PATCH 3/8] fix: invalid session token issue in recipient signature flow --- apps/OpenSign/src/layout/HomeLayout.js | 4 ++-- apps/OpenSign/src/primitives/Validate.js | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/apps/OpenSign/src/layout/HomeLayout.js b/apps/OpenSign/src/layout/HomeLayout.js index 26a386455..b465e2d1e 100644 --- a/apps/OpenSign/src/layout/HomeLayout.js +++ b/apps/OpenSign/src/layout/HomeLayout.js @@ -36,7 +36,7 @@ const HomeLayout = () => { sessionToken: localStorage.getItem("accesstoken") }); if (user) { - localStorage.setItem("profileImg", user.get('ProfilePic')); + localStorage.setItem("profileImg", user.get("ProfilePic")); checkIsSubscribed(); } else { setIsUserValid(false); @@ -300,7 +300,7 @@ const HomeLayout = () => { ) : (
-

Your session has expired.

+ {/*

Your session has expired.

*/}
{isMobile && props.sendInOrder && ( diff --git a/apps/OpenSign/src/components/pdf/RenderPdf.js b/apps/OpenSign/src/components/pdf/RenderPdf.js index 8d656d383..a8298d019 100644 --- a/apps/OpenSign/src/components/pdf/RenderPdf.js +++ b/apps/OpenSign/src/components/pdf/RenderPdf.js @@ -296,9 +296,11 @@ function RenderPdf({ {type && (
{type}
)} -
- {`(${Role})`} -
+ {Role && ( +
+ {`(${Role})`} +
+ )} ); } else { diff --git a/apps/OpenSign/src/components/pdf/WidgetComponent.js b/apps/OpenSign/src/components/pdf/WidgetComponent.js index 9b0ba807f..957ea9536 100644 --- a/apps/OpenSign/src/components/pdf/WidgetComponent.js +++ b/apps/OpenSign/src/components/pdf/WidgetComponent.js @@ -406,7 +406,7 @@ function WidgetComponent({ )} {isSignersModal && ( @@ -439,7 +439,7 @@ function WidgetComponent({ textAlign: "center" }} > - Please add a role + Please add a {title ? title : "recipients"}
)} diff --git a/apps/OpenSign/src/components/shared/fields/SelectSigners.js b/apps/OpenSign/src/components/shared/fields/SelectSigners.js index f598b9265..24c24ec85 100644 --- a/apps/OpenSign/src/components/shared/fields/SelectSigners.js +++ b/apps/OpenSign/src/components/shared/fields/SelectSigners.js @@ -53,9 +53,19 @@ const SelectSigners = (props) => { const contactRes = await contactbook.find(); if (contactRes) { const res = JSON.parse(JSON.stringify(contactRes)); - // console.log("userList ", res); - setUserList(res); - return await res.map((item) => ({ + const compareArrays = (res, signerObj) => { + return res.filter( + (item1) => + !signerObj.find((item2) => item2.objectId === item1.objectId) + ); + }; + + const updateSignersList = + props?.signersData && compareArrays(res, props?.signersData); + + const result = updateSignersList ? updateSignersList : res; + setUserList(result); + return await result.map((item) => ({ label: item.Email, value: item.objectId })); diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 0c29ef4d4..15e3410ec 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -353,7 +353,7 @@ function PlaceHolderSign() { const updatedSigners = documentData[0].Signers.map((x, index) => ({ ...x, Id: randomId(), - Role: "User " + (index + 1), + // Role: "User " + (index + 1), blockColor: color[index % color.length] })); setSignersData(updatedSigners); @@ -361,7 +361,7 @@ function PlaceHolderSign() { setBlockColor(updatedSigners[0].blockColor); } } else { - setRoleName("User 1"); + // setRoleName("User 1"); if ( documentData[0].Placeholders && documentData[0].Placeholders.length > 0 @@ -1531,19 +1531,15 @@ function PlaceHolderSign() { //function to add new signer in document signers list const handleAddNewRecipients = (data) => { const newId = randomId(); - const newRole = `User ${signersdata?.length + 1} `; - signersdata.push({ ...data, className: "contracts_Contactbook", Id: newId, - Role: newRole, blockColor: color[signersdata.length] }); setUniqueId(newId); setIsSelectId(signersdata.length - 1); setBlockColor(color[signersdata.length]); - setRoleName(newRole); setContractName("contracts_Contactbook"); setSignerObjId(data.objectId); }; @@ -1570,6 +1566,30 @@ function PlaceHolderSign() { style: { fontSize: "13px" } } ]; + + // `handleDeleteUser` function is used to delete record and placeholder when user click on delete which is place next user name in recipients list + const handleDeleteUser = (Id) => { + const updateSigner = signersdata + .filter((x) => x.Id !== Id) + .map((x, i) => ({ ...x, blockColor: color[i] })); + setSignersData(updateSigner); + const updatePlaceholderUser = signerPos + .filter((x) => x.Id !== Id) + .map((x, i) => ({ ...x, blockColor: color[i] })); + const index = signersdata.findIndex((x) => x.Id === Id); + if (index === signersdata.length - 1) { + setUniqueId(updateSigner[updateSigner.length - 1]?.Id || ""); + setIsSelectId(index - 1 || 0); + setBlockColor(color[index - 1 || 0]); + } else { + setUniqueId(updateSigner[index]?.Id || ""); + setIsSelectId(index); + setBlockColor(color[index]); + } + + setSignerPos(updatePlaceholderUser); + setIsMailSend(false); + }; return ( <> @@ -2007,6 +2027,7 @@ function PlaceHolderSign() { blockColor={blockColor} setBlockColor={setBlockColor} setIsAddSigner={setIsAddSigner} + handleDeleteUser={handleDeleteUser} /> </div> ) : ( @@ -2033,6 +2054,8 @@ function PlaceHolderSign() { setBlockColor={setBlockColor} isMailSend={isMailSend} setIsAddSigner={setIsAddSigner} + handleDeleteUser={handleDeleteUser} + roleName={roleName} // handleAddSigner={handleAddSigner} /> <div data-tut="reactourSecond"> @@ -2097,6 +2120,7 @@ function PlaceHolderSign() { handleAddUser={handleAddNewRecipients} isAddSigner={isAddSigner} closePopup={closePopup} + signersData={signersdata} /> <WidgetNameModal widgetName={widgetName} diff --git a/apps/OpenSign/src/primitives/LinkUserModal.js b/apps/OpenSign/src/primitives/LinkUserModal.js index b33ffa63b..a8caa61b2 100644 --- a/apps/OpenSign/src/primitives/LinkUserModal.js +++ b/apps/OpenSign/src/primitives/LinkUserModal.js @@ -16,6 +16,7 @@ const LinkUserModal = (props) => { <SelectSigners details={props.handleAddUser} closePopup={props.closePopup} + signersData={props?.signersData} /> <div style={{ From ff6a8ce75591a6a38a55febae139699c11de4abe Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 16 Apr 2024 11:06:02 +0530 Subject: [PATCH 5/8] fix: customize email is not working for pro user in placeholder flow --- apps/OpenSign/src/components/pdf/RenderAllPdfPage.js | 4 +--- apps/OpenSign/src/pages/PdfRequestFiles.js | 2 +- apps/OpenSign/src/pages/PlaceHolderSign.js | 4 +--- apps/OpenSign/src/pages/SignyourselfPdf.js | 1 - 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/RenderAllPdfPage.js b/apps/OpenSign/src/components/pdf/RenderAllPdfPage.js index 7c045bbc4..cb1fa0700 100644 --- a/apps/OpenSign/src/components/pdf/RenderAllPdfPage.js +++ b/apps/OpenSign/src/components/pdf/RenderAllPdfPage.js @@ -4,7 +4,6 @@ import { Document, Page } from "react-pdf"; import { themeColor } from "../../constant/const"; function RenderAllPdfPage({ - pdfUrl, signPdfUrl, allPages, setAllPages, @@ -50,8 +49,7 @@ function RenderAllPdfPage({ <Document loading={"Loading Document.."} onLoadSuccess={onDocumentLoad} - file={pdfUrl ? pdfUrl : signPdfUrl} - // file="https://api.printnode.com/static/test/pdf/multipage.pdf" + file={signPdfUrl} > {Array.from(new Array(allPages), (el, index) => ( <div diff --git a/apps/OpenSign/src/pages/PdfRequestFiles.js b/apps/OpenSign/src/pages/PdfRequestFiles.js index 30598b1c3..39d07619a 100644 --- a/apps/OpenSign/src/pages/PdfRequestFiles.js +++ b/apps/OpenSign/src/pages/PdfRequestFiles.js @@ -1176,7 +1176,7 @@ function PdfRequestFiles() { </ModalUi> {/* this component used to render all pdf pages in left side */} <RenderAllPdfPage - signPdfUrl={pdfDetails[0].URL} + signPdfUrl={pdfDetails[0] && pdfDetails[0].SignedUrl} allPages={allPages} setAllPages={setAllPages} setPageNumber={setPageNumber} diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 15e3410ec..d96d3aa43 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -1756,9 +1756,7 @@ function PlaceHolderSign() { "cursor-pointer underline text-blue-700 focus:outline-none" } onClick={() => { - isSubscribe || - (!isEnableSubscription && - setIsCustomize(!isCustomize)); + setIsCustomize(!isCustomize); }} > Cutomize Email diff --git a/apps/OpenSign/src/pages/SignyourselfPdf.js b/apps/OpenSign/src/pages/SignyourselfPdf.js index 3be0dc283..e946d0a28 100644 --- a/apps/OpenSign/src/pages/SignyourselfPdf.js +++ b/apps/OpenSign/src/pages/SignyourselfPdf.js @@ -1001,7 +1001,6 @@ function SignYourSelf() { {/* this component used to render all pdf pages in left side */} <RenderAllPdfPage - pdfUrl={pdfUrl} signPdfUrl={pdfDetails[0] && pdfDetails[0].URL} allPages={allPages} setAllPages={setAllPages} From 11384192baba02723bdea79bbfac16cce1cc2368 Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 16 Apr 2024 12:08:50 +0530 Subject: [PATCH 6/8] refactor code --- apps/OpenSign/src/components/pdf/RecipientList.js | 4 +++- apps/OpenSign/src/layout/HomeLayout.js | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/RecipientList.js b/apps/OpenSign/src/components/pdf/RecipientList.js index f31dda61b..780ee2a5d 100644 --- a/apps/OpenSign/src/components/pdf/RecipientList.js +++ b/apps/OpenSign/src/components/pdf/RecipientList.js @@ -231,7 +231,9 @@ const RecipientList = (props) => { </> )} {obj.Name && ( - <span className={"useEmail"}>{obj?.Role || obj.Email}</span> + <span className={"useEmail"}> + {obj?.Role || obj?.Email} + </span> )} </div> </div> diff --git a/apps/OpenSign/src/layout/HomeLayout.js b/apps/OpenSign/src/layout/HomeLayout.js index 23dbeb06a..4a40ee111 100644 --- a/apps/OpenSign/src/layout/HomeLayout.js +++ b/apps/OpenSign/src/layout/HomeLayout.js @@ -295,7 +295,7 @@ const HomeLayout = () => { ) : ( <ModalUi title={"Session Expired"} isOpen={true} showClose={false}> <div className="flex flex-col justify-center items-center py-4 md:py-5 gap-5"> - {/* <p className="text-xl font-normal">Your session has expired.</p> */} + <p className="text-xl font-normal">Your session has expired.</p> <button onClick={handleLoginBtn} className="text-base px-3 py-1.5 rounded shadow-md text-white bg-[#1ab6ce]" From b6e028a2c005a61e2ec24dcc9d4ae9c50e404b94 Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 16 Apr 2024 13:09:30 +0530 Subject: [PATCH 7/8] fix: add comment --- apps/OpenSign/src/components/shared/fields/SelectSigners.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/OpenSign/src/components/shared/fields/SelectSigners.js b/apps/OpenSign/src/components/shared/fields/SelectSigners.js index 24c24ec85..f6ec88c82 100644 --- a/apps/OpenSign/src/components/shared/fields/SelectSigners.js +++ b/apps/OpenSign/src/components/shared/fields/SelectSigners.js @@ -53,6 +53,8 @@ const SelectSigners = (props) => { const contactRes = await contactbook.find(); if (contactRes) { const res = JSON.parse(JSON.stringify(contactRes)); + //compareArrays is a function where compare between two array (total signersList and dcument signers list) + //and filter signers from total signer's list which already present in document's signers list const compareArrays = (res, signerObj) => { return res.filter( (item1) => @@ -60,6 +62,7 @@ const SelectSigners = (props) => { ); }; + //get update signer's List if signersdata is present const updateSignersList = props?.signersData && compareArrays(res, props?.signersData); From 90f3e0066b476c2ca38d9654ae71194618c239a6 Mon Sep 17 00:00:00 2001 From: RaktimaNXG <raktima.c@nxglabs.com> Date: Tue, 16 Apr 2024 13:36:10 +0530 Subject: [PATCH 8/8] fix: remove already attached signers from add user link modal in dropdown --- apps/OpenSign/src/pages/PlaceHolderSign.js | 1 + apps/OpenSign/src/pages/TemplatePlaceholder.js | 1 + 2 files changed, 2 insertions(+) diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 352fee6cf..8e773ba7f 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -2111,6 +2111,7 @@ function PlaceHolderSign() { isAddUser={isAddUser} uniqueId={uniqueId} closePopup={closePopup} + signersData={signersdata} /> <LinkUserModal handleAddUser={handleAddNewRecipients} diff --git a/apps/OpenSign/src/pages/TemplatePlaceholder.js b/apps/OpenSign/src/pages/TemplatePlaceholder.js index 477eb9a02..a90bfd600 100644 --- a/apps/OpenSign/src/pages/TemplatePlaceholder.js +++ b/apps/OpenSign/src/pages/TemplatePlaceholder.js @@ -1548,6 +1548,7 @@ const TemplatePlaceholder = () => { isAddUser={isAddUser} uniqueId={uniqueId} closePopup={closePopup} + signersData={signersdata} /> </div> <ModalUi