From 0b687310fdf0f7de3fad4f254534d69cca75e4cf Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <93375423+prafull-opensignlabs@users.noreply.github.com> Date: Sat, 16 Dec 2023 17:03:04 +0530 Subject: [PATCH 01/12] Update LoginGoogle.js --- apps/OpenSign/src/components/LoginGoogle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/OpenSign/src/components/LoginGoogle.js b/apps/OpenSign/src/components/LoginGoogle.js index e0b3ed6c1..a95f903bf 100644 --- a/apps/OpenSign/src/components/LoginGoogle.js +++ b/apps/OpenSign/src/components/LoginGoogle.js @@ -148,7 +148,7 @@ const GoogleSignInBtn = ({ email: userDetails.Email, // "passsword":userDetails.Phone, phone: userDetails.Phone, - role: "contracts_Admin", + role: "contracts_User", company: userDetails.Company, jobTitle: userDetails.Destination } From 300ddb810f0d61df15065066faeba621c017bd21 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs <93375423+prafull-opensignlabs@users.noreply.github.com> Date: Sat, 16 Dec 2023 17:03:35 +0530 Subject: [PATCH 02/12] Update LoginFacebook.js --- apps/OpenSign/src/components/LoginFacebook.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/OpenSign/src/components/LoginFacebook.js b/apps/OpenSign/src/components/LoginFacebook.js index 1dd0297a4..033208d57 100644 --- a/apps/OpenSign/src/components/LoginFacebook.js +++ b/apps/OpenSign/src/components/LoginFacebook.js @@ -86,7 +86,7 @@ const LoginFacebook = ({ email: userDetails.Email, // "passsword":userDetails.Phone, phone: userDetails.Phone, - role: "contracts_Admin", + role: "contracts_User", company: userDetails.Company } }; From 07f2ceed6e555fdfb804c779dd8a85dbc27b4cdf Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 29 Dec 2023 12:31:36 +0530 Subject: [PATCH 03/12] add session validation, updated migration script and minor ui changes --- apps/OpenSign/src/App.js | 21 +++- apps/OpenSign/src/layout/HomeLayout.js | 95 ++++++++++++++----- apps/OpenSign/src/layout/ValidateRoute.js | 25 +++++ apps/OpenSign/src/primitives/ModalUi.js | 32 +++++-- .../20231208132950-update_template_menu.cjs | 23 +++-- .../src/Component/component/EditTemplate.js | 2 +- .../src/Component/component/LinkUserModal.js | 6 +- .../SignDocuments/src/css/AddUser.css | 2 +- .../src/premitives/SelectSigners.js | 5 +- 9 files changed, 161 insertions(+), 50 deletions(-) create mode 100644 apps/OpenSign/src/layout/ValidateRoute.js diff --git a/apps/OpenSign/src/App.js b/apps/OpenSign/src/App.js index 500e00808..d1555f8bf 100644 --- a/apps/OpenSign/src/App.js +++ b/apps/OpenSign/src/App.js @@ -15,6 +15,7 @@ import ForgetPassword from "./routes/ForgetPassword"; import ChangePassword from "./routes/ChangePassword"; import ReportMicroapp from "./components/ReportMicroapp"; import LoadMf from "./routes/LoadMf"; +import ValidateRoute from "./layout/ValidateRoute"; function App() { const [isloading, setIsLoading] = useState(true); @@ -58,8 +59,24 @@ function App() { ) : ( - } /> - } /> + + + + } + /> + + + + } + /> } /> } /> {process.env.REACT_APP_ENABLE_SUBSCRIPTION && ( diff --git a/apps/OpenSign/src/layout/HomeLayout.js b/apps/OpenSign/src/layout/HomeLayout.js index 5583df9c5..c877b90a7 100644 --- a/apps/OpenSign/src/layout/HomeLayout.js +++ b/apps/OpenSign/src/layout/HomeLayout.js @@ -7,10 +7,35 @@ import Tour from "reactour"; import axios from "axios"; import { useSelector } from "react-redux"; import Parse from "parse"; +import ModalUi from "../primitives/ModalUi"; +import { useNavigate } from "react-router-dom"; + const HomeLayout = ({ children }) => { + const navigate = useNavigate(); const { width } = useWindowSize(); const [isOpen, setIsOpen] = useState(true); const arr = useSelector((state) => state.TourSteps); + const [isUserValid, setIsUserValid] = useState(true); + + useEffect(() => { + (async () => { + try { + // Use the session token to validate the user + const userQuery = new Parse.Query(Parse.User); + const user = await userQuery.get(Parse.User.current().id, { + sessionToken: localStorage.getItem("accesstoken") + }); + if (user) { + setIsUserValid(true); + } else { + setIsUserValid(false); + } + } catch (error) { + // Session token is invalid or there was an error + setIsUserValid(false); + } + })(); + }, []); // reactour state const [isCloseBtn, setIsCloseBtn] = useState(true); @@ -19,7 +44,7 @@ const HomeLayout = ({ children }) => { const [tourConfigs, setTourConfigs] = useState([]); const showSidebar = () => { - setIsOpen(value => !value); + setIsOpen((value) => !value); }; useEffect(() => { if (width && width <= 768) { @@ -28,9 +53,7 @@ const HomeLayout = ({ children }) => { }, [width]); useEffect(() => { - if (localStorage.getItem("domain") === "sign" && arr && arr.length > 0) { - handleDynamicSteps(); - } else if ( + if ( localStorage.getItem("domain") === "contracts" && arr && arr.length > 0 @@ -153,32 +176,58 @@ const HomeLayout = ({ children }) => { setIsOpen(false); } }; + + const handleLoginBtn = () => { + Parse.User.logOut(); + navigate("/", { replace: true }); + }; return (
-
- + {isUserValid ? ( + <> +
+ -
-
{children}
-
-
+
+
{children}
+
+
+
+
-
-
- + + + ) : ( + +
+

Your Session has Expired.

+ +
+
+ )}
); }; diff --git a/apps/OpenSign/src/layout/ValidateRoute.js b/apps/OpenSign/src/layout/ValidateRoute.js new file mode 100644 index 000000000..e1b1b8825 --- /dev/null +++ b/apps/OpenSign/src/layout/ValidateRoute.js @@ -0,0 +1,25 @@ +import React, { useEffect } from "react"; +import Parse from "parse"; + +const ValidateRoute = ({ children }) => { + useEffect(() => { + (async () => { + try { + // Use the session token to validate the user + const userQuery = new Parse.Query(Parse.User); + const user = await userQuery.get(Parse.User.current().id, { + sessionToken: localStorage.getItem("accesstoken") + }); + if (!user) { + Parse.User.logOut(); + } + } catch (error) { + // Session token is invalid or there was an error + Parse.User.logOut(); + } + })(); + }, []); + return
{children}
; +}; + +export default ValidateRoute; diff --git a/apps/OpenSign/src/primitives/ModalUi.js b/apps/OpenSign/src/primitives/ModalUi.js index f5926e081..c3e1721cf 100644 --- a/apps/OpenSign/src/primitives/ModalUi.js +++ b/apps/OpenSign/src/primitives/ModalUi.js @@ -1,21 +1,35 @@ import React from "react"; -const ModalUi = ({ children, title, isOpen, handleClose }) => { - +const ModalUi = ({ + children, + title, + isOpen, + headColor, + handleClose, + showHeader = true, + showClose = true +}) => { return ( <> {isOpen && (
-
-
{title}
+ {showHeader && (
handleClose && handleClose()} + className="flex justify-between rounded-t items-center py-[15px] px-[20px] text-white" + style={{ background: headColor ? headColor : "#32a3ac" }} > - × +
{title}
+ {showClose && ( +
handleClose && handleClose()} + > + × +
+ )}
-
-
{children}
+ )} +
{children}
)} diff --git a/apps/OpenSignServer/databases/migrations/20231208132950-update_template_menu.cjs b/apps/OpenSignServer/databases/migrations/20231208132950-update_template_menu.cjs index 9c33a5102..774855dc6 100644 --- a/apps/OpenSignServer/databases/migrations/20231208132950-update_template_menu.cjs +++ b/apps/OpenSignServer/databases/migrations/20231208132950-update_template_menu.cjs @@ -32,7 +32,7 @@ exports.up = async Parse => { objectId: 'sHAnZphf69', }, { - icon: 'fas fa-file-signature', + icon: 'fa-solid fa-paper-plane', title: 'Request signatures', target: '_self', pageType: 'form', @@ -50,7 +50,7 @@ exports.up = async Parse => { ], }, { - icon: 'fas fa-file-signature', + icon: 'fa-solid fa-file-contract', title: 'Templates', target: '_self', pageType: 'report', @@ -181,23 +181,30 @@ exports.up = async Parse => { objectId: 'sHAnZphf69', }, { - icon: 'fas fa-file-signature', + icon: 'fa-solid fa-paper-plane', title: 'Request signatures', target: '_self', pageType: 'form', description: '', objectId: '8mZzFxbG1z', }, + { + icon: 'fas fa-file-signature', + title: 'New template', + target: '_self', + pageType: 'form', + description: '', + objectId: 'template', + }, ], }, { - icon: 'fas fa-folder', - title: 'OpenSignDrive™', + icon: 'fa-solid fa-file-contract', + title: 'Templates', target: '_self', - pageType: 'mf', + pageType: 'report', description: '', - objectId: - 'remoteUrl=aHR0cHM6Ly9xaWstYWktb3JnLmdpdGh1Yi5pby9TaWduLU1pY3JvYXBwVjIvcmVtb3RlRW50cnkuanM=&moduleToLoad=AppRoutes&remoteName=signmicroapp/legadrive', + objectId: '6TeaPr321t', }, { icon: 'fas fa-address-card', diff --git a/microfrontends/SignDocuments/src/Component/component/EditTemplate.js b/microfrontends/SignDocuments/src/Component/component/EditTemplate.js index 883051507..f60091c6d 100644 --- a/microfrontends/SignDocuments/src/Component/component/EditTemplate.js +++ b/microfrontends/SignDocuments/src/Component/component/EditTemplate.js @@ -43,7 +43,7 @@ const EditTemplate = ({ template, onSuccess }) => { fontWeight: "700" }} > - file selected : {template.URL?.split("/")[3]?.split("_")[1]} + {template.URL?.split("/")[3]?.split("_")[1]}
diff --git a/microfrontends/SignDocuments/src/Component/component/LinkUserModal.js b/microfrontends/SignDocuments/src/Component/component/LinkUserModal.js index 5b14264bb..b7a5cac97 100644 --- a/microfrontends/SignDocuments/src/Component/component/LinkUserModal.js +++ b/microfrontends/SignDocuments/src/Component/component/LinkUserModal.js @@ -10,12 +10,12 @@ const LinkUserModal = (props) => { details={props.handleAddUser} closePopup={props.closePopup} /> -
+
or @@ -23,7 +23,7 @@ const LinkUserModal = (props) => { style={{ height: 1, width: "100%", - backgroundColor: "grey" + backgroundColor: "#ccc" }} >
diff --git a/microfrontends/SignDocuments/src/css/AddUser.css b/microfrontends/SignDocuments/src/css/AddUser.css index 0e52ba2a0..00576a9fc 100644 --- a/microfrontends/SignDocuments/src/css/AddUser.css +++ b/microfrontends/SignDocuments/src/css/AddUser.css @@ -1,6 +1,6 @@ .addusercontainer { height: 100%; - padding: 20px; + padding: 10px 20px 10px 20px; } .loaderdiv { diff --git a/microfrontends/SignDocuments/src/premitives/SelectSigners.js b/microfrontends/SignDocuments/src/premitives/SelectSigners.js index 88b188842..6c207f36a 100644 --- a/microfrontends/SignDocuments/src/premitives/SelectSigners.js +++ b/microfrontends/SignDocuments/src/premitives/SelectSigners.js @@ -87,10 +87,9 @@ const SelectSigners = (props) => { />
{isError ?

Please select signer

:

.

} - -
+
From d49b7bd201c7e5b1d21b5befccd57530d1ece6bc Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 29 Dec 2023 12:59:57 +0530 Subject: [PATCH 04/12] change query of progress and recent sent for signtuare reports --- .../src/components/fields/CreateFolder.js | 16 ++-- .../src/components/fields/SelectFolder.js | 96 +------------------ apps/OpenSign/src/layout/HomeLayout.js | 11 +-- apps/OpenSign/src/primitives/ModalUi.js | 2 +- .../cloud/parsefunction/reportsJson.js | 4 +- 5 files changed, 15 insertions(+), 114 deletions(-) diff --git a/apps/OpenSign/src/components/fields/CreateFolder.js b/apps/OpenSign/src/components/fields/CreateFolder.js index 1f921e904..7c13e6145 100644 --- a/apps/OpenSign/src/components/fields/CreateFolder.js +++ b/apps/OpenSign/src/components/fields/CreateFolder.js @@ -74,15 +74,15 @@ const CreateFolder = ({ parentFolderId, onSuccess, folderCls }) => { template.set("CreatedBy", Parse.User.createWithoutData(currentUser.id)); const res = await template.save(); if (res) { + setAlert({ + type: "success", + message: "Folder created successfully!" + }); + setIsAlert(true); + setTimeout(() => { + setIsAlert(false); + }, 1000); if (onSuccess) { - setAlert({ - type: "success", - message: "Folder created successfully!" - }); - setIsAlert(true); - setTimeout(() => { - setIsAlert(false); - }, 1000); onSuccess(res); } } diff --git a/apps/OpenSign/src/components/fields/SelectFolder.js b/apps/OpenSign/src/components/fields/SelectFolder.js index 13c2ff157..38694b740 100644 --- a/apps/OpenSign/src/components/fields/SelectFolder.js +++ b/apps/OpenSign/src/components/fields/SelectFolder.js @@ -135,6 +135,7 @@ const SelectFolder = ({ required, onSuccess, folderCls }) => { } else { fetchFolder(); } + handleCreate(); }; return (
@@ -253,101 +254,6 @@ const SelectFolder = ({ required, onSuccess, folderCls }) => {
- {/* {isOpen && ( -
-
-
- Select Folder -
-
- -
-
-
-
-
- removeTabListItem(e)} - > - Root /{" "} - - {tabList && - tabList.map((tab, i) => ( - - removeTabListItem(e, i)} - > - {tab.Name} - - {" / "} - - ))} -
-
-
- {!isAdd && - folderList.length > 0 && - folderList.map((folder) => ( -
handleSelect(folder)} - > -
- - {folder.Name} -
-
- ))} - {isAdd && ( - - )} - {isLoader && ( -
- -
- )} -
-
-
-
-
- {isAdd ? ( - - ) : ( - - )} -
-
- -
-
-
- )} */} ); }; diff --git a/apps/OpenSign/src/layout/HomeLayout.js b/apps/OpenSign/src/layout/HomeLayout.js index c877b90a7..07531f020 100644 --- a/apps/OpenSign/src/layout/HomeLayout.js +++ b/apps/OpenSign/src/layout/HomeLayout.js @@ -211,14 +211,9 @@ const HomeLayout = ({ children }) => { /> ) : ( - -
-

Your Session has Expired.

+ +
+

Your session has expired.

))} + {isDeleteModal[item.objectId] && ( + +
+
+ Are you sure you want to delete this contact? +
+
+
+ + +
+
+
+ )} ) : ( @@ -421,10 +456,14 @@ const ReportTable = ({
No Data Available
)} - +
diff --git a/apps/OpenSign/src/layout/ValidateRoute.js b/apps/OpenSign/src/primitives/ValidateRoute.js similarity index 65% rename from apps/OpenSign/src/layout/ValidateRoute.js rename to apps/OpenSign/src/primitives/ValidateRoute.js index e1b1b8825..62202dfe6 100644 --- a/apps/OpenSign/src/layout/ValidateRoute.js +++ b/apps/OpenSign/src/primitives/ValidateRoute.js @@ -11,14 +11,23 @@ const ValidateRoute = ({ children }) => { sessionToken: localStorage.getItem("accesstoken") }); if (!user) { - Parse.User.logOut(); + handlelogout(); } } catch (error) { - // Session token is invalid or there was an error - Parse.User.logOut(); + handlelogout(); } })(); }, []); + const handlelogout = async () => { + try { + Parse.User.logOut(); + localStorage.removeItem("accesstoken"); + } catch (err) { + console.log("err ", err); + } finally { + localStorage.removeItem("accesstoken"); + } + }; return
{children}
; }; From 4648ace84ef81ebe1d1e7d40f496390a07529f76 Mon Sep 17 00:00:00 2001 From: prafull-opensignlabs Date: Fri, 29 Dec 2023 23:00:37 +0530 Subject: [PATCH 06/12] fix : minor bug fix in template --- .../src/Component/TemplatePlaceholder.js | 131 +++----- .../Component/component/fieldsComponent.js | 104 +++++-- .../src/Component/component/renderPdf.js | 9 +- .../src/Component/placeHolderSign.js | 288 +++++++----------- .../src/premitives/RecipientList.js | 3 + 5 files changed, 227 insertions(+), 308 deletions(-) diff --git a/microfrontends/SignDocuments/src/Component/TemplatePlaceholder.js b/microfrontends/SignDocuments/src/Component/TemplatePlaceholder.js index 13cc69416..04c1b6210 100644 --- a/microfrontends/SignDocuments/src/Component/TemplatePlaceholder.js +++ b/microfrontends/SignDocuments/src/Component/TemplatePlaceholder.js @@ -327,12 +327,12 @@ const TemplatePlaceholder = () => { //function for setting position after drop signature button over pdf const addPositionOfSignature = (item, monitor) => { - getSignerPos(item, monitor); + getSignerPos(item, monitor); }; // `getSignerPos` is used to get placeholder position when user place it and save it in array const getSignerPos = (item, monitor) => { - const signer = signersdata.find((x) => x.Id === uniqueId); + if(uniqueId){const signer = signersdata.find((x) => x.Id === uniqueId); if (signer) { const posZIndex = zIndex + 1; setZIndex(posZIndex); @@ -344,8 +344,7 @@ const TemplatePlaceholder = () => { // ); let filterSignerPos = signerPos.filter((data) => data.Id === uniqueId); let dropData = []; - let xyPosArr = []; - let xyPos = {}; + let placeHolder ; if (item === "onclick") { const dropObj = { xPosition: window.innerWidth / 2 - 100, @@ -359,12 +358,11 @@ const TemplatePlaceholder = () => { zIndex: posZIndex }; dropData.push(dropObj); - xyPos = { + placeHolder = { pageNumber: pageNumber, pos: dropData }; - xyPosArr.push(xyPos); } else if (item.type === "BOX") { const offset = monitor.getClientOffset(); //adding and updating drop position in array when user drop signature button in div @@ -390,21 +388,14 @@ const TemplatePlaceholder = () => { }; dropData.push(dropObj); - xyPos = { + placeHolder = { pageNumber: pageNumber, pos: dropData }; - - xyPosArr.push(xyPos); } - const { blockColor, Role } = signersdata.find((x) => x.Id === uniqueId); + const { blockColor, Role } = signer //adding placholder in existing signer pos array (placaholder) if (filterSignerPos.length > 0) { - // const colorIndex = signerPos - // .map((e) => e.signerObjId) - // .indexOf(signerObjId); - - const colorIndex = signerPos.map((e) => e.Id).indexOf(uniqueId); const getPlaceHolder = filterSignerPos[0].placeHolder; const updatePlace = getPlaceHolder.filter( (data) => data.pageNumber !== pageNumber @@ -416,79 +407,21 @@ const TemplatePlaceholder = () => { //add entry of position for same signer on multiple page if (getPageNumer.length > 0) { const getPos = getPageNumer[0].pos; - const newSignPos = getPos.concat(dropData); + const newSignPos = getPos.concat(dropData); let xyPos = { pageNumber: pageNumber, pos: newSignPos }; updatePlace.push(xyPos); - let placeHolderPos; - if (contractName) { - placeHolderPos = { - blockColor: blockColor ? blockColor : color[isSelectListId], - signerObjId: signerObjId, - placeHolder: updatePlace, - signerPtr: { - __type: "Pointer", - className: `${contractName}`, - objectId: signerObjId - }, - Role: Role ? Role : roleName, - Id: uniqueId - }; - } else { - placeHolderPos = { - blockColor: blockColor ? blockColor : color[isSelectListId], - signerObjId: "", - placeHolder: updatePlace, - signerPtr: {}, - Role: Role ? Role : roleName, - Id: uniqueId - }; - } - // signerPos.splice(colorIndex, 1, placeHolderPos); - const newArry = [placeHolderPos]; - const newArray = [ - ...signerPos.slice(0, colorIndex), - ...newArry, - ...signerPos.slice(colorIndex + 1) - ]; - setSignerPos(newArray); + const updatesignerPos = signerPos.map((x) => + x.Id === uniqueId ? { ...x, placeHolder: updatePlace } : x + ); + setSignerPos(updatesignerPos); } else { - const newSignPoss = getPlaceHolder.concat(xyPosArr[0]); - let placeHolderPos; - if (contractName) { - placeHolderPos = { - blockColor: color[isSelectListId], - signerObjId: signerObjId, - placeHolder: newSignPoss, - signerPtr: { - __type: "Pointer", - className: `${contractName}`, - objectId: signerObjId - }, - Role: Role ? Role : roleName, - Id: uniqueId - }; - } else { - placeHolderPos = { - blockColor: color[isSelectListId], - signerObjId: "", - placeHolder: newSignPoss, - signerPtr: {}, - Role: Role ? Role : roleName, - Id: uniqueId - }; - } - - const newArry = [placeHolderPos]; - const newArray = [ - ...signerPos.slice(0, colorIndex), - ...newArry, - ...signerPos.slice(colorIndex + 1) - ]; - - setSignerPos(newArray); + const updatesignerPos = signerPos.map((x) => + x.Id === uniqueId ? { ...x, placeHolder: [...x.placeHolder, placeHolder] } : x + ); + setSignerPos(updatesignerPos); } } else { //adding new placeholder for selected signer in pos array (placeholder) @@ -502,7 +435,7 @@ const TemplatePlaceholder = () => { }, signerObjId: signerObjId, blockColor: blockColor ? blockColor : color[isSelectListId], - placeHolder: xyPosArr, + placeHolder: [placeHolder], Role: Role ? Role : roleName, Id: uniqueId }; @@ -511,18 +444,17 @@ const TemplatePlaceholder = () => { signerPtr: {}, signerObjId: "", blockColor: blockColor ? blockColor : color[isSelectListId], - placeHolder: xyPosArr, + placeHolder: [placeHolder], Role: Role ? Role : roleName, Id: uniqueId }; } - setSignerPos((prev) => [...prev, placeHolderPos]); } setIsMailSend(false); } else { setIsReceipent(false); - } + }} }; //function for get pdf page details const pageDetails = async (pdf) => { @@ -884,18 +816,18 @@ const TemplatePlaceholder = () => { // `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] })); + .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 ||""); + .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(0); - }else{ - setUniqueId(updateSigner[index]?.Id ||""); + } else { + setUniqueId(updateSigner[index]?.Id || ""); setIsSelectId(index); } @@ -924,12 +856,14 @@ const TemplatePlaceholder = () => { const updateSigner = signersdata.map((x) => { if (x.Id === uniqueId) { - return { ...x, ...data }; + return { ...x, ...data, className: "contracts_Contactbook" }; } return { ...x }; }); setSignersData(updateSigner); setIsMailSend(false); + const index = signersdata.findIndex((x)=> x.Id ===uniqueId) + setIsSelectId(index) }; // `closePopup` is used to close Add/Choose signer modal @@ -1054,7 +988,10 @@ const TemplatePlaceholder = () => { handleClose={() => setIsCreateDocModal(false)} >
-

Do you want to create a document using the template you just created ?

+

+ Do you want to create a document using the template you just + created ? +

{ - if (signersdata?.length) { - handleModal(); - } + // if (signersdata?.length) { + handleModal(); + // } }} > - + Recipient - + {signersdata[isSelectListId]?.Role && (
- {signersdata[isSelectListId]?.Name - ? ` : ${signersdata[isSelectListId]?.Name}` - : ` : ${signersdata[isSelectListId]?.Role}`} + {signersdata[isSelectListId]?.Name ? ( + <> + :{" "} + {signersdata[isSelectListId]?.Name?.length > 12 + ? `${signersdata[isSelectListId].Name.slice( + 0, + 12 + )}...` + : signersdata[isSelectListId]?.Name} + + ) : ( + <> + :{" "} + {signersdata[isSelectListId]?.Role?.length > 12 + ? `${signersdata[isSelectListId].Role.slice( + 0, + 12 + )}...` + : signersdata[isSelectListId]?.Role} + + )}
)} +
+ +
)} @@ -333,25 +367,41 @@ function FieldsComponent({
)} - - - + {isSignersModal && ( + + {signersdata.length > 0 ? ( + + ) : ( +
+ Please add Recipient +
+ )} +
+ )} ); } diff --git a/microfrontends/SignDocuments/src/Component/component/renderPdf.js b/microfrontends/SignDocuments/src/Component/component/renderPdf.js index 808e12c9b..2be2c7675 100644 --- a/microfrontends/SignDocuments/src/Component/component/renderPdf.js +++ b/microfrontends/SignDocuments/src/Component/component/renderPdf.js @@ -381,14 +381,12 @@ function RenderPdf({ }; const handleUserName = (signerId, Role) => { if (signerId) { - const checkSign = signersdata.filter( - (sign) => sign.objectId === signerId - ); - if (checkSign.length > 0) { + const checkSign = signersdata.find((sign) => sign.objectId === signerId); + if (checkSign?.Name) { return ( <>
- {checkSign[0].Name} + {checkSign?.Name}
{`(${Role})`}
@@ -788,7 +786,6 @@ function RenderPdf({ xyPostion, index, setXyPostion - ); }} > diff --git a/microfrontends/SignDocuments/src/Component/placeHolderSign.js b/microfrontends/SignDocuments/src/Component/placeHolderSign.js index 32e1f3607..00c03f030 100644 --- a/microfrontends/SignDocuments/src/Component/placeHolderSign.js +++ b/microfrontends/SignDocuments/src/Component/placeHolderSign.js @@ -53,7 +53,7 @@ function PlaceHolderSign() { message: "This might take some time" }); const [handleError, setHandleError] = useState(); - const [currentEmail, setCurrentEmail] = useState(); + const [currentId, setCurrentId] = useState(""); const [pdfNewWidth, setPdfNewWidth] = useState(); const [placeholderTour, setPlaceholderTour] = useState(true); const [checkTourStatus, setCheckTourStatus] = useState(false); @@ -202,10 +202,7 @@ function PlaceHolderSign() { if (documentData[0].Signers && documentData[0].Signers.length > 0) { const currEmail = documentData[0].ExtUserPtr.Email; - const filterCurrEmail = documentData[0].Signers.filter( - (data) => data.Email === currEmail - ); - setCurrentEmail(filterCurrEmail); + setCurrentId(currEmail) setSignerObjId(documentData[0].Signers[0].objectId); setContractName(documentData[0].Signers[0].className); setIsSelectId(0); @@ -329,196 +326,128 @@ function PlaceHolderSign() { }; const getSignerPos = (item, monitor) => { - const posZIndex = zIndex + 1; - setZIndex(posZIndex); - const newWidth = containerWH.width; - const scale = pdfOriginalWidth / newWidth; - const key = Math.floor(1000 + Math.random() * 9000); - // let filterSignerPos = signerPos.filter( - // (data) => data.signerObjId === signerObjId - // ); - let filterSignerPos = signerPos.filter((data) => data.Id === uniqueId); - - let dropData = []; - let xyPosArr = []; - let xyPos = {}; - if (item === "onclick") { - const dropObj = { - //onclick put placeholder center on pdf - xPosition: window.innerWidth / 2 - 100, - yPosition: window.innerHeight / 2 - 60, - isStamp: monitor, - key: key, - isDrag: false, - scale: scale, - isMobile: isMobile, - yBottom: window.innerHeight / 2 - 60, - zIndex: posZIndex - }; - dropData.push(dropObj); - xyPos = { - pageNumber: pageNumber, - pos: dropData - }; - - xyPosArr.push(xyPos); - } else if (item.type === "BOX") { - const offset = monitor.getClientOffset(); - //adding and updating drop position in array when user drop signature button in div - const containerRect = document - .getElementById("container") - .getBoundingClientRect(); - const x = offset.x - containerRect.left; - const y = offset.y - containerRect.top; - const ybottom = containerRect.bottom - offset.y; - - const dropObj = { - xPosition: signBtnPosition[0] ? x - signBtnPosition[0].xPos : x, - yPosition: signBtnPosition[0] ? y - signBtnPosition[0].yPos : y, - isStamp: isDragStamp || isDragStampSS ? true : false, - key: key, - isDrag: false, - firstXPos: signBtnPosition[0] && signBtnPosition[0].xPos, - firstYPos: signBtnPosition[0] && signBtnPosition[0].yPos, - yBottom: ybottom, - scale: scale, - isMobile: isMobile, - zIndex: posZIndex - }; - dropData.push(dropObj); - xyPos = { - pageNumber: pageNumber, - pos: dropData - }; - - xyPosArr.push(xyPos); - } - - //add signers objId first inseretion - if (filterSignerPos.length > 0) { - // const colorIndex = signerPos - // .map((e) => e.signerObjId) - // .indexOf(signerObjId); - - const colorIndex = signerPos.map((e) => e.Id).indexOf(uniqueId); - - const getPlaceHolder = filterSignerPos[0].placeHolder; - const updatePlace = getPlaceHolder.filter( - (data) => data.pageNumber !== pageNumber - ); - const getPageNumer = getPlaceHolder.filter( - (data) => data.pageNumber === pageNumber - ); - - //add entry of position for same signer on multiple page - if (getPageNumer.length > 0) { - const getPos = getPageNumer[0].pos; - const newSignPos = getPos.concat(dropData); - let xyPos = { + const signer = signersdata.find((x) => x.Id === uniqueId); + if (signer) { + const posZIndex = zIndex + 1; + setZIndex(posZIndex); + const newWidth = containerWH.width; + const scale = pdfOriginalWidth / newWidth; + const key = randomId(); + // let filterSignerPos = signerPos.filter( + // (data) => data.signerObjId === signerObjId + // ); + let filterSignerPos = signerPos.filter((data) => data.Id === uniqueId); + let dropData = []; + let placeHolder ; + if (item === "onclick") { + const dropObj = { + xPosition: window.innerWidth / 2 - 100, + yPosition: window.innerHeight / 2 - 60, + isStamp: monitor, + key: key, + isDrag: false, + scale: scale, + isMobile: isMobile, + yBottom: window.innerHeight / 2 - 60, + zIndex: posZIndex + }; + dropData.push(dropObj); + placeHolder = { pageNumber: pageNumber, - pos: newSignPos + pos: dropData }; - updatePlace.push(xyPos); + + } else if (item.type === "BOX") { + const offset = monitor.getClientOffset(); + //adding and updating drop position in array when user drop signature button in div + const containerRect = document + .getElementById("container") + .getBoundingClientRect(); + const x = offset.x - containerRect.left; + const y = offset.y - containerRect.top; + const ybottom = containerRect.bottom - offset.y; + + const dropObj = { + xPosition: signBtnPosition[0] ? x - signBtnPosition[0].xPos : x, + yPosition: signBtnPosition[0] ? y - signBtnPosition[0].yPos : y, + isStamp: isDragStamp || isDragStampSS ? true : false, + key: key, + isDrag: false, + firstXPos: signBtnPosition[0] && signBtnPosition[0].xPos, + firstYPos: signBtnPosition[0] && signBtnPosition[0].yPos, + yBottom: ybottom, + scale: scale, + isMobile: isMobile, + zIndex: posZIndex + }; + + dropData.push(dropObj); + placeHolder = { + pageNumber: pageNumber, + pos: dropData + }; + } + const { blockColor, Role } = signer + //adding placholder in existing signer pos array (placaholder) + if (filterSignerPos.length > 0) { + const getPlaceHolder = filterSignerPos[0].placeHolder; + const updatePlace = getPlaceHolder.filter( + (data) => data.pageNumber !== pageNumber + ); + const getPageNumer = getPlaceHolder.filter( + (data) => data.pageNumber === pageNumber + ); + + //add entry of position for same signer on multiple page + if (getPageNumer.length > 0) { + const getPos = getPageNumer[0].pos; + const newSignPos = getPos.concat(dropData); + let xyPos = { + pageNumber: pageNumber, + pos: newSignPos + }; + updatePlace.push(xyPos); + const updatesignerPos = signerPos.map((x) => + x.Id === uniqueId ? { ...x, placeHolder: updatePlace } : x + ); + setSignerPos(updatesignerPos); + } else { + const updatesignerPos = signerPos.map((x) => + x.Id === uniqueId ? { ...x, placeHolder: [...x.placeHolder, placeHolder] } : x + ); + setSignerPos(updatesignerPos); + } + } else { + //adding new placeholder for selected signer in pos array (placeholder) let placeHolderPos; if (contractName) { placeHolderPos = { - blockColor: color[isSelectListId], - signerObjId: signerObjId, - placeHolder: updatePlace, signerPtr: { __type: "Pointer", className: `${contractName}`, objectId: signerObjId }, - Role: roleName, - Id: uniqueId - }; - } else { - placeHolderPos = { - blockColor: color[isSelectListId], - signerObjId: "", - placeHolder: updatePlace, - signerPtr: {}, - Role: roleName, - Id: uniqueId - }; - } - // signerPos.splice(colorIndex, 1, placeHolderPos); - const newArry = [placeHolderPos]; - const newArray = [ - ...signerPos.slice(0, colorIndex), - ...newArry, - ...signerPos.slice(colorIndex + 1) - ]; - setSignerPos(newArray); - } else { - const newSignPoss = getPlaceHolder.concat(xyPosArr[0]); - let placeHolderPos; - if (contractName) { - placeHolderPos = { - blockColor: color[isSelectListId], signerObjId: signerObjId, - placeHolder: newSignPoss, - signerPtr: { - __type: "Pointer", - className: `${contractName}`, - objectId: signerObjId - }, - Role: roleName, + blockColor: blockColor ? blockColor : color[isSelectListId], + placeHolder: [placeHolder], + Role: Role ? Role : roleName, Id: uniqueId }; } else { placeHolderPos = { - blockColor: color[isSelectListId], - signerObjId: "", - placeHolder: newSignPoss, signerPtr: {}, - Role: roleName, + signerObjId: "", + blockColor: blockColor ? blockColor : color[isSelectListId], + placeHolder: [placeHolder], + Role: Role ? Role : roleName, Id: uniqueId }; } - - // signerPos.splice(colorIndex, 1, placeHolderPos); - const newArry = [placeHolderPos]; - const newArray = [ - ...signerPos.slice(0, colorIndex), - ...newArry, - ...signerPos.slice(colorIndex + 1) - ]; - - setSignerPos(newArray); - } - } else { - let placeHolderPos; - if (contractName) { - placeHolderPos = { - signerPtr: { - __type: "Pointer", - className: `${contractName}`, - objectId: signerObjId - }, - signerObjId: signerObjId, - blockColor: color[isSelectListId], - placeHolder: xyPosArr, - Role: roleName, - Id: uniqueId - }; - } else { - placeHolderPos = { - signerPtr: {}, - signerObjId: "", - blockColor: color[isSelectListId], - placeHolder: xyPosArr, - Role: roleName, - Id: uniqueId - }; + setSignerPos((prev) => [...prev, placeHolderPos]); } - setSignerPos((prev) => [...prev, placeHolderPos]); - } - setIsMailSend(false); + } }; - //function for get pdf page details const pageDetails = async (pdf) => { const load = { @@ -791,6 +720,8 @@ function PlaceHolderSign() { objectId: x.objectId }; }); + const currentUser = signersdata.find((x)=> x.Email === currentId) + setCurrentId(currentUser?.objectId) // console.log("signers ", signers); try { const data = { @@ -904,7 +835,7 @@ function PlaceHolderSign() { const handleRecipientSign = () => { const hostUrl = getHostUrl(); navigate( - `${hostUrl}recipientSignPdf/${documentId}/${currentEmail[0].objectId}` + `${hostUrl}recipientSignPdf/${documentId}/${currentId}` ); }; @@ -929,13 +860,14 @@ function PlaceHolderSign() { const updateSigner = signersdata.map((x) => { if (x.Id === uniqueId) { - return { ...x, ...data }; + return { ...x, ...data, className: "contracts_Contactbook" }; } return { ...x }; }); // console.log("updateSigner ", updateSigner); - setSignersData(updateSigner); + const index = signersdata.findIndex((x)=> x.Id ===uniqueId) + setIsSelectId(index) } }; @@ -1056,13 +988,13 @@ function PlaceHolderSign() { {/* signature modal */}

You have successfully sent mails to all recipients!

- {currentEmail?.length > 0 && ( + {currentId && (

Do you want to sign documents right now ?

)}
- {currentEmail?.length > 0 ? ( + {currentId ? ( <>