diff --git a/apps/OpenSign/src/components/pdf/Placeholder.js b/apps/OpenSign/src/components/pdf/Placeholder.js index 051204215..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( @@ -329,7 +330,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 +360,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 +368,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 @@ -522,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); @@ -926,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/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 c877a8a4f..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} @@ -486,71 +484,73 @@ 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/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 7c0e11a8d..3072cf467 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); @@ -315,12 +313,34 @@ 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 @@ -349,6 +369,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(), @@ -356,10 +379,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 && @@ -420,8 +462,6 @@ function PlaceHolderSign() { getSignerPos(item, monitor); }; const getSignerPos = (item, monitor) => { - // setSignerObjId(""); - // setContractName(""); if (uniqueId) { const posZIndex = zIndex + 1; setZIndex(posZIndex); @@ -493,62 +533,44 @@ function PlaceHolderSign() { } setSelectWidgetId(key); if (signer) { - let filterSignerPos; + let filterSignerPos, currentPagePosition; if (dragTypeValue === textWidget) { - filterSignerPos = signerPos.filter((data) => data.Role === "prefill"); + filterSignerPos = signerPos.find((data) => data.Role === "prefill"); } else { - filterSignerPos = signerPos.filter((data) => data.Id === uniqueId); + filterSignerPos = 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 = filterSignerPos?.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 condition when widget type is prefill label text widget + if (dragTypeValue === textWidget) { + const prefileTextWidget = { signerPtr: {}, signerObjId: "", blockColor: "#f58f8c", @@ -556,33 +578,21 @@ 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 - }; - } + //else condition to add placeholder widgets on multiple page first time + updatesignerPos = signerPos.map((x) => + x.Id === uniqueId && x?.placeHolder + ? { ...x, placeHolder: [...x.placeHolder, placeHolder] } + : x.Id === uniqueId + ? { ...x, placeHolder: [placeHolder] } + : x + ); + setSignerPos(updatesignerPos); } - setSignerPos((prev) => [...prev, placeHolderPos]); } + if (dragTypeValue === "dropdown") { setShowDropdown(true); } else if (dragTypeValue === "checkbox") { @@ -712,6 +722,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) => { @@ -729,11 +740,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) { @@ -746,7 +757,16 @@ function PlaceHolderSign() { signerupdate.push(newUpdatePos[0]); 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); } } } @@ -828,9 +848,11 @@ function PlaceHolderSign() { const filterPrefill = signerPos?.filter((data) => data.Role !== "prefill"); const getPrefill = signerPos?.filter((data) => data.Role === "prefill"); let isLabel = false; + //checking all signers placeholder exist or not + const isPlaceholderExist = filterPrefill.every((data) => data.placeHolder); + 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) { @@ -840,28 +862,30 @@ 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 (isPlaceholderExist) { + //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) { + if (isPlaceholderExist) { const IsSignerNotExist = filterPrefill?.filter((x) => !x.signerObjId); if (IsSignerNotExist && IsSignerNotExist?.length > 0) { setSignerExistModal(true); @@ -885,13 +909,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 @@ -1587,17 +1612,27 @@ 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]); - setContractName("contracts_Contactbook"); - setSignerObjId(data.objectId); }; const closePopup = () => { @@ -2030,7 +2065,6 @@ function PlaceHolderSign() { setIsPageCopy={setIsPageCopy} signersdata={signersdata} setSignKey={setSignKey} - setSignerObjId={setSignerObjId} handleLinkUser={handleLinkUser} setUniqueId={setUniqueId} isDragging={isDragging} @@ -2079,9 +2113,7 @@ function PlaceHolderSign() { signerPos={signerPos} signersdata={signersdata} isSelectListId={isSelectListId} - setSignerObjId={setSignerObjId} setIsSelectId={setIsSelectId} - setContractName={setContractName} isSigners={true} setIsShowEmail={setIsShowEmail} isMailSend={isMailSend} @@ -2110,9 +2142,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 92a438379..bdff205f6 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 && @@ -381,11 +377,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 +442,40 @@ 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; + let filterSignerPos = signerPos.find((data) => data.Id === uniqueId); + const getPlaceHolder = filterSignerPos?.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]); + //else condition to add placeholder widgets on multiple page first time + const updatesignerPos = signerPos.map((x) => + x.Id === uniqueId && x?.placeHolder + ? { ...x, placeHolder: [...x.placeHolder, placeHolder] } + : x.Id === uniqueId + ? { ...x, placeHolder: [placeHolder] } + : x + ); + setSignerPos(updatesignerPos); } if (dragTypeValue === "dropdown") { @@ -631,10 +602,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) { @@ -667,11 +634,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) { @@ -685,7 +652,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); } } } @@ -720,12 +696,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); } }; @@ -964,7 +940,6 @@ const TemplatePlaceholder = () => { setIsCreateDoc(false); } }; - // `handleAddSigner` is used to open Add Role Modal const handleAddSigner = () => { setIsModalRole(true); @@ -975,8 +950,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; @@ -986,6 +959,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); @@ -1599,7 +1581,6 @@ const TemplatePlaceholder = () => { signersdata={signersdata} setIsPageCopy={setIsPageCopy} setSignKey={setSignKey} - setSignerObjId={setSignerObjId} isDragging={isDragging} setShowDropdown={setShowDropdown} setCurrWidgetsDetails={setCurrWidgetsDetails} @@ -1642,9 +1623,7 @@ const TemplatePlaceholder = () => { signerPos={signerPos} signersdata={signersdata} isSelectListId={isSelectListId} - setSignerObjId={setSignerObjId} setIsSelectId={setIsSelectId} - setContractName={setContractName} isSigners={isSigners} setIsShowEmail={setIsShowEmail} isMailSend={isMailSend} @@ -1674,10 +1653,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 94e98f145..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 ? (