mirror of
https://github.com/OpenSignLabs/OpenSign.git
synced 2026-08-17 21:25:54 +02:00
feat: create duplicate template functionality feat: add support of csv and xlsx for bulk contacts import feat: add info text for forms and dashboard button feat: implement functionality to delete a PDF page while editing the document feat: show completed documents in which signers included but not owner in completed reports feat: add delete folder button in opensign drive feat: introduce Bcc email support for sending completed documents feat: allow merging multiple pdf while drafting document and template feat: add 'My Initials' tab for auto-signing in request-sign flow feat: add support for redirect URL to navigate after document completion feat: introduce privacy policy and digital signature terms before signing documents. feat: add feature to allow adding new pages to existing document feat: add save signature, initials, stamp functionality in sign pad for logged in user feat: add preferences menu feat: add save custom email template, notifyonsignature, set timezone, allow signature types in preferences feat: secure local url feat: implement Italian language translation feat: implement German language translation feat: update menu name from report to documents and shift contactbook in main menu feat: provide edit contact functionality fix: unable to delete folder when all its documents are deleted fix: fields.push is not function fix: document loading issue in opensign drive fix: adjust the guest signature flow to display the document in full screen, eliminating any blank space which is displayed below the place holder in mobile view fix: resolve issue of instance of pdfdict or pdfstream but got undefined build(deps): update dependencies refactor: change note text from add contact form
730 lines
32 KiB
JavaScript
730 lines
32 KiB
JavaScript
import React, { useState } from "react";
|
|
import RSC from "react-scrollbars-custom";
|
|
import { Document, Page } from "react-pdf";
|
|
import {
|
|
defaultWidthHeight,
|
|
getContainerScale,
|
|
handleImageResize,
|
|
handleSignYourselfImageResize,
|
|
isMobile
|
|
} from "../../constant/Utils";
|
|
import Placeholder from "./Placeholder";
|
|
import Alert from "../../primitives/Alert";
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
function RenderPdf(props) {
|
|
const { t } = useTranslation();
|
|
const [scaledHeight, setScaledHeight] = useState();
|
|
//check isGuestSigner is present in local if yes than handle login flow header in mobile view
|
|
const isGuestSigner = localStorage.getItem("isGuestSigner");
|
|
|
|
// handle signature block width and height according to screen
|
|
const posWidth = (pos, signYourself) => {
|
|
const containerScale = getContainerScale(
|
|
props.pdfOriginalWH,
|
|
props.pageNumber,
|
|
props.containerWH
|
|
);
|
|
const defaultWidth = defaultWidthHeight(pos.type).width;
|
|
const posWidth = pos.Width ? pos.Width : defaultWidth;
|
|
if (signYourself) {
|
|
return posWidth * props.scale * containerScale;
|
|
} else {
|
|
if (pos.isMobile && pos.scale) {
|
|
if (pos.IsResize) {
|
|
if (props.scale > 1) {
|
|
return posWidth * pos.scale * containerScale * props.scale;
|
|
} else {
|
|
return posWidth * containerScale;
|
|
}
|
|
} else {
|
|
if (props.scale > 1) {
|
|
return posWidth * pos.scale * containerScale * props.scale;
|
|
} else {
|
|
return posWidth * pos.scale * containerScale;
|
|
}
|
|
}
|
|
} else {
|
|
return posWidth * props.scale * containerScale;
|
|
}
|
|
}
|
|
};
|
|
const posHeight = (pos, signYourself) => {
|
|
const containerScale = getContainerScale(
|
|
props.pdfOriginalWH,
|
|
props.pageNumber,
|
|
props.containerWH
|
|
);
|
|
const posHeight = pos.Height || defaultWidthHeight(pos.type).height;
|
|
if (signYourself) {
|
|
return posHeight * props.scale * containerScale;
|
|
} else {
|
|
if (pos.isMobile && pos.scale) {
|
|
if (pos.IsResize) {
|
|
if (props.scale > 1) {
|
|
return posHeight * pos.scale * containerScale * props.scale;
|
|
} else {
|
|
return posHeight * containerScale;
|
|
}
|
|
} else {
|
|
if (props.scale > 1) {
|
|
return posHeight * pos.scale * containerScale * props.scale;
|
|
} else {
|
|
return posHeight * pos.scale * containerScale;
|
|
}
|
|
}
|
|
} else {
|
|
return posHeight * props.scale * containerScale;
|
|
}
|
|
}
|
|
};
|
|
|
|
//function for render placeholder block over pdf document
|
|
const checkSignedSigners = (data) => {
|
|
let checkSign = [];
|
|
//condition to handle quick send flow and using normal request sign flow
|
|
checkSign = props.signedSigners
|
|
? props.signedSigners?.filter(
|
|
(sign) =>
|
|
sign?.Id === data?.Id || sign?.objectId === data?.signerObjId
|
|
)
|
|
: [];
|
|
const handleAllUserName = (Id, Role, type, pos) => {
|
|
return (
|
|
<React.Fragment>
|
|
<div className="text-black text-[8px] font-bold">
|
|
{
|
|
props.pdfDetails[0].Signers?.find(
|
|
(signer) => signer.objectId === data.signerObjId
|
|
)?.Name
|
|
}
|
|
</div>
|
|
{type && (
|
|
<div
|
|
style={{ fontSize: pos ? calculateFontsize(pos) : "11px" }}
|
|
className="font-bold"
|
|
>
|
|
{type}
|
|
</div>
|
|
)}
|
|
{Role && (
|
|
<div
|
|
style={{ fontSize: pos ? calculateFontsize(pos) : "8px" }}
|
|
className="text-black font-medium"
|
|
>
|
|
{`(${Role})`}
|
|
</div>
|
|
)}
|
|
</React.Fragment>
|
|
);
|
|
};
|
|
return (
|
|
checkSign.length === 0 &&
|
|
data?.placeHolder?.map((placeData, key) => {
|
|
return (
|
|
<React.Fragment key={key}>
|
|
{placeData.pageNumber === props.pageNumber &&
|
|
placeData.pos.map((pos) => {
|
|
return (
|
|
pos && (
|
|
<React.Fragment key={pos.key}>
|
|
<Placeholder
|
|
pos={pos}
|
|
setSignKey={props.setSignKey}
|
|
setIsSignPad={props.setIsSignPad}
|
|
setIsStamp={props.setIsStamp}
|
|
handleSignYourselfImageResize={handleImageResize}
|
|
index={props.pageNumber}
|
|
xyPosition={props.signerPos}
|
|
setXyPosition={props.setSignerPos}
|
|
data={data}
|
|
setIsResize={props.setIsResize}
|
|
isShowBorder={props.isSelfSign}
|
|
isAlllowModify={props.isAlllowModify}
|
|
signerObjId={props.signerObjectId}
|
|
isShowDropdown={true}
|
|
isNeedSign={props.pdfRequest}
|
|
isSelfSign={true}
|
|
isSignYourself={false}
|
|
posWidth={posWidth}
|
|
posHeight={posHeight}
|
|
handleUserName={handleAllUserName}
|
|
isDragging={props.isDragging}
|
|
pdfDetails={props.pdfDetails}
|
|
setIsInitial={props.setIsInitial}
|
|
setValidateAlert={props.setValidateAlert}
|
|
unSignedWidgetId={props.unSignedWidgetId}
|
|
setSelectWidgetId={props.setSelectWidgetId}
|
|
selectWidgetId={props.selectWidgetId}
|
|
setCurrWidgetsDetails={props.setCurrWidgetsDetails}
|
|
uniqueId={props.uniqueId}
|
|
scale={props.scale}
|
|
containerWH={props.containerWH}
|
|
pdfOriginalWH={props.pdfOriginalWH}
|
|
pageNumber={props.pageNumber}
|
|
ispublicTemplate={props.ispublicTemplate}
|
|
handleUserDetails={props.handleUserDetails}
|
|
isResize={props.isResize}
|
|
setIsAgreeTour={props.setIsAgreeTour}
|
|
isAgree={props.isAgree}
|
|
handleTabDrag={props.handleTabDrag}
|
|
handleStop={props.handleStop}
|
|
setWidgetType={props.setWidgetType}
|
|
setUniqueId={props.setUniqueId}
|
|
setIsSelectId={props.setIsSelectId}
|
|
handleDeleteSign={props.handleDeleteSign}
|
|
setIsPageCopy={props.setIsPageCopy}
|
|
handleTextSettingModal={props.handleTextSettingModal}
|
|
setIsCheckbox={props.setIsCheckbox}
|
|
isFreeResize={false}
|
|
isOpenSignPad={true}
|
|
assignedWidgetId={props.assignedWidgetId}
|
|
isApplyAll={true}
|
|
setFontSize={props.setFontSize}
|
|
fontSize={props.fontSize}
|
|
fontColor={props.fontColor}
|
|
setFontColor={props.setFontColor}
|
|
setRequestSignTour={props.setRequestSignTour}
|
|
/>
|
|
</React.Fragment>
|
|
)
|
|
);
|
|
})}
|
|
</React.Fragment>
|
|
);
|
|
})
|
|
);
|
|
};
|
|
|
|
const calculateFontsize = (pos) => {
|
|
const width = posWidth(pos);
|
|
const height = posHeight(pos);
|
|
|
|
if (height === width || height < width) {
|
|
return `${height / 5}px`;
|
|
} else if (width < height) {
|
|
return `${width / 10}px`;
|
|
}
|
|
};
|
|
//function for render placeholder block over pdf document
|
|
|
|
const handleUserName = (Id, Role, type, pos) => {
|
|
if (Id) {
|
|
const checkSign = props.signersdata.find((sign) => sign.Id === Id);
|
|
if (checkSign?.Name) {
|
|
return (
|
|
<>
|
|
<div
|
|
style={{
|
|
fontSize: pos ? calculateFontsize(pos) : "8px"
|
|
}}
|
|
className="text-black font-medium"
|
|
>
|
|
{checkSign?.Name}
|
|
</div>
|
|
{type && (
|
|
<div
|
|
style={{
|
|
fontSize: pos ? calculateFontsize(pos) : "11px"
|
|
}}
|
|
className=" font-bold"
|
|
>
|
|
{type}
|
|
</div>
|
|
)}
|
|
{Role && (
|
|
<div
|
|
style={{
|
|
fontSize: pos ? calculateFontsize(pos) : "8px"
|
|
}}
|
|
className="text-black text-[8px] font-medium"
|
|
>
|
|
{`(${Role})`}
|
|
</div>
|
|
)}
|
|
</>
|
|
);
|
|
} else {
|
|
return (
|
|
<>
|
|
{type && (
|
|
<div
|
|
style={{ fontSize: pos ? calculateFontsize(pos) : "11px" }}
|
|
className=" font-bold"
|
|
>
|
|
{type}
|
|
</div>
|
|
)}
|
|
<div
|
|
style={{ fontSize: pos ? calculateFontsize(pos) : "8px" }}
|
|
className="text-black font-medium"
|
|
>
|
|
{Role}
|
|
</div>
|
|
</>
|
|
);
|
|
}
|
|
} else {
|
|
return (
|
|
<>
|
|
{type && <div className="text-[11px] font-bold">{type}</div>}
|
|
<div className="text-black text-[8px] font-medium">{Role}</div>
|
|
</>
|
|
);
|
|
}
|
|
};
|
|
const pdfDataBase64 = `data:application/pdf;base64,${props.pdfBase64Url}`;
|
|
//calculate render height of pdf in mobile view
|
|
const handlePageLoadSuccess = (page) => {
|
|
const containerWidth = props.divRef.current.offsetWidth; // Get container width
|
|
const viewport = page.getViewport({ scale: 1 });
|
|
const scale = containerWidth / viewport.width; // Scale to fit container width
|
|
const scaleHeight = viewport.height * scale;
|
|
setScaledHeight(scaleHeight);
|
|
};
|
|
return (
|
|
<>
|
|
{props.successEmail && (
|
|
<Alert type={"success"}>{t("success-email-alert")}</Alert>
|
|
)}
|
|
{isMobile ? (
|
|
<RSC
|
|
style={{
|
|
position: "relative",
|
|
boxShadow: "rgba(17, 12, 46, 0.15) 0px 48px 100px 0px",
|
|
//49 is height of header
|
|
height: isGuestSigner ? window.innerHeight - 49 : scaledHeight,
|
|
zIndex: 0
|
|
}}
|
|
noScrollY={props.scale === 1 ? true : false}
|
|
noScrollX={props.scale === 1 ? true : false}
|
|
>
|
|
<div
|
|
data-tut="reactourForth"
|
|
className={`${
|
|
isGuestSigner ? "30px" : ""
|
|
} border-[0.1px] border-[#ebe8e8] overflow-x-auto`}
|
|
style={{
|
|
width:
|
|
props.containerWH?.width &&
|
|
props.containerWH?.width * props.scale
|
|
}}
|
|
ref={props.drop}
|
|
id="container"
|
|
>
|
|
{props.containerWH?.width &&
|
|
props.pdfOriginalWH.length > 0 &&
|
|
(props.pdfRequest || props.isSelfSign
|
|
? props.signerPos?.map((data, key) => {
|
|
return (
|
|
<React.Fragment key={key}>
|
|
{checkSignedSigners(data)}
|
|
</React.Fragment>
|
|
);
|
|
})
|
|
: props.placeholder // placeholder mobile
|
|
? props.signerPos?.map((data, ind) => {
|
|
return (
|
|
<React.Fragment key={ind}>
|
|
{data?.placeHolder &&
|
|
data?.placeHolder.map((placeData, index) => {
|
|
return (
|
|
<React.Fragment key={index}>
|
|
{placeData.pageNumber === props.pageNumber &&
|
|
placeData.pos.map((pos) => {
|
|
return (
|
|
<React.Fragment key={pos.key}>
|
|
<Placeholder
|
|
pos={pos}
|
|
setIsPageCopy={props.setIsPageCopy}
|
|
setSignKey={props.setSignKey}
|
|
handleDeleteSign={
|
|
props.handleDeleteSign
|
|
}
|
|
setIsStamp={props.setIsStamp}
|
|
handleTabDrag={props.handleTabDrag}
|
|
handleStop={props.handleStop}
|
|
handleSignYourselfImageResize={
|
|
handleImageResize
|
|
}
|
|
index={props.pageNumber}
|
|
xyPosition={props.signerPos}
|
|
setXyPosition={props.setSignerPos}
|
|
data={data}
|
|
setIsResize={props.setIsResize}
|
|
setShowDropdown={
|
|
props.setShowDropdown
|
|
}
|
|
isShowBorder={true}
|
|
isPlaceholder={true}
|
|
setUniqueId={props.setUniqueId}
|
|
handleLinkUser={
|
|
props.handleLinkUser
|
|
}
|
|
handleUserName={handleUserName}
|
|
isSignYourself={false}
|
|
posWidth={posWidth}
|
|
posHeight={posHeight}
|
|
isDragging={props.isDragging}
|
|
setIsValidate={props.setIsValidate}
|
|
setWidgetType={props.setWidgetType}
|
|
setIsRadio={props.setIsRadio}
|
|
setIsCheckbox={props.setIsCheckbox}
|
|
setCurrWidgetsDetails={
|
|
props.setCurrWidgetsDetails
|
|
}
|
|
setSelectWidgetId={
|
|
props.setSelectWidgetId
|
|
}
|
|
selectWidgetId={
|
|
props.selectWidgetId
|
|
}
|
|
handleNameModal={
|
|
props.handleNameModal
|
|
}
|
|
setTempSignerId={
|
|
props.setTempSignerId
|
|
}
|
|
uniqueId={props.uniqueId}
|
|
handleTextSettingModal={
|
|
props.handleTextSettingModal
|
|
}
|
|
scale={props.scale}
|
|
containerWH={props.containerWH}
|
|
pdfOriginalWH={props.pdfOriginalWH}
|
|
pageNumber={props.pageNumber}
|
|
setIsSelectId={props.setIsSelectId}
|
|
fontSize={props.fontSize}
|
|
setFontSize={props.setFontSize}
|
|
fontColor={props.fontColor}
|
|
setFontColor={props.setFontColor}
|
|
isResize={props.isResize}
|
|
unSignedWidgetId={
|
|
props.unSignedWidgetId
|
|
}
|
|
isFreeResize={true}
|
|
/>
|
|
</React.Fragment>
|
|
);
|
|
})}
|
|
</React.Fragment>
|
|
);
|
|
})}
|
|
</React.Fragment>
|
|
);
|
|
})
|
|
: !props.pdfDetails?.[0]?.IsCompleted &&
|
|
props.xyPosition?.map((data, ind) => {
|
|
return (
|
|
<React.Fragment key={ind}>
|
|
{data.pageNumber === props.pageNumber &&
|
|
data.pos.map((pos, id) => {
|
|
return (
|
|
pos && (
|
|
<Placeholder
|
|
key={id}
|
|
pos={pos}
|
|
setIsPageCopy={props.setIsPageCopy}
|
|
setSignKey={props.setSignKey}
|
|
handleDeleteSign={props.handleDeleteSign}
|
|
setIsStamp={props.setIsStamp}
|
|
handleTabDrag={props.handleTabDrag}
|
|
handleStop={props.handleStop}
|
|
handleSignYourselfImageResize={
|
|
handleSignYourselfImageResize
|
|
}
|
|
index={props.index}
|
|
xyPosition={props.xyPosition}
|
|
setXyPosition={props.setXyPosition}
|
|
containerWH={props.containerWH}
|
|
setIsSignPad={props.setIsSignPad}
|
|
isShowBorder={true}
|
|
isSignYourself={true}
|
|
posWidth={posWidth}
|
|
posHeight={posHeight}
|
|
pdfDetails={props.pdfDetails[0]}
|
|
isDragging={props.isDragging}
|
|
setIsInitial={props.setIsInitial}
|
|
setWidgetType={props.setWidgetType}
|
|
setSelectWidgetId={props.setSelectWidgetId}
|
|
selectWidgetId={props.selectWidgetId}
|
|
handleUserName={handleUserName}
|
|
setIsCheckbox={props.setIsCheckbox}
|
|
setValidateAlert={props.setValidateAlert}
|
|
setCurrWidgetsDetails={
|
|
props.setCurrWidgetsDetails
|
|
}
|
|
handleTextSettingModal={
|
|
props.handleTextSettingModal
|
|
}
|
|
scale={props.scale}
|
|
pdfOriginalWH={props.pdfOriginalWH}
|
|
pageNumber={props.pageNumber}
|
|
fontSize={props.fontSize}
|
|
setFontSize={props.setFontSize}
|
|
fontColor={props.fontColor}
|
|
setFontColor={props.setFontColor}
|
|
isResize={props.isResize}
|
|
setIsResize={props.setIsResize}
|
|
isFreeResize={false}
|
|
isOpenSignPad={true}
|
|
/>
|
|
)
|
|
);
|
|
})}
|
|
</React.Fragment>
|
|
);
|
|
}))}
|
|
|
|
<Document
|
|
onLoadError={() => props.setPdfLoad(false)}
|
|
loading={t("loading-doc")}
|
|
onLoadSuccess={props.pageDetails}
|
|
// ref={pdfRef}'
|
|
onClick={() => {
|
|
if (props.setSelectWidgetId) {
|
|
props.setSelectWidgetId("");
|
|
}
|
|
}}
|
|
file={pdfDataBase64}
|
|
>
|
|
<Page
|
|
onLoadSuccess={handlePageLoadSuccess}
|
|
scale={props.scale || 1}
|
|
key={props.index}
|
|
pageNumber={props.pageNumber}
|
|
width={props.containerWH.width}
|
|
renderAnnotationLayer={false}
|
|
renderTextLayer={false}
|
|
onGetAnnotationsError={(error) => {
|
|
console.log("annotation error", error);
|
|
}}
|
|
/>
|
|
</Document>
|
|
</div>
|
|
</RSC>
|
|
) : (
|
|
<RSC
|
|
style={{
|
|
position: "relative",
|
|
boxShadow: "rgba(17, 12, 46, 0.15) 0px 48px 100px 0px",
|
|
height: window.innerHeight + "px",
|
|
zIndex: 0
|
|
}}
|
|
noScrollY={false}
|
|
noScrollX={props.scale === 1 ? true : false}
|
|
>
|
|
<div
|
|
style={{
|
|
width:
|
|
props.containerWH?.width &&
|
|
props.containerWH?.width * props.scale
|
|
}}
|
|
ref={props.drop}
|
|
id="container"
|
|
>
|
|
{props.pdfLoad &&
|
|
props.containerWH?.width &&
|
|
props.pdfOriginalWH.length > 0 &&
|
|
(props.pdfRequest || props.isSelfSign //pdf request sign flow
|
|
? props.signerPos?.map((data, key) => {
|
|
return (
|
|
<React.Fragment key={key}>
|
|
{checkSignedSigners(data)}
|
|
</React.Fragment>
|
|
);
|
|
})
|
|
: props.placeholder //placeholder and template flow
|
|
? props.signerPos.map((data, ind) => {
|
|
return (
|
|
<React.Fragment key={ind}>
|
|
{data?.placeHolder &&
|
|
data?.placeHolder.map((placeData, index) => {
|
|
return (
|
|
<React.Fragment key={index}>
|
|
{placeData.pageNumber === props.pageNumber &&
|
|
placeData.pos.map((pos) => {
|
|
return (
|
|
<React.Fragment key={pos.key}>
|
|
<Placeholder
|
|
pos={pos}
|
|
setIsPageCopy={props.setIsPageCopy}
|
|
setSignKey={props.setSignKey}
|
|
handleDeleteSign={
|
|
props.handleDeleteSign
|
|
}
|
|
setIsStamp={props.setIsStamp}
|
|
handleTabDrag={props.handleTabDrag}
|
|
handleStop={props.handleStop}
|
|
handleSignYourselfImageResize={
|
|
handleImageResize
|
|
}
|
|
index={props.pageNumber}
|
|
xyPosition={props.signerPos}
|
|
setXyPosition={props.setSignerPos}
|
|
data={data}
|
|
setIsResize={props.setIsResize}
|
|
setShowDropdown={
|
|
props.setShowDropdown
|
|
}
|
|
isShowBorder={true}
|
|
isPlaceholder={true}
|
|
setUniqueId={props.setUniqueId}
|
|
handleLinkUser={
|
|
props.handleLinkUser
|
|
}
|
|
handleUserName={handleUserName}
|
|
isSignYourself={false}
|
|
posWidth={posWidth}
|
|
posHeight={posHeight}
|
|
isDragging={props.isDragging}
|
|
setIsValidate={props.setIsValidate}
|
|
setWidgetType={props.setWidgetType}
|
|
setIsRadio={props.setIsRadio}
|
|
setIsCheckbox={props.setIsCheckbox}
|
|
setCurrWidgetsDetails={
|
|
props.setCurrWidgetsDetails
|
|
}
|
|
setSelectWidgetId={
|
|
props.setSelectWidgetId
|
|
}
|
|
selectWidgetId={
|
|
props.selectWidgetId
|
|
}
|
|
handleNameModal={
|
|
props.handleNameModal
|
|
}
|
|
setTempSignerId={
|
|
props.setTempSignerId
|
|
}
|
|
uniqueId={props.uniqueId}
|
|
handleTextSettingModal={
|
|
props.handleTextSettingModal
|
|
}
|
|
scale={props.scale}
|
|
containerWH={props.containerWH}
|
|
pdfOriginalWH={props.pdfOriginalWH}
|
|
pageNumber={props.pageNumber}
|
|
setIsSelectId={props.setIsSelectId}
|
|
fontSize={props.fontSize}
|
|
setFontSize={props.setFontSize}
|
|
fontColor={props.fontColor}
|
|
setFontColor={props.setFontColor}
|
|
isResize={props.isResize}
|
|
unSignedWidgetId={
|
|
props.unSignedWidgetId
|
|
}
|
|
isFreeResize={true}
|
|
/>
|
|
</React.Fragment>
|
|
);
|
|
})}
|
|
</React.Fragment>
|
|
);
|
|
})}
|
|
</React.Fragment>
|
|
);
|
|
})
|
|
: !props.pdfDetails?.[0]?.IsCompleted &&
|
|
props.xyPosition?.map((data, ind) => {
|
|
// signyourself flow
|
|
return (
|
|
<React.Fragment key={ind}>
|
|
{data.pageNumber === props.pageNumber &&
|
|
data.pos.map((pos) => {
|
|
return (
|
|
<React.Fragment key={pos.key}>
|
|
<Placeholder
|
|
pos={pos}
|
|
setIsPageCopy={props.setIsPageCopy}
|
|
setSignKey={props.setSignKey}
|
|
handleDeleteSign={props.handleDeleteSign}
|
|
setIsStamp={props.setIsStamp}
|
|
handleTabDrag={props.handleTabDrag}
|
|
handleStop={(event, dragElement) =>
|
|
props.handleStop(
|
|
event,
|
|
dragElement,
|
|
pos.type
|
|
)
|
|
}
|
|
handleSignYourselfImageResize={
|
|
handleSignYourselfImageResize
|
|
}
|
|
index={props.index}
|
|
xyPosition={props.xyPosition}
|
|
setXyPosition={props.setXyPosition}
|
|
setIsSignPad={props.setIsSignPad}
|
|
isShowBorder={true}
|
|
isSignYourself={true}
|
|
posWidth={posWidth}
|
|
posHeight={posHeight}
|
|
pdfDetails={props.pdfDetails[0]}
|
|
isDragging={props.isDragging}
|
|
setIsInitial={props.setIsInitial}
|
|
setWidgetType={props.setWidgetType}
|
|
setSelectWidgetId={props.setSelectWidgetId}
|
|
selectWidgetId={props.selectWidgetId}
|
|
handleUserName={handleUserName}
|
|
setIsCheckbox={props.setIsCheckbox}
|
|
setValidateAlert={props.setValidateAlert}
|
|
setCurrWidgetsDetails={
|
|
props.setCurrWidgetsDetails
|
|
}
|
|
handleTextSettingModal={
|
|
props.handleTextSettingModal
|
|
}
|
|
scale={props.scale}
|
|
containerWH={props.containerWH}
|
|
pdfOriginalWH={props.pdfOriginalWH}
|
|
pageNumber={props.pageNumber}
|
|
fontSize={props.fontSize}
|
|
setFontSize={props.setFontSize}
|
|
fontColor={props.fontColor}
|
|
setFontColor={props.setFontColor}
|
|
isResize={props.isResize}
|
|
setIsResize={props.setIsResize}
|
|
isFreeResize={false}
|
|
isOpenSignPad={true}
|
|
/>
|
|
</React.Fragment>
|
|
);
|
|
})}
|
|
</React.Fragment>
|
|
);
|
|
}))}
|
|
|
|
{/* this component for render pdf document is in middle of the component */}
|
|
<Document
|
|
onLoadError={() => props.setPdfLoad(false)}
|
|
loading={t("loading-doc")}
|
|
onLoadSuccess={props.pageDetails}
|
|
onClick={() => {
|
|
if (props.setSelectWidgetId) {
|
|
props.setSelectWidgetId("");
|
|
}
|
|
}}
|
|
file={pdfDataBase64}
|
|
>
|
|
<Page
|
|
key={props.index}
|
|
width={props.containerWH.width}
|
|
scale={props.scale || 1}
|
|
className={"-z-[1]"} // when user zoom-in in tablet widgets move backward that's why pass -z-[1]
|
|
pageNumber={props.pageNumber}
|
|
renderAnnotationLayer={false}
|
|
renderTextLayer={false}
|
|
onGetAnnotationsError={(error) => {
|
|
console.log("annotation error", error);
|
|
}}
|
|
/>
|
|
</Document>
|
|
</div>
|
|
</RSC>
|
|
)}
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default RenderPdf;
|