-
+
{state.toastDescription}
diff --git a/apps/OpenSign/src/routes/PlanSubscriptions.js b/apps/OpenSign/src/routes/PlanSubscriptions.js
index 61784986e..740277932 100644
--- a/apps/OpenSign/src/routes/PlanSubscriptions.js
+++ b/apps/OpenSign/src/routes/PlanSubscriptions.js
@@ -64,7 +64,7 @@ const PlanSubscriptions = () => {
style={{
backgroundColor: "white",
overflowY: "auto",
- maxHeight: "600px",
+ maxHeight: "100%",
"--theme-color": "#7952b3",
"--plan-width": 30
}}
diff --git a/apps/OpenSign/src/routes/Report.js b/apps/OpenSign/src/routes/Report.js
index d82dc3630..efec224ac 100644
--- a/apps/OpenSign/src/routes/Report.js
+++ b/apps/OpenSign/src/routes/Report.js
@@ -12,14 +12,37 @@ const Report = () => {
const [isLoader, setIsLoader] = useState(true);
const [reportName, setReportName] = useState("");
const [actions, setActions] = useState([]);
+ const [isNextRecord, setIsNextRecord] = useState(false);
+ const [isMoreDocs, setIsMoreDocs] = useState(true);
+ const abortController = new AbortController();
+
+ // below useEffect is call when id param change
useEffect(() => {
setReportName("");
+ setList([]);
getReportData();
+
+ // Function returned from useEffect is called on unmount
+ return () => {
+ setIsLoader(true);
+ setList([]);
+ setIsNextRecord(false);
+ // Here it'll abort the fetch
+ abortController.abort();
+ };
// eslint-disable-next-line
}, [id]);
- const getReportData = async () => {
- setIsLoader(true);
+ // below useEffect call when isNextRecord state is true and fetch next record
+ useEffect(() => {
+ if (isNextRecord) {
+ getReportData(List.length, 200);
+ }
+ // eslint-disable-next-line
+ }, [isNextRecord]);
+
+ const getReportData = async (skipUserRecord = 0, limit = 200) => {
+ // setIsLoader(true);
const json = reportJson(id);
if (json) {
setActions(json.actions);
@@ -39,8 +62,11 @@ const Report = () => {
"X-Parse-Session-Token": localStorage.getItem("accesstoken")
};
try {
- const url = `${serverURL}?where=${strParams}&keys=${strKeys}&order=${orderBy}&include=AuditTrail.UserPtr`;
- const res = await axios.get(url, { headers: headers });
+ const url = `${serverURL}?where=${strParams}&keys=${strKeys}&order=${orderBy}&skip=${skipUserRecord}&limit=${limit}&include=AuditTrail.UserPtr`;
+ const res = await axios.get(url, {
+ headers: headers,
+ signal: abortController.signal // is used to cancel fetch query
+ });
if (id === "4Hhwbp482K") {
const listData = res.data?.results.filter(
(x) => x.Signers.length > 0
@@ -66,14 +92,35 @@ const Report = () => {
}
}
}
- setList(arr);
+ if (arr.length === 10) {
+ setIsMoreDocs(true);
+ } else {
+ setIsMoreDocs(false);
+ }
+ setList((prevRecord) =>
+ prevRecord.length > 0 ? [...prevRecord, ...arr] : arr
+ );
} else {
- setList(res.data?.results);
+ if (res.data.results.length === 10) {
+ setIsMoreDocs(true);
+ console.log("here");
+ } else {
+ setIsMoreDocs(false);
+ }
+ setIsNextRecord(false);
+ setList((prevRecord) =>
+ prevRecord.length > 0
+ ? [...prevRecord, ...res.data.results]
+ : res.data.results
+ );
}
setIsLoader(false);
} catch (err) {
- console.log("err ", err);
- setIsLoader(false);
+ const isCancel = axios.isCancel(err);
+ if (!isCancel) {
+ console.log("err ", err);
+ setIsLoader(false);
+ }
}
} else {
setIsLoader(false);
@@ -106,6 +153,8 @@ const Report = () => {
ReportName={reportName}
List={List}
actions={actions}
+ setIsNextRecord={setIsNextRecord}
+ isMoreDocs={isMoreDocs}
/>
) : (
diff --git a/apps/OpenSign/src/routes/Signup.js b/apps/OpenSign/src/routes/Signup.js
index ea3481cb7..6378e6785 100644
--- a/apps/OpenSign/src/routes/Signup.js
+++ b/apps/OpenSign/src/routes/Signup.js
@@ -251,7 +251,7 @@ const Signup = (props) => {
element.pageType
);
setState({ loading: false });
- navigate("/login");
+ navigate("/");
} else {
extendedInfo.forEach((x) => {
if (x.TenantId) {
diff --git a/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs b/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs
index 509e2dd53..b84ba4c9b 100644
--- a/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs
+++ b/apps/OpenSignServer/cloud/parsefunction/pdf/SignPDF.min.cjs
@@ -1 +1 @@
-const signer=require("node-signpdf").default;class SignPDF{constructor(e,t){this.pdfDoc=e,this.certificate=t}async signPDF(){return signer.sign(this.pdfDoc,this.certificate,{passphrase:"emudhra"})}static unit8ToBuffer(e){var t=Buffer.alloc(e.byteLength),r=new Uint8Array(e);for(let e=0;e
{
+ return (
+
+
+
+ 404
+
+
Page Not Found
+
+
+ );
+};
+
+export default PageNotFound;
diff --git a/microfrontends/SignDocuments/src/Component/component/emailComponent.js b/microfrontends/SignDocuments/src/Component/component/emailComponent.js
index af6ecf0e4..b9bb36752 100644
--- a/microfrontends/SignDocuments/src/Component/component/emailComponent.js
+++ b/microfrontends/SignDocuments/src/Component/component/emailComponent.js
@@ -109,8 +109,17 @@ function EmailComponent({
const handleToPrint = async (event) => {
event.preventDefault();
- const base64 = await getBase64FromUrl(pdfUrl);
- printModule({ printable: base64, type: "pdf", base64: true });
+ const pdf = await getBase64FromUrl(pdfUrl);
+ const isAndroidDevice = navigator.userAgent.match(/Android/i);
+ const isAppleDevice = (/iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) && !window.MSStream
+ if (isAndroidDevice || isAppleDevice) {
+ const byteArray = Uint8Array.from(atob(pdf).split('').map(char => char.charCodeAt(0)));
+ const blob = new Blob([byteArray], { type: 'application/pdf' });
+ const blobUrl = URL.createObjectURL(blob);
+ window.open(blobUrl, '_blank');
+ } else {
+ printModule({ printable: pdf, type: "pdf", base64: true });
+ }
};
diff --git a/microfrontends/SignDocuments/src/Component/component/header.js b/microfrontends/SignDocuments/src/Component/component/header.js
index bccdd46f2..8ab8d6994 100644
--- a/microfrontends/SignDocuments/src/Component/component/header.js
+++ b/microfrontends/SignDocuments/src/Component/component/header.js
@@ -60,8 +60,16 @@ function Header({
event.preventDefault();
const pdf = await getBase64FromUrl(pdfUrl);
-
- printModule({ printable: pdf, type: "pdf", base64: true });
+ const isAndroidDevice = navigator.userAgent.match(/Android/i);
+ const isAppleDevice = (/iPad|iPhone|iPod/.test(navigator.platform) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) && !window.MSStream
+ if (isAndroidDevice || isAppleDevice) {
+ const byteArray = Uint8Array.from(atob(pdf).split('').map(char => char.charCodeAt(0)));
+ const blob = new Blob([byteArray], { type: 'application/pdf' });
+ const blobUrl = URL.createObjectURL(blob);
+ window.open(blobUrl, '_blank');
+ } else {
+ printModule({ printable: pdf, type: "pdf", base64: true });
+ }
};
//handle download signed pdf
diff --git a/microfrontends/SignDocuments/src/Component/login.js b/microfrontends/SignDocuments/src/Component/login.js
index 9995e1970..1636beff7 100644
--- a/microfrontends/SignDocuments/src/Component/login.js
+++ b/microfrontends/SignDocuments/src/Component/login.js
@@ -116,7 +116,8 @@ function Login() {
localStorage.setItem("accesstoken", _user.sessionToken);
setLoading(false);
//navigate user to on signature page
- navigate(`/recipientSignPdf/${id}/${contactBookId}`);
+ // navigate(`/recipientSignPdf/${id}/${contactBookId}`);
+ navigate(`/loadmf/signmicroapp/recipientSignPdf/${id}/${contactBookId}`);
}
} catch (error) {}
} else {
diff --git a/microfrontends/SignDocuments/src/Component/placeHolderSign.js b/microfrontends/SignDocuments/src/Component/placeHolderSign.js
index 80ef92e27..39db3656b 100644
--- a/microfrontends/SignDocuments/src/Component/placeHolderSign.js
+++ b/microfrontends/SignDocuments/src/Component/placeHolderSign.js
@@ -166,7 +166,7 @@ function PlaceHolderSign() {
getDocumentDetails();
}
}, []);
-
+
//function for get document details
const getDocumentDetails = async () => {
await axios
@@ -275,7 +275,7 @@ function PlaceHolderSign() {
getSignerPos(item, monitor);
}
};
-
+
const getSignerPos = (item, monitor) => {
const key = Math.floor(1000 + Math.random() * 9000);
let filterSignerPos = signerPos.filter(
@@ -396,7 +396,7 @@ function PlaceHolderSign() {
blockColor: color[isSelectListId],
placeHolder: xyPosArr
};
-
+
setSignerPos((prev) => [...prev, placeHolderPos]);
}
};
@@ -626,7 +626,7 @@ function PlaceHolderSign() {
setSignBtnPosition([]);
setPageNumber((prevPageNumber) => prevPageNumber + offset);
}
-
+
//function for capture position on hover signature button
const handleDivClick = (e) => {
const divRect = e.currentTarget.getBoundingClientRect();
@@ -679,7 +679,7 @@ function PlaceHolderSign() {
year: "numeric"
});
let sender = signersdata.ExtUserPtr.Email;
- const signerMail = signersdata.Signers;
+ const signerMail = signersdata.Signers;
for (let i = 0; i < signerMail.length; i++) {
try {
@@ -698,7 +698,8 @@ function PlaceHolderSign() {
"parseAppId"
)}&${localStorage.getItem("_appName")}`;
- let signPdf = `https://qik-ai-org.github.io/Sign-MicroappV2/#/login/${signersdata.objectId}/${signerMail[i].Email}/${objectId}/${serverParams}`;
+ const hostUrl = window.location.origin + "/loadmf/signmicroapp";
+ let signPdf = `${hostUrl}/login/${signersdata.objectId}/${signerMail[i].Email}/${objectId}/${serverParams}`;
const themeBGcolor = themeColor();
let params = {
diff --git a/microfrontends/SignDocuments/src/Routes.js b/microfrontends/SignDocuments/src/Routes.js
index e9883138b..605212871 100644
--- a/microfrontends/SignDocuments/src/Routes.js
+++ b/microfrontends/SignDocuments/src/Routes.js
@@ -8,6 +8,7 @@ import Login from "./Component/login";
import DraftDocument from "./Component/DraftDocument";
import PdfRequestFiles from "./Component/PdfRequestFiles";
import LegaDrive from "./Component/LegaDrive/LegaDrive";
+import PageNotFound from "./Component/PageNotFound";
// `AppRoutes` is used to define route path of app and
// it expose to host app, check moduleFederation.config.js for more
@@ -33,7 +34,10 @@ function AppRoutes() {
{/*Add default signature of user route */}
} />
{/* login page route */}
- } />
+ }
+ />
{/* draft document route to handle and navigate route page accordiing to document status */}
} />
{/* for user signature (need your sign route) with row level data */}
@@ -42,6 +46,8 @@ function AppRoutes() {
} />
{/* lega drive route */}
} />
+ {/* Page Not Found */}
+ } />
);