From c8fb9a5b09bf5b78af6763df903ea3a5dc76f441 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Mon, 2 Sep 2024 20:01:18 +0530 Subject: [PATCH 1/6] fix: signers list order change issue in reports --- apps/OpenSign/src/components/pdf/RenderPdf.js | 133 ++++++------ apps/OpenSign/src/pages/PlaceHolderSign.js | 193 ++++++++++-------- .../OpenSign/src/pages/TemplatePlaceholder.js | 92 ++++----- 3 files changed, 216 insertions(+), 202 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/RenderPdf.js b/apps/OpenSign/src/components/pdf/RenderPdf.js index c877a8a4f..3c9bc7bb2 100644 --- a/apps/OpenSign/src/components/pdf/RenderPdf.js +++ b/apps/OpenSign/src/components/pdf/RenderPdf.js @@ -486,71 +486,74 @@ function RenderPdf({ ? signerPos.map((data, ind) => { return ( - {data.placeHolder.map((placeData, index) => { - return ( - - {placeData.pageNumber === pageNumber && - placeData.pos.map((pos) => { - return ( - - - - ); - })} - - ); - })} + {data?.placeHolder && + data?.placeHolder.map((placeData, index) => { + return ( + + {placeData.pageNumber === pageNumber && + placeData.pos.map((pos) => { + return ( + + + + ); + })} + + ); + })} ); }) diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 7b28d007a..79337828e 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -313,12 +313,36 @@ function PlaceHolderSign() { } } setPdfDetails(documentData); - if (documentData[0].Signers && documentData[0].Signers.length > 0) { + //condition when placeholder have empty array with role details and signers array have signers data + //and both array length are same + //this case happen using placeholder form in auto save funtionality to save draft type document without adding any placehlder + if ( + documentData[0]?.Placeholders?.length === + documentData[0]?.Signers?.length + ) { + const signersArr = documentData[0].Signers; + const placeholder = documentData[0].Placeholders; + const updatedSigners = signersArr.map((x, index) => ({ + ...x, + Id: placeholder[index]?.Id, + Role: placeholder[index]?.Role, + blockColor: placeholder[index]?.blockColor + })); + setSignerPos(placeholder); + setSignersData(updatedSigners); + setIsSelectId(0); + setUniqueId(placeholder[0].Id); + setBlockColor(placeholder[0].blockColor); + } + //else condition when signers array have some signer's data + //this case happen using placeholder form and load first time + else if (documentData[0].Signers && documentData[0].Signers.length > 0) { const currEmail = documentData[0].ExtUserPtr.Email; setCurrentId(currEmail); setSignerObjId(documentData[0].Signers[0].objectId); setContractName(documentData[0].Signers[0].className); setIsSelectId(0); + //if condition when placeholder array present then update signers local array according to placeholder length if ( documentData[0].Placeholders && documentData[0].Placeholders.length > 0 @@ -347,6 +371,9 @@ function PlaceHolderSign() { setUniqueId(updatedSigners[0].Id); setBlockColor(updatedSigners[0].blockColor); } else { + //else condition when signers length present but placeholder empty then + //update signers array with add role,id and add empty object in placeholder with signers details + //in placeholder array const updatedSigners = documentData[0].Signers.map((x, index) => ({ ...x, Id: randomId(), @@ -354,10 +381,29 @@ function PlaceHolderSign() { blockColor: color[index % color.length] })); setSignersData(updatedSigners); + const updatedPlaceholder = documentData[0].Signers.map((x, index) => { + return { + // Role: updatedSigners[index].Role, + Id: updatedSigners[index].Id, + blockColor: color[index % color.length], + signerPtr: { + __type: "Pointer", + className: x?.className || "contracts_Contactbook", + objectId: x?.objectId + }, + signerObjId: x?.objectId + }; + }); + + setSignerPos(updatedPlaceholder); + setSignersData(updatedSigners); setUniqueId(updatedSigners[0].Id); setBlockColor(updatedSigners[0].blockColor); } } else { + //when user create document using template where signers data not present and only placeholders present + //else condition when signers array is empty then check placeholders array length + //if placeholders have some data then update signers data according to placeholders length // setRoleName("User 1"); if ( documentData[0].Placeholders && @@ -491,62 +537,43 @@ function PlaceHolderSign() { } setSelectWidgetId(key); if (signer) { - let filterSignerPos; + let signerData, currentPagePosition; if (dragTypeValue === textWidget) { - filterSignerPos = signerPos.filter((data) => data.Role === "prefill"); + signerData = signerPos.find((data) => data.Role === "prefill"); } else { - filterSignerPos = signerPos.filter((data) => data.Id === uniqueId); + signerData = signerPos.find((data) => data.Id === uniqueId); } - - const { blockColor, Role } = signer; - //adding placholder in existing signer pos array (placaholder) - if (filterSignerPos.length > 0) { - const getPlaceHolder = filterSignerPos[0].placeHolder; + const getPlaceHolder = signerData?.placeHolder; + if (getPlaceHolder) { + //checking exist placeholder on same page + currentPagePosition = getPlaceHolder.find( + (data) => data.pageNumber === pageNumber + ); + } + //checking current page has already some placeholders then update that placeholder and add upcoming placehoder position + if (getPlaceHolder && currentPagePosition) { 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); - let updatesignerPos; - if (dragTypeValue === textWidget) { - updatesignerPos = signerPos.map((x) => - x.Role === "prefill" ? { ...x, placeHolder: updatePlace } : x - ); - } else { - updatesignerPos = signerPos.map((x) => - x.Id === uniqueId ? { ...x, placeHolder: updatePlace } : x - ); - } - setSignerPos(updatesignerPos); - } else { - let updatesignerPos; - if (dragTypeValue === textWidget) { - updatesignerPos = signerPos.map((x) => - x.Role === "prefill" - ? { ...x, placeHolder: [...x.placeHolder, placeHolder] } - : x - ); - } else { - 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; + const getPos = currentPagePosition?.pos; + const newSignPos = getPos.concat(dropData); + let xyPos = { pageNumber: pageNumber, pos: newSignPos }; + updatePlace.push(xyPos); + let updatesignerPos; if (dragTypeValue === textWidget) { - placeHolderPos = { + updatesignerPos = signerPos.map((x) => + x.Role === "prefill" ? { ...x, placeHolder: updatePlace } : x + ); + } else { + updatesignerPos = signerPos.map((x) => + x.Id === uniqueId ? { ...x, placeHolder: updatePlace } : x + ); + } + setSignerPos(updatesignerPos); + } else { + let updatesignerPos; + if (dragTypeValue === textWidget) { + const prefileTextWidget = { signerPtr: {}, signerObjId: "", blockColor: "#f58f8c", @@ -554,33 +581,17 @@ function PlaceHolderSign() { Role: "prefill", Id: key }; + + signerPos.push(prefileTextWidget); + setSignerPos(signerPos); } else { - if (contractName) { - placeHolderPos = { - signerPtr: { - __type: "Pointer", - className: `${contractName}`, - objectId: signerObjId - }, - signerObjId: signerObjId, - blockColor: blockColor ? blockColor : color[isSelectListId], - placeHolder: [placeHolder], - Role: Role ? Role : roleName, - Id: uniqueId - }; - } else { - placeHolderPos = { - signerPtr: {}, - signerObjId: "", - blockColor: blockColor ? blockColor : color[isSelectListId], - placeHolder: [placeHolder], - Role: Role ? Role : roleName, - Id: uniqueId - }; - } + updatesignerPos = signerPos.map((x) => + x.Id === uniqueId ? { ...x, placeHolder: [placeHolder] } : x + ); + setSignerPos(updatesignerPos); } - setSignerPos((prev) => [...prev, placeHolderPos]); } + if (dragTypeValue === "dropdown") { setShowDropdown(true); } else if (dragTypeValue === "checkbox") { @@ -710,6 +721,7 @@ function PlaceHolderSign() { const getXYdata = getPageNumer[0].pos.filter( (data) => data.key !== key ); + //condition to check on same has multiple widgets so do not delete all widgets if (getXYdata.length > 0) { updateData.push(getXYdata); const newUpdatePos = getPlaceHolder.map((obj) => { @@ -727,11 +739,11 @@ function PlaceHolderSign() { }); setSignerPos(newUpdateSigner); } else { - const updateFilter = signerPos.filter((data) => data.Id !== Id); const getRemainPage = filterSignerPos[0].placeHolder.filter( (data) => data.pageNumber !== pageNumber ); - + //condition to check placeholder length is greater than 1 do not need to remove whole placeholder + //array only resove particular widgets if (getRemainPage && getRemainPage.length > 0) { const newUpdatePos = filterSignerPos.map((obj) => { if (obj.Id === Id) { @@ -744,7 +756,15 @@ function PlaceHolderSign() { signerupdate.push(newUpdatePos[0]); setSignerPos(signerupdate); } else { - setSignerPos(updateFilter); + const updatedData = signerPos.map((item) => { + if (item.Id === Id) { + // Destructuring to remove the name field + const { placeHolder, ...rest } = item; + return rest; + } + return item; + }); + setSignerPos(updatedData); } } } @@ -883,13 +903,14 @@ function PlaceHolderSign() { }, 2000); return () => clearTimeout(timer); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [signerPos]); + }, [signerPos, signersdata]); // `autosavedetails` is used to save doc details after every 2 sec when changes are happern in placeholder like drag-drop widgets, remove signers const autosavedetails = async () => { const signers = signersdata?.filter( (x) => - x?.Role !== "prefill" && { + x?.Role !== "prefill" && + x.objectId && { __type: "Pointer", className: "contracts_Contactbook", objectId: x.objectId @@ -1585,12 +1606,24 @@ function PlaceHolderSign() { //function to add new signer in document signers list const handleAddNewRecipients = (data) => { const newId = randomId(); + const backgroundColor = color[signersdata.length]; signersdata.push({ ...data, className: "contracts_Contactbook", Id: newId, - blockColor: color[signersdata.length] + blockColor: backgroundColor }); + const signerPosObj = { + signerPtr: { + __type: "Pointer", + className: "contracts_Contactbook", + objectId: data.objectId + }, + signerObjId: data.objectId, + blockColor: backgroundColor, + Id: newId + }; + setSignerPos((prev) => [...prev, signerPosObj]); setUniqueId(newId); setIsSelectId(signersdata.length - 1); setBlockColor(color[signersdata.length]); diff --git a/apps/OpenSign/src/pages/TemplatePlaceholder.js b/apps/OpenSign/src/pages/TemplatePlaceholder.js index 92a438379..7c88a648a 100644 --- a/apps/OpenSign/src/pages/TemplatePlaceholder.js +++ b/apps/OpenSign/src/pages/TemplatePlaceholder.js @@ -381,11 +381,11 @@ const TemplatePlaceholder = () => { containerWH ); const key = randomId(); - let filterSignerPos = signerPos.filter((data) => data.Id === uniqueId); const dragTypeValue = item?.text ? item.text : monitor.type; const widgetWidth = defaultWidthHeight(dragTypeValue).width; const widgetHeight = defaultWidthHeight(dragTypeValue).height; - let dropData = []; + let dropData = [], + currentPagePosition; let placeHolder; if (item === "onclick") { const dropObj = { @@ -446,65 +446,35 @@ const TemplatePlaceholder = () => { pos: dropData }; } - const { blockColor, Role } = signer; - //adding placholder in existing signer pos array (placaholder) - if (filterSignerPos.length > 0) { - const getPlaceHolder = filterSignerPos[0].placeHolder; + + const getPlaceHolder = signer?.placeHolder; + if (getPlaceHolder) { + //checking exist placeholder on same page + currentPagePosition = getPlaceHolder.find( + (data) => data.pageNumber === pageNumber + ); + } + //checking current page has already some placeholders then update that placeholder and add upcoming placehoder position + if (getPlaceHolder && currentPagePosition) { const updatePlace = getPlaceHolder.filter( (data) => data.pageNumber !== pageNumber ); - const getPageNumer = getPlaceHolder.filter( - (data) => data.pageNumber === pageNumber + const getPos = currentPagePosition?.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 ); - - //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); - } + setSignerPos(updatesignerPos); } else { - //adding new placeholder for selected signer in pos array (placeholder) - let placeHolderPos; - if (contractName) { - placeHolderPos = { - signerPtr: { - __type: "Pointer", - className: `${contractName}`, - objectId: signerObjId - }, - signerObjId: signerObjId, - blockColor: blockColor ? blockColor : color[isSelectListId], - placeHolder: [placeHolder], - Role: Role ? Role : roleName, - Id: uniqueId - }; - } else { - placeHolderPos = { - signerPtr: {}, - signerObjId: "", - blockColor: blockColor ? blockColor : color[isSelectListId], - placeHolder: [placeHolder], - Role: Role ? Role : roleName, - Id: uniqueId - }; - } - setSignerPos((prev) => [...prev, placeHolderPos]); + const updatesignerPos = signerPos.map((x) => + x.Id === uniqueId ? { ...x, placeHolder: [placeHolder] } : x + ); + setSignerPos(updatesignerPos); } if (dragTypeValue === "dropdown") { @@ -964,7 +934,6 @@ const TemplatePlaceholder = () => { setIsCreateDoc(false); } }; - // `handleAddSigner` is used to open Add Role Modal const handleAddSigner = () => { setIsModalRole(true); @@ -986,6 +955,15 @@ const TemplatePlaceholder = () => { blockColor: color[index] }; setSignersData((prevArr) => [...prevArr, obj]); + const signerPosObj = { + signerPtr: {}, + signerObjId: "", + blockColor: color[index], + Role: roleName || "User " + count, + Id: Id + }; + + setSignerPos((prev) => [...prev, signerPosObj]); setIsModalRole(false); setRoleName(""); setUniqueId(Id); From 740b5ea71936a3cfa4d3c7f62a494609a63999d0 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 3 Sep 2024 15:49:37 +0530 Subject: [PATCH 2/6] fix: placeholder disappear issue in template flow --- .../src/components/pdf/Placeholder.js | 3 - .../src/components/pdf/RecipientList.js | 6 +- apps/OpenSign/src/components/pdf/RenderPdf.js | 3 - .../src/components/pdf/WidgetComponent.js | 4 -- apps/OpenSign/src/pages/PlaceHolderSign.js | 58 ++++++++----------- .../OpenSign/src/pages/TemplatePlaceholder.js | 42 ++++++-------- .../src/primitives/GetReportDisplay.js | 34 ++++++----- 7 files changed, 64 insertions(+), 86 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/Placeholder.js b/apps/OpenSign/src/components/pdf/Placeholder.js index 051204215..bc83e4256 100644 --- a/apps/OpenSign/src/components/pdf/Placeholder.js +++ b/apps/OpenSign/src/components/pdf/Placeholder.js @@ -329,7 +329,6 @@ function Placeholder(props) { //condition for only placeholder and template flow if (props.data && props?.pos?.type !== textWidget) { - props.setSignerObjId(props?.data?.signerObjId); props.setUniqueId(props?.data?.Id); const checkIndex = props.xyPostion.findIndex( (data) => data.Id === props.data.Id @@ -360,7 +359,6 @@ function Placeholder(props) { //and on save or cancel button of copy all page popup i have set this temp signer Id in unique id if (props.data && props?.pos?.type !== textWidget) { - props.setSignerObjId(props?.data?.signerObjId); props.setUniqueId(props?.data?.Id); const checkIndex = props.xyPostion.findIndex( (data) => data.Id === props.data.Id @@ -369,7 +367,6 @@ function Placeholder(props) { props.setIsSelectId(checkIndex || 0); } else if (props.data && props.pos.type === textWidget) { props.setTempSignerId(props.uniqueId); - props.setSignerObjId(props?.data?.signerObjId); props.setUniqueId(props?.data?.Id); const checkIndex = props.xyPostion.findIndex( (data) => data.Id === props.data.Id diff --git a/apps/OpenSign/src/components/pdf/RecipientList.js b/apps/OpenSign/src/components/pdf/RecipientList.js index 926cad468..c2b437017 100644 --- a/apps/OpenSign/src/components/pdf/RecipientList.js +++ b/apps/OpenSign/src/components/pdf/RecipientList.js @@ -16,7 +16,7 @@ const RecipientList = (props) => { //function for onhover signer name change background color const inputRef = useRef(null); const isWidgetExist = (Id) => { - return props.signerPos.some((x) => x.Id === Id); + return props.signerPos.some((x) => x.Id === Id && x.placeHolder); }; //handle drag start @@ -63,9 +63,7 @@ const RecipientList = (props) => { remainingItems.splice(index, 0, ...draggedItem); //set current draggable recipient details,objectId,index,contract_className ... after replace recipient list props?.setSignersData(remainingItems); - props?.setSignerObjId(remainingItems[index]?.objectId || ""); props?.setIsSelectId(index); - props?.setContractName(remainingItems[index]?.className || ""); props?.setUniqueId(remainingItems[index]?.Id); props?.setRoleName(remainingItems[index]?.Role); props?.setBlockColor(remainingItems[index]?.blockColor); @@ -121,9 +119,7 @@ const RecipientList = (props) => { }} onClick={(e) => { e.preventDefault(); - props.setSignerObjId(obj?.objectId || ""); props.setIsSelectId(ind); - props.setContractName(obj?.className || ""); props.setUniqueId(obj.Id); props.setRoleName(obj.Role); props.setBlockColor(obj?.blockColor); diff --git a/apps/OpenSign/src/components/pdf/RenderPdf.js b/apps/OpenSign/src/components/pdf/RenderPdf.js index 3c9bc7bb2..ed382065b 100644 --- a/apps/OpenSign/src/components/pdf/RenderPdf.js +++ b/apps/OpenSign/src/components/pdf/RenderPdf.js @@ -41,7 +41,6 @@ function RenderPdf({ setUniqueId, signersdata, setIsPageCopy, - setSignerObjId, setShowDropdown, setIsInitial, setIsValidate, @@ -319,7 +318,6 @@ function RenderPdf({ index={pageNumber} xyPostion={signerPos} setXyPostion={setSignerPos} - setSignerObjId={setSignerObjId} data={data} setIsResize={setIsResize} setShowDropdown={setShowDropdown} @@ -508,7 +506,6 @@ function RenderPdf({ index={pageNumber} xyPostion={signerPos} setXyPostion={setSignerPos} - setSignerObjId={setSignerObjId} data={data} setIsResize={setIsResize} setShowDropdown={setShowDropdown} diff --git a/apps/OpenSign/src/components/pdf/WidgetComponent.js b/apps/OpenSign/src/components/pdf/WidgetComponent.js index 49500bab4..89aab1e6b 100644 --- a/apps/OpenSign/src/components/pdf/WidgetComponent.js +++ b/apps/OpenSign/src/components/pdf/WidgetComponent.js @@ -20,9 +20,7 @@ function WidgetComponent({ addPositionOfSignature, signersdata, isSelectListId, - setSignerObjId, setIsSelectId, - setContractName, isSigners, dataTut, isMailSend, @@ -360,9 +358,7 @@ function WidgetComponent({ signerPos={signerPos} signersdata={signersdata} isSelectListId={isSelectListId} - setSignerObjId={setSignerObjId} setIsSelectId={setIsSelectId} - setContractName={setContractName} setUniqueId={setUniqueId} setRoleName={setRoleName} handleDeleteUser={handleDeleteUser} diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 03a66a060..882c4fceb 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -77,7 +77,6 @@ function PlaceHolderSign() { const [xySignature, setXYSignature] = useState({}); const [dragKey, setDragKey] = useState(); const [signersdata, setSignersData] = useState([]); - const [signerObjId, setSignerObjId] = useState(); const [signerPos, setSignerPos] = useState([]); const [isSelectListId, setIsSelectId] = useState(); const [isSendAlert, setIsSendAlert] = useState({}); @@ -98,7 +97,6 @@ function PlaceHolderSign() { const [tourStatus, setTourStatus] = useState([]); const [signerUserId, setSignerUserId] = useState(); const [pdfOriginalWH, setPdfOriginalWH] = useState([]); - const [contractName, setContractName] = useState(""); const [containerWH, setContainerWH] = useState(); const { docId } = useParams(); const signRef = useRef(null); @@ -341,8 +339,6 @@ function PlaceHolderSign() { else if (documentData[0].Signers && documentData[0].Signers.length > 0) { const currEmail = documentData[0].ExtUserPtr.Email; setCurrentId(currEmail); - setSignerObjId(documentData[0].Signers[0].objectId); - setContractName(documentData[0].Signers[0].className); setIsSelectId(0); //if condition when placeholder array present then update signers local array according to placeholder length if ( @@ -466,8 +462,6 @@ function PlaceHolderSign() { getSignerPos(item, monitor); }; const getSignerPos = (item, monitor) => { - // setSignerObjId(""); - // setContractName(""); if (uniqueId) { const posZIndex = zIndex + 1; setZIndex(posZIndex); @@ -583,7 +577,6 @@ function PlaceHolderSign() { Role: "prefill", Id: key }; - signerPos.push(prefileTextWidget); setSignerPos(signerPos); } else { @@ -760,9 +753,10 @@ function PlaceHolderSign() { } else { const updatedData = signerPos.map((item) => { if (item.Id === Id) { - // Destructuring to remove the name field - const { placeHolder, ...rest } = item; - return rest; + // Create a copy of the item object and delete the placeHolder field + const updatedItem = { ...item }; + delete updatedItem.placeHolder; + return updatedItem; } return item; }); @@ -848,9 +842,9 @@ function PlaceHolderSign() { const filterPrefill = signerPos?.filter((data) => data.Role !== "prefill"); const getPrefill = signerPos?.filter((data) => data.Role === "prefill"); let isLabel = false; + const prefillPlaceholder = getPrefill[0]?.placeHolder; //condition is used to check text widget data is empty or have response if (getPrefill && getPrefill.length > 0) { - const prefillPlaceholder = getPrefill[0].placeHolder; if (prefillPlaceholder) { prefillPlaceholder.map((data) => { if (!isLabel) { @@ -860,28 +854,33 @@ function PlaceHolderSign() { } } let isSignatureExist = true; // variable is used to check a signature widget exit or not then execute other code - //for loop is used to check signature widget exist or not - for (let item of filterPrefill) { - let signatureExist = false; // Reset for each iteration - for (let x of item.placeHolder) { - if (!signatureExist) { - const typeExist = x.pos.some((data) => data?.type); - if (typeExist) { - signatureExist = x.pos.some((data) => data?.type === "signature"); - } else { - signatureExist = x.pos.some((data) => !data.isStamp); + if (prefillPlaceholder) { + //for loop is used to check signature widget exist or not + for (let item of filterPrefill) { + let signatureExist = false; // Reset for each iteration + for (let x of item.placeHolder) { + if (!signatureExist) { + const typeExist = x.pos.some((data) => data?.type); + if (typeExist) { + signatureExist = x.pos.some((data) => data?.type === "signature"); + } else { + signatureExist = x.pos.some((data) => !data.isStamp); + } } } - } - if (!signatureExist) { - isSignatureExist = false; - setIsSendAlert({ mssg: "sure", alert: true }); + if (!signatureExist) { + isSignatureExist = false; + setIsSendAlert({ mssg: "sure", alert: true }); + } } } if (getPrefill && isLabel) { setIsSendAlert({ mssg: textWidget, alert: true }); } else if (isSignatureExist) { - if (filterPrefill.length === signersdata.length) { + const isPlaceholderExist = filterPrefill.every( + (data) => data.placeHolder + ); + if (isPlaceholderExist) { const IsSignerNotExist = filterPrefill?.filter((x) => !x.signerObjId); if (IsSignerNotExist && IsSignerNotExist?.length > 0) { setSignerExistModal(true); @@ -1629,8 +1628,6 @@ function PlaceHolderSign() { setUniqueId(newId); setIsSelectId(signersdata.length - 1); setBlockColor(color[signersdata.length]); - setContractName("contracts_Contactbook"); - setSignerObjId(data.objectId); }; const closePopup = () => { @@ -2063,7 +2060,6 @@ function PlaceHolderSign() { setIsPageCopy={setIsPageCopy} signersdata={signersdata} setSignKey={setSignKey} - setSignerObjId={setSignerObjId} handleLinkUser={handleLinkUser} setUniqueId={setUniqueId} isDragging={isDragging} @@ -2112,9 +2108,7 @@ function PlaceHolderSign() { signerPos={signerPos} signersdata={signersdata} isSelectListId={isSelectListId} - setSignerObjId={setSignerObjId} setIsSelectId={setIsSelectId} - setContractName={setContractName} isSigners={true} setIsShowEmail={setIsShowEmail} isMailSend={isMailSend} @@ -2143,9 +2137,7 @@ function PlaceHolderSign() { signerPos={signerPos} signersdata={signersdata} isSelectListId={isSelectListId} - setSignerObjId={setSignerObjId} setIsSelectId={setIsSelectId} - setContractName={setContractName} setUniqueId={setUniqueId} setRoleName={setRoleName} sendInOrder={pdfDetails[0].SendinOrder} diff --git a/apps/OpenSign/src/pages/TemplatePlaceholder.js b/apps/OpenSign/src/pages/TemplatePlaceholder.js index 7c88a648a..d34e3e77d 100644 --- a/apps/OpenSign/src/pages/TemplatePlaceholder.js +++ b/apps/OpenSign/src/pages/TemplatePlaceholder.js @@ -62,7 +62,6 @@ const TemplatePlaceholder = () => { const [xySignature, setXYSignature] = useState({}); const [dragKey, setDragKey] = useState(); const [signersdata, setSignersData] = useState([]); - const [signerObjId, setSignerObjId] = useState(); const [signerPos, setSignerPos] = useState([]); const [isSelectListId, setIsSelectId] = useState(); const [isSendAlert, setIsSendAlert] = useState(false); @@ -84,7 +83,6 @@ const TemplatePlaceholder = () => { const [tourStatus, setTourStatus] = useState([]); const [signerUserId, setSignerUserId] = useState(); const [pdfOriginalWH, setPdfOriginalWH] = useState([]); - const [contractName, setContractName] = useState(""); const [containerWH, setContainerWH] = useState(); const signRef = useRef(null); const dragRef = useRef(null); @@ -241,8 +239,6 @@ const TemplatePlaceholder = () => { setPdfDetails(documentData); setIsSigners(true); if (documentData[0].Signers && documentData[0].Signers.length > 0) { - setSignerObjId(documentData[0].Signers[0].objectId); - setContractName(documentData[0].Signers[0].className); setIsSelectId(0); if ( documentData[0].Placeholders && @@ -446,8 +442,8 @@ const TemplatePlaceholder = () => { pos: dropData }; } - - const getPlaceHolder = signer?.placeHolder; + let filterSignerPos = signerPos.find((data) => data.Id === uniqueId); + const getPlaceHolder = filterSignerPos?.placeHolder; if (getPlaceHolder) { //checking exist placeholder on same page currentPagePosition = getPlaceHolder.find( @@ -601,10 +597,6 @@ const TemplatePlaceholder = () => { //function for delete signature block const handleDeleteSign = (key, Id) => { const updateData = []; - // const filterSignerPos = signerPos.filter( - // (data) => data.signerObjId === signerId - // ); - const filterSignerPos = signerPos.filter((data) => data.Id === Id); if (filterSignerPos.length > 0) { @@ -637,11 +629,11 @@ const TemplatePlaceholder = () => { setSignerPos(newUpdateSigner); } else { - const updateFilter = signerPos.filter((data) => data.Id !== Id); const getRemainPage = filterSignerPos[0].placeHolder.filter( (data) => data.pageNumber !== pageNumber ); - + //condition to check placeholder length is greater than 1 do not need to remove whole placeholder + //array only resove particular widgets if (getRemainPage && getRemainPage.length > 0) { const newUpdatePos = filterSignerPos.map((obj) => { if (obj.Id === Id) { @@ -655,7 +647,16 @@ const TemplatePlaceholder = () => { setSignerPos(signerupdate); } else { - setSignerPos(updateFilter); + const updatedData = signerPos.map((item) => { + if (item.Id === Id) { + // Create a copy of the item object and delete the placeHolder field + const updatedItem = { ...item }; + delete updatedItem.placeHolder; + return updatedItem; + } + return item; + }); + setSignerPos(updatedData); } } } @@ -690,12 +691,12 @@ const TemplatePlaceholder = () => { const handleMouseLeave = () => { setSignBtnPosition([xySignature]); }; - const alertSendEmail = async () => { - if (signerPos.length !== signersdata.length) { - setIsSendAlert(true); - } else { + const isPlaceholderExist = signerPos.every((data) => data.placeHolder); + if (isPlaceholderExist) { handleSaveTemplate(); + } else { + setIsSendAlert(true); } }; @@ -944,8 +945,6 @@ const TemplatePlaceholder = () => { // save Role in entry in signerList and user const handleAddRole = (e) => { e.preventDefault(); - setSignerObjId(""); - setContractName(""); const count = signersdata.length > 0 ? signersdata.length + 1 : 1; const Id = randomId(); const index = signersdata.length; @@ -1577,7 +1576,6 @@ const TemplatePlaceholder = () => { signersdata={signersdata} setIsPageCopy={setIsPageCopy} setSignKey={setSignKey} - setSignerObjId={setSignerObjId} isDragging={isDragging} setShowDropdown={setShowDropdown} setCurrWidgetsDetails={setCurrWidgetsDetails} @@ -1620,9 +1618,7 @@ const TemplatePlaceholder = () => { signerPos={signerPos} signersdata={signersdata} isSelectListId={isSelectListId} - setSignerObjId={setSignerObjId} setIsSelectId={setIsSelectId} - setContractName={setContractName} isSigners={isSigners} setIsShowEmail={setIsShowEmail} isMailSend={isMailSend} @@ -1652,10 +1648,8 @@ const TemplatePlaceholder = () => { setSignerPos={setSignerPos} signersdata={signersdata} isSelectListId={isSelectListId} - setSignerObjId={setSignerObjId} setRoleName={setRoleName} setIsSelectId={setIsSelectId} - setContractName={setContractName} handleAddSigner={handleAddSigner} setUniqueId={setUniqueId} handleDeleteUser={handleDeleteUser} diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index f0542233b..86fc3034d 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -1740,20 +1740,26 @@ const ReportTable = (props) => { - {item.Placeholders.map((x, i) => ( - - {props.ReportName === "Templates" && ( - - {x.Role && x.Role} - - )} - - {x.email - ? x.email - : x?.signerPtr?.Email || "-"} - - - ))} + {item.Placeholders.map( + (x, i) => + x.Role !== "prefill" && ( + + {props.ReportName === "Templates" && ( + + {x.Role && x.Role} + + )} + + {x.email + ? x.email + : x?.signerPtr?.Email || "-"} + + + ) + )} From a0c2fd09ae7163fe6311963fdee2dc106f85e350 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Tue, 3 Sep 2024 21:05:56 +0530 Subject: [PATCH 3/6] fix: resolve issue of disappear widgets when adding it on multiple pages --- apps/OpenSign/src/components/pdf/Placeholder.js | 10 ++++------ apps/OpenSign/src/pages/PlaceHolderSign.js | 6 +++++- apps/OpenSign/src/pages/TemplatePlaceholder.js | 7 ++++++- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/OpenSign/src/components/pdf/Placeholder.js b/apps/OpenSign/src/components/pdf/Placeholder.js index bc83e4256..926bc2c56 100644 --- a/apps/OpenSign/src/components/pdf/Placeholder.js +++ b/apps/OpenSign/src/components/pdf/Placeholder.js @@ -116,6 +116,7 @@ function Placeholder(props) { : "" }); const [dateFormat, setDateFormat] = useState([]); + const [clickonWidget, setClickonWidget] = useState({}); const [startDate, setStartDate] = useState( props.pos.type === "date" && getDefaultdate( @@ -519,6 +520,7 @@ function Placeholder(props) { props.setCurrWidgetsDetails(props.pos); setIsDateModal(!isDateModal); e.stopPropagation(); + setClickonWidget(props.pos); if (props.data) { props.setSignKey(props.pos.key); props.setUniqueId(props.data.Id); @@ -923,11 +925,7 @@ function Placeholder(props) { {t("font-size")} : props.setFontColor(e.target.value)} className="ml-[4px] md:ml[7px] op-select op-select-bordered op-select-sm focus:outline-none hover:border-base-content text-xs" diff --git a/apps/OpenSign/src/pages/PlaceHolderSign.js b/apps/OpenSign/src/pages/PlaceHolderSign.js index 882c4fceb..85fe5e33a 100644 --- a/apps/OpenSign/src/pages/PlaceHolderSign.js +++ b/apps/OpenSign/src/pages/PlaceHolderSign.js @@ -581,7 +581,11 @@ function PlaceHolderSign() { setSignerPos(signerPos); } else { updatesignerPos = signerPos.map((x) => - x.Id === uniqueId ? { ...x, placeHolder: [placeHolder] } : x + x.Id === uniqueId && x?.placeHolder + ? { ...x, placeHolder: [...x.placeHolder, placeHolder] } + : x.Id === uniqueId + ? { ...x, placeHolder: [placeHolder] } + : x ); setSignerPos(updatesignerPos); } diff --git a/apps/OpenSign/src/pages/TemplatePlaceholder.js b/apps/OpenSign/src/pages/TemplatePlaceholder.js index d34e3e77d..788c521af 100644 --- a/apps/OpenSign/src/pages/TemplatePlaceholder.js +++ b/apps/OpenSign/src/pages/TemplatePlaceholder.js @@ -450,6 +450,7 @@ const TemplatePlaceholder = () => { (data) => data.pageNumber === pageNumber ); } + //checking current page has already some placeholders then update that placeholder and add upcoming placehoder position if (getPlaceHolder && currentPagePosition) { const updatePlace = getPlaceHolder.filter( @@ -468,7 +469,11 @@ const TemplatePlaceholder = () => { setSignerPos(updatesignerPos); } else { const updatesignerPos = signerPos.map((x) => - x.Id === uniqueId ? { ...x, placeHolder: [placeHolder] } : x + x.Id === uniqueId && x?.placeHolder + ? { ...x, placeHolder: [...x.placeHolder, placeHolder] } + : x.Id === uniqueId + ? { ...x, placeHolder: [placeHolder] } + : x ); setSignerPos(updatesignerPos); } From 9ac487ea5bafda9baa601f37b1b10887b72ec0d2 Mon Sep 17 00:00:00 2001 From: RaktimaNXG Date: Wed, 4 Sep 2024 15:41:25 +0530 Subject: [PATCH 4/6] fix: unexpected view button of signers for signyourself document in report --- apps/OpenSign/src/primitives/GetReportDisplay.js | 2 +- apps/OpenSignServer/cloud/parsefunction/reportsJson.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/OpenSign/src/primitives/GetReportDisplay.js b/apps/OpenSign/src/primitives/GetReportDisplay.js index 6e8c0b6b4..0fd2773f7 100644 --- a/apps/OpenSign/src/primitives/GetReportDisplay.js +++ b/apps/OpenSign/src/primitives/GetReportDisplay.js @@ -1246,7 +1246,7 @@ const ReportTable = (props) => { {formatRow(item?.ExtUserPtr)} - {item?.Placeholders ? ( + {!item?.IsSignyourself && item?.Placeholders ? (